Browse Source

多店铺下单

ct 1 month ago
parent
commit
8425729197

+ 2 - 0
fs-service/src/main/java/com/fs/hisStore/param/FsStoreOrderCreateGroupStoreParam.java

@@ -49,4 +49,6 @@ public class FsStoreOrderCreateGroupStoreParam {
     private Integer orderCreateType;
 
     private Long storeId;
+
+    private Boolean isUserApp = true;
 }

+ 0 - 4
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -53,8 +53,6 @@ import com.fs.his.mapper.*;
 import com.fs.his.param.FsStoreOrderSalesParam;
 import com.fs.his.service.IFsPrescribeService;
 import com.fs.his.service.IFsUserWatchService;
-import com.fs.his.domain.FsUserAddress;
-import com.fs.his.mapper.FsStoreMapper;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.his.vo.FsInquiryOrderVO;
 import com.fs.his.vo.FsStoreOrderExcelVO;
@@ -272,8 +270,6 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService
 
     @Autowired
     private FsStoreProductScrmMapper fsStoreProductMapper;
-    @Autowired
-    private FsStoreScrmMapper fsStoreMapper;
 
     @Autowired
     private FsPrescribeMapper prescribeMapper;

+ 145 - 111
fs-user-app/src/main/java/com/fs/app/controller/store/StoreOrderScrmController.java

@@ -337,48 +337,43 @@ public class StoreOrderScrmController extends AppBaseController {
         return R.ok().put("data", dtos);
     }
 
-    @Login
-    @ApiOperation("创建订单")
-    @PostMapping("/create")
-    public R create(@Validated @RequestBody FsStoreOrderCreateParam param, HttpServletRequest request) {
-        String userId = getUserId();
-        param.setIsUserApp(false);
-        return orderService.createOrder(Long.parseLong(getUserId()), param);
-    }
 //    @Login
 //    @ApiOperation("创建订单")
 //    @PostMapping("/create")
-//    public R create(@Validated @RequestBody FsStoreOrderCreateParam param, HttpServletRequest request){
-//        String userId=getUserId();
-//        return orderService.createOrder(Long.parseLong(getUserId()),param);
+//    public R create(@Validated @RequestBody FsStoreOrderCreateParam param, HttpServletRequest request) {
+//        String userId = getUserId();
+//        param.setIsUserApp(false);
+//        return orderService.createOrder(Long.parseLong(getUserId()), param);
 //    }
-@Login
-@ApiOperation("创建订单")
-@PostMapping("/create")
-public List<R> create(@Validated @RequestBody FsStoreOrderCreateGroupStoreParam param, HttpServletRequest request) {
-    List<R> res = new ArrayList<>();
-    String combinationOrderId = IdUtil.randomUUID();
-    List<String> orderKeys = param.getOrderKeys();
-
-    List<String> createOrderKeys = null;
-    if (param.getCreateOrderKey()==null){
-        createOrderKeys = orderKeys;
-    } else {
-        createOrderKeys = Arrays.asList(param.getCreateOrderKey().split(","));
-    }
-    for (int i = 0; i < orderKeys.size(); i++) {
-        FsStoreOrderCreateParam fsStoreOrderCreateParam = new FsStoreOrderCreateParam();
-        BeanUtils.copyProperties(param, fsStoreOrderCreateParam);
-        //备注
-        fsStoreOrderCreateParam.setMark(param.getMark().get(i));
-        fsStoreOrderCreateParam.setOrderKey(orderKeys.get(i));
-        fsStoreOrderCreateParam.setCombinationOrderId(combinationOrderId);
-        fsStoreOrderCreateParam.setCreateOrderKey(createOrderKeys.get(i));
-        R order = orderService.createOrder(Long.parseLong(getUserId()), fsStoreOrderCreateParam);
-        res.add(order);
+    @Login
+    @ApiOperation("创建订单")
+    @PostMapping("/create")
+    public List<R> create(@Validated @RequestBody FsStoreOrderCreateGroupStoreParam param, HttpServletRequest request) {
+        String userId = getUserId();
+        List<R> res = new ArrayList<>();
+        String combinationOrderId = IdUtil.randomUUID();
+        List<String> orderKeys = param.getOrderKeys();
+
+        List<String> createOrderKeys = null;
+        if (param.getCreateOrderKey()==null){
+            createOrderKeys = orderKeys;
+        } else {
+            createOrderKeys = Arrays.asList(param.getCreateOrderKey().split(","));
+        }
+        for (int i = 0; i < orderKeys.size(); i++) {
+            FsStoreOrderCreateParam fsStoreOrderCreateParam = new FsStoreOrderCreateParam();
+            BeanUtils.copyProperties(param, fsStoreOrderCreateParam);
+            param.setIsUserApp(false);
+            //备注
+            fsStoreOrderCreateParam.setMark(param.getMark().get(i));
+            fsStoreOrderCreateParam.setOrderKey(orderKeys.get(i));
+            fsStoreOrderCreateParam.setCombinationOrderId(combinationOrderId);
+            fsStoreOrderCreateParam.setCreateOrderKey(createOrderKeys.get(i));
+            R order = orderService.createOrder(Long.parseLong(getUserId()), fsStoreOrderCreateParam);
+            res.add(order);
+        }
+        return res;
     }
-    return res;
-}
 
     @Login
     @ApiOperation("支付")
@@ -539,12 +534,16 @@ public List<R> create(@Validated @RequestBody FsStoreOrderCreateGroupStoreParam
         //新增的支付详情id
         ArrayList<Long> paymentIds = new ArrayList<>();
         for (FsStoreOrderScrm order : orders) {
-            if (order == null) {
+            if(order==null){
                 return R.error("订单不存在");
             }
-            if (order.getStatus() != OrderInfoEnum.STATUS_0.getValue()) {
+            if(order.getStatus()!= OrderInfoEnum.STATUS_0.getValue()){
                 return R.error("订单状态不正确");
             }
+            String orderId=redisCache.getCacheObject("isPaying:"+order.getId());
+            if(StringUtils.isNotEmpty(orderId)&&orderId.equals(order.getId().toString())){
+                return R.error("正在支付中...");
+            }
             FsUserScrm user = userService.selectFsUserById(order.getUserId());
 
             fsUser = user;
@@ -574,8 +573,13 @@ public List<R> create(@Validated @RequestBody FsStoreOrderCreateGroupStoreParam
                     } else if (param.getPayType().equals(3)) {
                         //货到付款
                         order.setPayType("3");
-                        order.setPayDelivery(order.getPayPrice());
-                        order.setPayMoney(BigDecimal.ZERO);
+                        BigDecimal amount=redisCache.getCacheObject("orderAmount:"+order.getId());
+                        BigDecimal payMoney = BigDecimal.ZERO;
+                        if (amount != null){
+                            payMoney=amount;
+                        }
+                        order.setPayMoney(payMoney);
+                        order.setPayDelivery(order.getPayPrice().subtract(payMoney) );
                     }
                     orderService.updateFsStoreOrder(order);
                 }
@@ -583,27 +587,28 @@ public List<R> create(@Validated @RequestBody FsStoreOrderCreateGroupStoreParam
                 return R.error("用户OPENID不存在");
             }
 
-            if (order.getPayType().equals("1") || order.getPayType().equals("2")) {
+            if((order.getPayType().equals("1")||order.getPayType().equals("2")||order.getPayType().equals("3")) && order.getPayMoney().compareTo(new BigDecimal(0))>0){
+                String json = configService.selectConfigByKey(STORE_PAY_CONF);
+                FsPayConfigScrm fsPayConfig = JSON.parseObject(json, FsPayConfigScrm.class);
+                FsStorePaymentScrm storePayment=new FsStorePaymentScrm();
+                storePayment.setCompanyId(order.getCompanyId());
+                storePayment.setCompanyUserId(order.getCompanyUserId());
+                storePayment.setPayMode(fsPayConfig.getType());
+                storePayment.setStatus(0);
+                storePayment.setPayCode(payCode);
                 String paySubCode = IdUtil.getSnowflake(0, 0).nextIdStr();
-                FsStorePaymentScrm payment = new FsStorePaymentScrm();
-                payment.setCompanyId(order.getCompanyId());
-                payment.setCompanyUserId(order.getCompanyUserId());
-                payment.setStatus(0);
-                payment.setPayCode(payCode);
-                payment.setPaySubCode(paySubCode);
-                payment.setPayMoney(order.getPayMoney());
-                payment.setCreateTime(new Date());
-                payment.setPayTypeCode("weixin");
-                payment.setBusinessType(2);
-                payment.setRemark("商城订单支付");
-                payment.setOpenId(order.getRealName());
-                payment.setUserId(fsUser.getUserId());
-                //换成唯一标识
-//            storePayment.setBusinessOrderId(order.getId().toString());
-                payment.setBusinessOrderId(order.getCombinationOrderId());
-                payment.setOrderId(order.getId());
-                fsStorePaymentMapper.insertFsStorePayment(payment);
-                paymentIds.add(payment.getPaymentId());
+                storePayment.setPaySubCode(paySubCode);
+                storePayment.setPayMoney(order.getPayMoney());
+                storePayment.setCreateTime(new Date());
+                storePayment.setPayTypeCode("weixin");
+                storePayment.setBusinessType(2);
+                storePayment.setRemark("商城订单支付");
+                storePayment.setOpenId(user.getRealName());
+                storePayment.setUserId(user.getUserId());
+                storePayment.setBusinessOrderId(order.getCombinationOrderId());
+                storePayment.setOrderId(order.getId());
+                fsStorePaymentMapper.insertFsStorePayment(storePayment);
+                paymentIds.add(storePayment.getPaymentId());
             }
         }
 
@@ -613,12 +618,15 @@ public List<R> create(@Validated @RequestBody FsStoreOrderCreateGroupStoreParam
         fsStoreOrder.setPayMoney(payMoneyTotal);
         fsStoreOrder.setRealName(orders.get(0).getRealName());
         fsStoreOrder.setCombinationOrderId(orders.get(0).getCombinationOrderId());
+
         if (fsUser != null && StringUtils.isNotEmpty(fsUser.getMaOpenId())) {
-//            String payCode = IdUtil.getSnowflake(0, 0).nextIdStr();
-            if (fsStoreOrder.getPayType().equals("1") || fsStoreOrder.getPayType().equals("2")) {
+            if ((fsStoreOrder.getPayType().equals("1")||fsStoreOrder.getPayType().equals("2")||fsStoreOrder.getPayType().equals("3")) && fsStoreOrder.getPayMoney().compareTo(new BigDecimal(0))>0) {
+                String json = configService.selectConfigByKey(STORE_PAY_CONF);
+                FsPayConfigScrm fsPayConfig = JSON.parseObject(json, FsPayConfigScrm.class);
                 FsStorePaymentScrm storePayment = new FsStorePaymentScrm();
                 storePayment.setCompanyId(fsStoreOrder.getCompanyId());
                 storePayment.setCompanyUserId(fsStoreOrder.getCompanyUserId());
+                storePayment.setPayMode(fsPayConfig.getType());
                 storePayment.setStatus(0);
                 storePayment.setPayCode(payCode);
                 storePayment.setPayMoney(fsStoreOrder.getPayMoney());
@@ -629,64 +637,90 @@ public List<R> create(@Validated @RequestBody FsStoreOrderCreateGroupStoreParam
                 storePayment.setOpenId(fsStoreOrder.getRealName());
                 storePayment.setUserId(fsUser.getUserId());
 
-                //支付
-                HuiFuCreateOrder o = new HuiFuCreateOrder();
-                o.setTradeType("T_MINIAPP");
-                o.setOpenid(fsUser.getMaOpenId());
-                o.setReqSeqId("store-" + storePayment.getPayCode());
-                o.setTransAmt(storePayment.getPayMoney().toString());
-                o.setGoodsDesc("商城订单支付");
-                HuifuCreateOrderResult result = huiFuService.createOrder(o);
-                //创建订单
-                if (result.getBank_code() != null && result.getBank_code().equals("00000000")) {
-                    for (Long paymentId : paymentIds) {
-                        FsStorePaymentScrm mt = new FsStorePaymentScrm();
-                        mt.setPaymentId(paymentId);
-                        mt.setTradeNo(result.getHf_seq_id());
-                        fsStorePaymentMapper.updateFsStorePayment(mt);
-                    }
 
-                    String mes = result.getPay_info();
-                    JSONObject payInfo = JSONUtil.parseObj(mes);
-                    FsHuiFuPayInfo fsHuiFuPayInfo = new FsHuiFuPayInfo();
-                    if (payInfo.get("timeStamp") != null) {
-                        fsHuiFuPayInfo.setTimeStamp(payInfo.get("timeStamp").toString());
-                    }
-                    if (payInfo.get("package") != null) {
-                        fsHuiFuPayInfo.setPackageStr(payInfo.get("package").toString());
-                    }
-                    if (payInfo.get("paySign") != null) {
-                        fsHuiFuPayInfo.setPaySign(payInfo.get("paySign").toString());
+                if (fsPayConfig.getType().equals("hf")){
+                    HuiFuCreateOrder o = new HuiFuCreateOrder();
+                    o.setTradeType("T_MINIAPP");
+                    o.setOpenid(fsUser.getMaOpenId());
+                    o.setReqSeqId("store-"+storePayment.getPayCode());
+                    o.setTransAmt(storePayment.getPayMoney().toString());
+                    o.setGoodsDesc("商城订单支付");
+                    HuifuCreateOrderResult result = huiFuService.createOrder(o);
+                    if(result.getResp_code()!=null&&(result.getResp_code().equals("00000000")||result.getResp_code().equals("00000100"))){
 
-                    }
-                    if (payInfo.get("appId") != null) {
-                        fsHuiFuPayInfo.setAppId(payInfo.get("appId").toString());
+                        for (Long paymentId : paymentIds) {
+                            FsStorePaymentScrm mt = new FsStorePaymentScrm();
+                            mt.setPaymentId(paymentId);
+                            mt.setTradeNo(result.getHf_seq_id());
+                            fsStorePaymentMapper.updateFsStorePayment(mt);
+                            FsStorePaymentScrm fsStorePaymentScrm = fsStorePaymentMapper.selectFsStorePaymentById(paymentId);
+                            redisCache.setCacheObject("isPaying:"+fsStorePaymentScrm.getOrderId(),fsStorePaymentScrm.getOrderId().toString(),1, TimeUnit.MINUTES);
+                            Map<String, Object> resultMap = JSON.parseObject(result.getPay_info(), new TypeReference<Map<String, Object>>() {});
+                            String s = (String) resultMap.get("package");
+                            resultMap.put("packageValue",s);
+                        }
 
-                    }
-                    if (payInfo.get("signType") != null) {
-                        fsHuiFuPayInfo.setSignType(payInfo.get("signType").toString());
+                        String mes = result.getPay_info();
+                        JSONObject payInfo = JSONUtil.parseObj(mes);
+                        FsHuiFuPayInfo fsHuiFuPayInfo = new FsHuiFuPayInfo();
+                        if (payInfo.get("timeStamp") != null) {
+                            fsHuiFuPayInfo.setTimeStamp(payInfo.get("timeStamp").toString());
+                        }
+                        if (payInfo.get("package") != null) {
+                            fsHuiFuPayInfo.setPackageStr(payInfo.get("package").toString());
+                        }
+                        if (payInfo.get("paySign") != null) {
+                            fsHuiFuPayInfo.setPaySign(payInfo.get("paySign").toString());
 
-                    }
-                    if (payInfo.get("nonceStr") != null) {
-                        fsHuiFuPayInfo.setNonceStr(payInfo.get("nonceStr").toString());
-                    }
+                        }
+                        if (payInfo.get("appId") != null) {
+                            fsHuiFuPayInfo.setAppId(payInfo.get("appId").toString());
+
+                        }
+                        if (payInfo.get("signType") != null) {
+                            fsHuiFuPayInfo.setSignType(payInfo.get("signType").toString());
+
+                        }
+                        if (payInfo.get("nonceStr") != null) {
+                            fsHuiFuPayInfo.setNonceStr(payInfo.get("nonceStr").toString());
+                        }
 
 
 //                    return R.ok().put("payType",param.getPayType()).put("result",result.getPay_info());
-                    return R.ok().put("payType", param.getPayType()).put("result", fsHuiFuPayInfo);
-                } else {
-                    return R.error(result.getResp_desc());
-                }
-            } else if (fsStoreOrder.getPayType().equals("3")) {
-                for (FsStoreOrderScrm order : orders) {
-                    //货到付款
-                    orderService.payConfirm(2, order.getId(), null, null, null, null);
-                    return R.ok().put("payType", param.getPayType());
+                        return R.ok().put("payType", param.getPayType()).put("result", fsHuiFuPayInfo);
+                    }
+                    else{
+                        return R.error(result.getResp_desc());
+                    }
+                }else  if (fsPayConfig.getType().equals("wx")){
+                    WxPayConfig payConfig = new WxPayConfig();
+                    payConfig.setAppId(fsPayConfig.getAppId());
+                    payConfig.setMchId(fsPayConfig.getWxMchId());
+                    payConfig.setMchKey(fsPayConfig.getWxMchKey());
+                    payConfig.setSubAppId(org.apache.commons.lang3.StringUtils.trimToNull(null));
+                    payConfig.setSubMchId(org.apache.commons.lang3.StringUtils.trimToNull(null));
+                    payConfig.setKeyPath(fsPayConfig.getKeyPath());
+                    payConfig.setNotifyUrl(fsPayConfig.getNotifyUrlScrm());
+                    wxPayService.setConfig(payConfig);
+                    WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
+                    orderRequest.setOpenid(fsUser.getMaOpenId());//公众号支付提供用户openid
+                    orderRequest.setBody("商城订单支付");
+                    orderRequest.setOutTradeNo("store-" + storePayment.getPayCode());
+                    orderRequest.setTotalFee(WxPayUnifiedOrderRequest.yuanToFen(storePayment.getPayMoney().toString()));//测试
+                    //orderRequest.setTotalFee(WxPayUnifiedOrderRequest.yuanToFen(money));//测试
+                    orderRequest.setTradeType("JSAPI");
+                    orderRequest.setSpbillCreateIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
+                    //调用统一下单接口,获取"预支付交易会话标识"
+                    try {
+                        WxPayMpOrderResult orderResult = wxPayService.createOrder(orderRequest);
+                        return R.ok().put("result", orderResult).put("type", "wx").put("isPay", 0).put("payType",param.getPayType());
+                    } catch (WxPayException e) {
+                        e.printStackTrace();
+                        throw new CustomException("支付失败" + e.getMessage());
+                    }
                 }
 
             }
-
-
         }
         return R.error("用户OPENID不存在");