From 6805f6e09455c51e0e38d170538fbf757594d3c4 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期二, 03 二月 2026 15:32:40 +0800
Subject: [PATCH] 提交

---
 server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java |  151 +++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 125 insertions(+), 26 deletions(-)

diff --git a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
index 9a0bef0..0e37054 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
@@ -5,11 +5,14 @@
 import com.alibaba.fastjson.TypeReference;
 import com.allinpay.syb.lib.SybConstants;
 import com.allinpay.syb.lib.SybUtil;
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.Constants;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.business.dto.PayOrderNotifyParam;
 import com.doumee.dao.business.dto.PayOrderParam;
 import com.doumee.dao.business.dto.PayOrderResponse;
 import com.doumee.dao.business.model.Orders;
@@ -29,10 +32,11 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.TreeMap;
+import java.util.*;
 
 /**
  * 璁㈠崟璁板綍琛ㄤ俊鎭〃Service瀹炵幇
@@ -47,6 +51,8 @@
     private OrdersMapper ordersMapper;
     @Autowired
     private SystemUserMapper systemUserMapper;
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
 
     @Override
     @Transactional
@@ -70,6 +76,7 @@
             }
         }
         Date date = new Date();
+        orders.setMoney(orders.getMoney().multiply(new BigDecimal(100)));//鍗曚綅鍒�
         orders.setCreateTime(date);
         orders.setPayStatus(Constants.ZERO);
         orders.setStatus(Constants.ZERO);
@@ -82,45 +89,50 @@
         try {
             PayOrderResponse r  = new PayOrderResponse();
             PayOrderParam param = new PayOrderParam();
-            param.setAppid(SybConstants.SYB_APPID);
-            param.setCusid(SybConstants.SYB_CUSID);
-            param.setVersion(SybConstants.VERSION);
+            param.setAppid(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PAY_SYB_APPID).getCode());
+            param.setCusid(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PAY_SYB_CUSID).getCode());
+            param.setVersion(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PAY_VERSION).getCode());
             param.setCharset("utf-8");
-            param.setTrxamt("1");
+            param.setTrxamt("1");//鍗曚綅鍒�
+            param.setRandomstr(UUID.randomUUID().toString().replace("-",""));
             param.setReqsn(""+orders.getId());
-            param.setReturl("http://localhost:8080/#/page/success/success");
-            param.setNotify_url(SybConstants.NOTFIY_URL);
-            param.setNotify_url("");
+            param.setReturl(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PAY_RETURN_URL).getCode());
+            param.setNotify_url( systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PAY_NOTIFY_URL).getCode());
             param.setBody(orders.getRemark());
-            param.setValidtime(   SybConstants.VALID_TIME);
-            param.setSigntype(SybConstants.SIGN_TYPE);
+            param.setValidtime(  systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PAY_VALID_TIME).getCode());
+            param.setSigntype(  systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PAY_SIGN_TYPE).getCode());
 
-            String appkey = "";
-            if(SybConstants.SIGN_TYPE.equals("RSA")){
-                appkey = SybConstants.SYB_RSACUSPRIKEY;
-            } else if(SybConstants.SIGN_TYPE.equals("SM2")){
-                appkey = SybConstants.SYB_SM2PPRIVATEKEY;
-            } else{
-                appkey = SybConstants.SYB_MD5_APPKEY;
-            }
+            String appkey = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PAY_APPKEY).getCode();
             String sign  = SybUtil.unionSign(getTreeMapByParam(param),appkey,param.getSigntype());
             param.setSign( sign);
-            r.setUrl(SybConstants.SYB_APIURL+"/h5unionpay/unionorder");
+            r.setUrl(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PAY_SYB_APIURL).getCode()+"/h5unionpay/unionorder");
             r.setParam(param);
-//            String r = HttpsUtil.postJson(SybConstants.SYB_APIURL+"/h5unionpay/unionorder",JSONObject.toJSONString(param));
-//            log.error(param);
             return r;
         }catch (Exception e){
-                throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鍙戣捣鏀舵璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯锛�");
+            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鍙戣捣鏀舵璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯锛�");
         }
     }
 
-    private TreeMap<String, String> getTreeMapByParam(PayOrderParam param) {
+    private TreeMap<String, String> getTreeMapByParam(Object param) {
+
         TypeReference< TreeMap<String, String> > type =	new TypeReference< TreeMap<String, String> >() { };
         TreeMap<String, String>  obj = JSONObject.parseObject(JSON.toJSONString(param), type.getType());
         return obj;
     }
-
+    private TreeMap<String, String> getTreeMapByParamStr(String paramStr) {
+        TreeMap<String, String>  obj = new TreeMap<>();
+        String params[] =paramStr.split("&");
+        if(params.length ==0){
+            return  obj;
+        }
+        for(String tp : params){
+            String tt[] = tp.split("=");
+            if(tt.length>=2){
+                obj.put(tt[0],tt[1]);
+            }
+        }
+        return obj;
+    }
 
     @Override
     public void deleteById(Integer id) {
@@ -230,4 +242,91 @@
         QueryWrapper<Orders> wrapper = new QueryWrapper<>(orders);
         return ordersMapper.selectCount(wrapper);
     }
+    @Override
+    public void returnPage(PayOrderParam param, HttpServletResponse response) throws IOException {
+        String url =systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PAY_RETURN_WEB_URL).getCode();
+        response.sendRedirect(url+"?reqsn="+param.getReqsn());
+    }
+    @Override
+    public void  dealOrdreResult(String paramStr, HttpServletResponse response) throws IOException {
+        String r = "success";
+        try {
+            response.setCharacterEncoding("UTF-8");
+            TreeMap<String,String> params = getTreeMapByParamStr(paramStr);//鍔ㄦ�侀亶鍘嗚幏鍙栨墍鏈夋敹鍒扮殑鍙傛暟,姝ゆ闈炲父鍏抽敭,鍥犱负鏀堕摱瀹濅互鍚庡彲鑳戒細鍔犲瓧娈�,鍔ㄦ�佽幏鍙栧彲浠ュ吋瀹�
+            String appkey = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PAY_SYB_RSATLPUBKEY).getCode();
+            log.error("鏀粯閫氱煡鍙傛暟======"+paramStr);
+            boolean isSign = SybUtil.validSign(params, appkey, params.get("signtype"));// 鎺ュ彈鍒版帹閫侀�氱煡,棣栧厛楠岀
+            PayOrderNotifyParam map = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(params)),PayOrderNotifyParam.class);
+            System.out.println("楠岀缁撴灉:"+isSign);
+            if(isSign){
+                log.error("鏀粯楠岀鎴愬姛======");
+                //澶勭悊璁㈠崟鐘舵��
+                if(StringUtils.isBlank(map.getCusorderid())){
+                    r ="鏀粯缁撴灉寮傚父锛屽鏈夌枒闂鑱旂郴瀹㈡湇浜哄憳";
+                    return;
+                }
+                Orders model = ordersMapper.selectOne(new QueryWrapper<Orders>().lambda()
+                        .eq(Orders::getId,Integer.parseInt(map.getCusorderid()))
+                );
+                if(model ==null){
+                    log.error("鏀粯澶勭悊澶辫触======鏈壘鍒颁氦鏄撹鍗�"+map.getCusorderid());
+                    r ="鏀粯缁撴灉寮傚父锛岃鍗曟煡璇㈠け璐ワ紝濡傛湁鐤戦棶璇疯仈绯诲鏈嶄汉鍛�";
+                    return;
+                }
+                if(Constants.equalsInteger(model.getPayStatus(),Constants.ONE)){
+                    log.error("鏀粯澶勭悊======璁㈠崟宸叉敮浠�"+map.getCusorderid());
+                    return;
+                }
+                String info = SybUtil.getPayInfoByStatus(map);
+                if(StringUtils.equals(map.getTrxcode(),"VSP501")
+                    ||StringUtils.equals(map.getTrxcode(),"VSP511")
+                    ||StringUtils.equals(map.getTrxcode(),"VSP551")){
+                    //浜ゆ槗绫诲瀷鏄� 寰俊鏀粯 銆佹敮浠樺疂鏀粯鎴栬�呴摱鑱旀壂鐮佹敮浠橈紝璁板綍鏀粯鐘舵��
+                    if(StringUtils.equals(map.getTrxstatus(),"0000")){
+                        //浜ゆ槗鎴愬姛
+                        model.setPayStatus(Constants.ONE);
+                        model.setStatus(Constants.ONE);
+                    }else{
+                        //浜ゆ槗澶辫触
+                        model.setStatus(Constants.TWO);
+                    }
+                }else{
+                    model.setStatus(Constants.TWO);
+                }
+                model.setPayFee(map.getFee());
+                model.setPayDate(DateUtil.fromStringToDate("yyyyMMddHHmmss",map.getPaytime()));
+                model.setPayOrderId(map.getSrctrxid());//閫氳仈璁㈠崟鍙�
+                model.setPayThirdOrderId(map.getChnltrxid());//鏀粯瀹濆井淇¤鍗曞彿
+                model.setPayThirdOrderData(map.getChnldata());//涓夋柟浜ゆ槗娓犻亾鏁版嵁
+                model.setPayInfo(info);
+                ordersMapper.updateById(model);
+            }else{
+                log.error("鏀粯楠岀澶辫触======");
+                r ="鏀粯澶辫触锛屽鏈夌枒闂鑱旂郴瀹㈡湇浜哄憳";
+                return;
+            }
+            //楠岀瀹屾瘯杩涜涓氬姟澶勭悊
+        } catch (Exception e) {//澶勭悊寮傚父
+            // TODO: handle exception
+             e.printStackTrace();
+            log.error("鏀粯閫氱煡澶勭悊寮傚父锛�",e.getMessage());
+            r = "error";
+        }  finally{//鏀跺埌閫氱煡,杩斿洖success
+            response.getOutputStream().write(r.getBytes());
+            response.flushBuffer();
+        }
+    }
+
+
+    public   TreeMap<String, String> getParams(HttpServletRequest request){
+        TreeMap<String, String> map = new TreeMap<String, String>();
+        Map reqMap = request.getParameterMap();
+        for(Object key:reqMap.keySet()){
+            String value = ((String[])reqMap.get(key))[0];
+            System.out.println(key+";"+value);
+            map.put(key.toString(),value);
+        }
+        return map;
+    }
+
 }

--
Gitblit v1.9.3