瀏覽代碼

合并代码

吴树波 15 小時之前
父節點
當前提交
5f49ba28f5

+ 0 - 5
fs-service/src/main/java/com/fs/course/config/CourseConfig.java

@@ -78,11 +78,6 @@ public class CourseConfig implements Serializable {
      */
     private boolean oneCompanyCourse;
 
-    /**
-     * 是否开启IM
-     */
-    private Boolean isOpenIM;
-
 
     @Data
     public static class DisabledTimeVo{

+ 0 - 11
fs-service/src/main/java/com/fs/hisStore/domain/FsUserScrm.java

@@ -178,9 +178,6 @@ public class FsUserScrm extends BaseEntity
      * **/
     private Long qwUserId;
 
-    /** 订单数量 */
-    private Integer orderCount;
-
     public void setNickName(String nickname)
     {
         if(StringUtils.isNotEmpty(nickname)){
@@ -820,12 +817,4 @@ public class FsUserScrm extends BaseEntity
         this.brokeragePrice = brokeragePrice;
         return this;
     }
-
-    public Integer getOrderCount() {
-        return orderCount;
-    }
-
-    public void setOrderCount(Integer orderCount) {
-        this.orderCount = orderCount;
-    }
 }

+ 5 - 11
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -62,20 +62,14 @@ import com.fs.erp.dto.ErpRefundUpdateRequest;
 import com.fs.erp.mapper.FsErpFinishPushMapper;
 import com.fs.erp.service.IErpOrderService;
 import com.fs.his.config.FsSysConfig;
-import com.fs.his.domain.FsInquiryOrder;
-import com.fs.his.domain.FsPackageOrder;
-import com.fs.his.domain.FsPrescribe;
-import com.fs.his.domain.FsPrescribeDrug;
+import com.fs.his.domain.*;
 import com.fs.his.dto.FsPrescribeUsageDTO;
 import com.fs.his.dto.FsProdItemDTO;
 import com.fs.his.dto.FsStoreOrderAmountScrmStatsQueryDto;
 import com.fs.his.dto.FsStoreOrderItemDTO;
 import com.fs.his.enums.FsStoreOrderLogEnum;
 import com.fs.his.enums.FsStoreOrderStatusEnum;
-import com.fs.his.mapper.FsInquiryOrderMapper;
-import com.fs.his.mapper.FsPackageOrderMapper;
-import com.fs.his.mapper.FsPrescribeDrugMapper;
-import com.fs.his.mapper.FsPrescribeMapper;
+import com.fs.his.mapper.*;
 import com.fs.his.param.FsStoreOrderSalesParam;
 import com.fs.his.service.IFsPrescribeService;
 import com.fs.his.service.IFsUserWatchService;
@@ -2449,9 +2443,9 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         ErpOrderQueryRequert request = new ErpOrderQueryRequert();
         request.setCode(order.getExtendOrderId());
         ErpOrderQueryResponse response = erpOrderService.getScrmOrder(request);
-        if (response.getOrders() != null && response.getOrders().size() > 0) {
+        if (response.getOrders() != null && !response.getOrders().isEmpty()) {
             for (ErpOrderQuery orderQuery : response.getOrders()) {
-                if (orderQuery.getDeliverys() != null && orderQuery.getDeliverys().size() > 0) {
+                if (orderQuery.getDeliverys() != null && !orderQuery.getDeliverys().isEmpty()) {
                     for (ErpDeliverys delivery : orderQuery.getDeliverys()) {
                         if (delivery.getDelivery() && StringUtils.isNotEmpty(delivery.getMail_no())) {
                             FsStoreOrderScrm map = new FsStoreOrderScrm();
@@ -2465,7 +2459,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                                     OrderLogEnum.DELIVERY_GOODS.getDesc());
                             TemplateBean templateBean = TemplateBean.builder()
                                     .orderId(order.getId().toString())
-                                    .orderCode(order.getOrderCode().toString())
+                                    .orderCode(order.getOrderCode())
                                     .deliveryId(order.getDeliveryId())
                                     .deliveryName(order.getDeliveryName())
                                     .userId(order.getUserId())

+ 9 - 9
fs-service/src/main/resources/application-druid-bjczwh.yml

@@ -40,8 +40,8 @@ spring:
                 # 主库数据源
                 master:
                   url: jdbc:mysql://rm-bp10925iw97l3b2hb.mysql.rds.aliyuncs.com:3306/fs_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-                  username: root
-                  password: Ylrz_1q2w3e4r5t6y
+                  username: xqgy
+                  password: xqGY25-8
                 # 从库数据源
                 slave:
                     # 从数据源开关/默认关闭
@@ -95,8 +95,8 @@ spring:
                 # 主库数据源
                 master:
                     url: jdbc:mysql://rm-bp10925iw97l3b2hb.mysql.rds.aliyuncs.com:3306/fs_his_sop?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-                    username: root
-                    password: Ylrz_1q2w3e4r5t6y
+                    username: xqgy
+                    password: xqGY25-8
                 # 初始连接数
                 initialSize: 5
                 # 最小连接池数量
@@ -137,15 +137,15 @@ spring:
                         config:
                             multi-statement-allow: true
 rocketmq:
-    name-server: rmq-16xj8o92zp.rocketmq.cd.qcloud.tencenttdmq.com:8080
+    name-server: rmq-cn-lf64hrnmr03-vpc.cn-hangzhou.rmq.aliyuncs.com:8080
     producer:
         group: my-producer-group
-        access-key: ak16xj8o92zp984557f83ba2 # 替换为实际的 accessKey
-        secret-key: sk2ff1c6b15b74b888 # 替换为实际的 secretKey
+        access-key: A9P64BET8kV2F3S0 # 替换为实际的 accessKey
+        secret-key: O1VnW98G8Rmn0PoZ # 替换为实际的 secretKey
     consumer:
         group: common-group
-        access-key: ak16xj8o92zp984557f83ba2 # 替换为实际的 accessKey
-        secret-key: sk2ff1c6b15b74b888 # 替换为实际的 secretKey
+        access-key: A9P64BET8kV2F3S0 # 替换为实际的 accessKey
+        secret-key: O1VnW98G8Rmn0PoZ # 替换为实际的 secretKey
 openIM:
     secret: openIM123
     userID: imAdmin

+ 381 - 176
fs-user-app/src/main/java/com/fs/app/controller/store/StoreOrderScrmController.java

@@ -69,14 +69,46 @@ import java.util.concurrent.TimeUnit;
 import static com.fs.hisStore.constants.UserAppsLockConstant.*;
 
 
-
 @Slf4j
 @Api("商城接口")
 @RestController
-@RequestMapping(value="/store/app/storeOrder")
+@RequestMapping(value = "/store/app/storeOrder")
 public class StoreOrderScrmController extends AppBaseController {
 
-    Logger logger= LoggerFactory.getLogger(getClass());
+
+    private static final String STORE_PAY_CONF = "his.pay";
+    Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private WxMaProperties properties;
+
+    @Autowired
+    private WxPayService wxPayService;
+    @Autowired
+    private FsStorePaymentScrmMapper fsStorePaymentMapper;
+    @Autowired
+    private IFsUserScrmService userService;
+    @Autowired
+    private IPayService payService;
+    @Autowired
+    private FSSysConfig sysConfig;
+    @Autowired
+    private IErpOrderService erpOrderService;
+    @Autowired
+    IPayService ybPayService;
+    @Autowired
+    private HuiFuService huiFuService;
+    @Autowired
+    @Qualifier("erpOrderServiceImpl")
+    private IErpOrderService gyOrderService;
+
+    @Autowired
+    @Qualifier("wdtErpOrderServiceImpl")
+    private IErpOrderService wdtOrderService;
+
+    @Autowired
+    @Qualifier("k9OrderScrmServiceImpl")
+    private IErpOrderService k9OrderService;
 
     @Autowired
     private IFsStoreOrderScrmService orderService;
@@ -96,59 +128,104 @@ public class StoreOrderScrmController extends AppBaseController {
     @Autowired
     private RedissonClient redissonClient;
 
+    @Autowired
+    private ConfigUtil configUtil;
+
+    //TODO 应该没用到
+    private IErpOrderService getErpService() {
+        //判断是否开启erp
+        IErpOrderService erpOrderService = null;
+        FsErpConfig erpConfig = configUtil.getErpConfig();
+        Integer erpOpen = erpConfig.getErpOpen();
+        if (erpOpen != null && erpOpen == 1) {
+            //判断erp类型
+            Integer erpType = erpConfig.getErpType();
+            if (erpType != null) {
+                if (erpType == 1) {
+                    //管易
+                    erpOrderService = gyOrderService;
+                } else if (erpType == 2) {
+                    //旺店通
+                    erpOrderService = wdtOrderService;
+                } else if (erpType == 3) {
+                    //金博
+                    erpOrderService = k9OrderService;
+                }
+            }
+        }
+        return erpOrderService;
+    }
+
 
+    @ApiOperation("测试ERP")
+    @GetMapping("/test")
+    public R test() {
+        IErpOrderService erpOrderService = getErpService();
+//        erpOrderService.addOmsOrder(172L);
+//        k9OrderService.refundOmsOrder(172L);
+        return R.ok();
+    }
+
+
+    @ApiOperation("测试ERP")
+    @GetMapping("/test2")
+    public R test2() {
+//        k9OrderService.refundOmsOrder(172L);
+//        k9OrderService.refundOmsOrder(172L);
+        return R.ok();
+    }
 
     @Login
     @ApiOperation("获取我的订单列表")
     @GetMapping("/getMyStoreOrderList")
-        public R getMyStoreOrderList(FsMyStoreOrderQueryParam param, HttpServletRequest request){
+    public R getMyStoreOrderList(FsMyStoreOrderQueryParam param, HttpServletRequest request) {
         PageHelper.startPage(param.getPage(), param.getPageSize());
         param.setUserId(Long.parseLong(getUserId()));
-        List<FsMyStoreOrderListQueryVO> list=orderService.selectFsMyStoreOrderListVO(param);
-        PageInfo<FsMyStoreOrderListQueryVO> listPageInfo=new PageInfo<>(list);
-        return R.ok().put("data",listPageInfo);
+        List<FsMyStoreOrderListQueryVO> list = orderService.selectFsMyStoreOrderListVO(param);
+        PageInfo<FsMyStoreOrderListQueryVO> listPageInfo = new PageInfo<>(list);
+        return R.ok().put("data", listPageInfo);
     }
 
     @Login
     @ApiOperation("获取销售公司订单列表")
     @GetMapping("/getCompanyStoreOrderList")
-    public R getCompanyStoreOrderList(FsMyStoreOrderQueryParam param, HttpServletRequest request){
+    public R getCompanyStoreOrderList(FsMyStoreOrderQueryParam param, HttpServletRequest request) {
         PageHelper.startPage(param.getPage(), param.getPageSize());
-        List<FsMyStoreOrderListQueryVO> list=orderService.selectFsCompanyStoreOrderListVO(param);
-        PageInfo<FsMyStoreOrderListQueryVO> listPageInfo=new PageInfo<>(list);
-        return R.ok().put("data",listPageInfo);
+        List<FsMyStoreOrderListQueryVO> list = orderService.selectFsCompanyStoreOrderListVO(param);
+        PageInfo<FsMyStoreOrderListQueryVO> listPageInfo = new PageInfo<>(list);
+        return R.ok().put("data", listPageInfo);
     }
 
     @Login
     @ApiOperation("获取我的订单详情")
     @GetMapping("/getMyStoreOrderById")
-    public R getMyStoreOrderById(@RequestParam("orderId") Long orderId, HttpServletRequest request){
-        FsStoreOrderScrm order=orderService.selectFsStoreOrderById(orderId);
+    public R getMyStoreOrderById(@RequestParam("orderId") Long orderId, HttpServletRequest request) {
+        FsStoreOrderScrm order = orderService.selectFsStoreOrderById(orderId);
         order.setUserPhone(ParseUtils.parsePhone(order.getUserPhone()));
         order.setUserAddress(ParseUtils.parseIdCard(order.getUserAddress()));
-        List<FsStoreOrderItemVO> list=itemService.selectFsStoreOrderItemListByOrderId(orderId);
+        List<FsStoreOrderItemVO> list = itemService.selectFsStoreOrderItemListByOrderId(orderId);
         //获取交易单号
-        FsStorePaymentScrm paymentScrm=fsStorePaymentMapper.queryFsStorePaymentByOrderId(orderId);
+        FsStorePaymentScrm paymentScrm = fsStorePaymentMapper.queryFsStorePaymentByOrderId(orderId);
         String transactionId = null;
-        if(paymentScrm != null){
-            transactionId=paymentScrm.getBankTransactionId();
+        if (paymentScrm != null) {
+            transactionId = paymentScrm.getBankTransactionId();
         }
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(order.getCreateTime());
-        String json=configService.selectConfigByKey("his.store");
-        StoreConfig config=JSONUtil.toBean(json,StoreConfig.class);
-        calendar.add(Calendar.MINUTE,config.getUnPayTime());
-        SimpleDateFormat format = new   SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String payLimitTime = format.format(calendar.getTime() );
-        FsPrescribeScrm prescribe=null;
-        if(order.getPrescribeId()!=null){
-            prescribe=prescribeService.selectFsPrescribeById(order.getPrescribeId());
+        String json = configService.selectConfigByKey("his.store");
+        StoreConfig config = JSONUtil.toBean(json, StoreConfig.class);
+        calendar.add(Calendar.MINUTE, config.getUnPayTime());
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String payLimitTime = format.format(calendar.getTime());
+        FsPrescribeScrm prescribe = null;
+        if (order.getPrescribeId() != null) {
+            prescribe = prescribeService.selectFsPrescribeById(order.getPrescribeId());
         }
         //处理是否可以申请售后
-        Integer isAfterSales=0;
-        if(order.getStatus().equals(OrderInfoEnum.STATUS_3.getValue())) {
+        Integer isAfterSales = 0;
+        if (order.getStatus().equals(OrderInfoEnum.STATUS_3.getValue())) {
             //已完成订单
-            isAfterSales=1;
+            isAfterSales = 1;
             if (order.getFinishTime() != null) {
                 if (config.getStoreAfterSalesDay() != null && config.getStoreAfterSalesDay() > 0) {
                     //判断完成时间是否超过指定时间
@@ -160,9 +237,8 @@ public class StoreOrderScrmController extends AppBaseController {
                     }
                 }
             }
-        }
-        else if(order.getStatus()==1||order.getStatus()==2){
-            isAfterSales=1;
+        } else if (order.getStatus() == 1 || order.getStatus() == 2) {
+            isAfterSales = 1;
         }
 
         // 计算总优惠金额 = 优惠券优惠金额 + 立减金优惠金额
@@ -176,38 +252,38 @@ public class StoreOrderScrmController extends AppBaseController {
         // 将总优惠金额设置到deductionPrice字段中
         order.setDeductionPrice(totalDiscountPrice);
 
-        return R.ok().put("isAfterSales",isAfterSales).put("order",order).put("items",list).put("payLimitTime",payLimitTime).put("prescribe",prescribe).put("transactionId",transactionId);
+        return R.ok().put("isAfterSales", isAfterSales).put("order", order).put("items", list).put("payLimitTime", payLimitTime).put("prescribe", prescribe).put("transactionId", transactionId);
     }
 
     @Login
     @ApiOperation("获取订单")
     @GetMapping("/getStoreOrderById")
-    public R getStoreOrderById(@RequestParam("orderId") Long orderId, HttpServletRequest request){
-        FsStoreOrderScrm order=orderService.selectFsStoreOrderById(orderId);
+    public R getStoreOrderById(@RequestParam("orderId") Long orderId, HttpServletRequest request) {
+        FsStoreOrderScrm order = orderService.selectFsStoreOrderById(orderId);
 
         order.setUserPhone(ParseUtils.parsePhone(order.getUserPhone()));
         order.setUserAddress(ParseUtils.parseIdCard(order.getUserAddress()));
 
-        String json=configService.selectConfigByKey("his.store");
-        StoreConfig config=JSONUtil.toBean(json,StoreConfig.class);
+        String json = configService.selectConfigByKey("his.store");
+        StoreConfig config = JSONUtil.toBean(json, StoreConfig.class);
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(order.getCreateTime());
-        calendar.add(Calendar.MINUTE,config.getUnPayTime());
-        SimpleDateFormat format = new   SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String payLimitTime = format.format(calendar.getTime() );
-        FsStoreProductPackageScrm productPackage=null;
-        if(order.getIsPackage()!=null&&order.getIsPackage()==1){
-            productPackage= productPackageService.selectFsStoreProductPackageById(order.getPackageId());
+        calendar.add(Calendar.MINUTE, config.getUnPayTime());
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String payLimitTime = format.format(calendar.getTime());
+        FsStoreProductPackageScrm productPackage = null;
+        if (order.getIsPackage() != null && order.getIsPackage() == 1) {
+            productPackage = productPackageService.selectFsStoreProductPackageById(order.getPackageId());
         }
-        return R.ok().put("order",order).put("productPackage",productPackage).put("payLimitTime",payLimitTime);
+        return R.ok().put("order", order).put("productPackage", productPackage).put("payLimitTime", payLimitTime);
     }
 
 
     @Login
     @ApiOperation("确认订单")
     @PostMapping("/confirm")
-    public R confirm(@Validated @RequestBody FsStoreConfirmOrderParam param, HttpServletRequest request){
-        R result = orderService.confirmOrder(Long.parseLong(getUserId()),param);
+    public R confirm(@Validated @RequestBody FsStoreConfirmOrderParam param, HttpServletRequest request) {
+        R result = orderService.confirmOrder(Long.parseLong(getUserId()), param);
         // 计算商品原价总价
         BigDecimal totalPrice = BigDecimal.ZERO;
         String orderKey = (String) result.get("orderKey");
@@ -226,33 +302,33 @@ public class StoreOrderScrmController extends AppBaseController {
         result.put("totalPrice", totalPrice);
         return result;
     }
+
     @Login
     @ApiOperation("计算订单金额")
     @PostMapping("/computed")
-    public R computed(@Validated @RequestBody FsStoreOrderComputedParam param, HttpServletRequest request){
-        FsStoreOrderComputeDTO dto=orderService.computedOrder(Long.parseLong(getUserId()),param);
-        return R.ok().put("data",dto);
+    public R computed(@Validated @RequestBody FsStoreOrderComputedParam param, HttpServletRequest request) {
+        FsStoreOrderComputeDTO dto = orderService.computedOrder(Long.parseLong(getUserId()), param);
+        return R.ok().put("data", dto);
     }
 
     @Login
     @ApiOperation("创建订单")
     @PostMapping("/create")
-    public R create(@Validated @RequestBody FsStoreOrderCreateParam param, HttpServletRequest request){
-        String userId= getUserId();
+    public R create(@Validated @RequestBody FsStoreOrderCreateParam param, HttpServletRequest request) {
+        String userId = getUserId();
         log.info("开始创建订单,登录用户id:{}", userId);
         param.setIsUserApp(false);
-        return orderService.createOrder(Long.parseLong(getUserId()),param);
+        return orderService.createOrder(Long.parseLong(getUserId()), param);
     }
 
     @Login
     @ApiOperation("支付")
     @PostMapping("/pay")
-    public R pay(HttpServletRequest request, @Validated @RequestBody FsStoreOrderPayParam param)
-    {
+    public R pay(HttpServletRequest request, @Validated @RequestBody FsStoreOrderPayParam param) {
         Long orderId = param.getOrderId();
         logger.info("开始处理支付请求, 订单号: {}, 支付类型: {}", orderId, param.getPayType());
 
-        RLock lock = redissonClient.getLock(String.format(LOCK_KEY_PAY,orderId));
+        RLock lock = redissonClient.getLock(String.format(LOCK_KEY_PAY, orderId));
         R result = null;
 
         try {
@@ -288,8 +364,8 @@ public class StoreOrderScrmController extends AppBaseController {
     public R cancelPay(@Validated @RequestBody FsStoreOrderPayParam param) {
         Long orderId = param.getOrderId();
 
-        logger.info("用户取消支付 订单号: {},支付类型",param.getOrderId());
-        RLock lock = redissonClient.getLock(String.format(LOCK_KEY_PAY,orderId));
+        logger.info("用户取消支付 订单号: {},支付类型", param.getOrderId());
+        RLock lock = redissonClient.getLock(String.format(LOCK_KEY_PAY, orderId));
         try {
             boolean locked = lock.tryLock(100, 30000, TimeUnit.MILLISECONDS);
 
@@ -323,7 +399,7 @@ public class StoreOrderScrmController extends AppBaseController {
     public R editPayType(HttpServletRequest request, @Validated @RequestBody FsStoreOrderPayParam param) {
         Long orderId = param.getOrderId();
         logger.info("开始处理修改支付类型请求, 订单号: {}, 新支付类型: {}", orderId, param.getPayType());
-        RLock lock = redissonClient.getLock(String.format(LOCK_KEY_EDIT_PAY_TYPE,orderId));
+        RLock lock = redissonClient.getLock(String.format(LOCK_KEY_EDIT_PAY_TYPE, orderId));
         R result = null;
         try {
             boolean locked = lock.tryLock(100, 10000, TimeUnit.MILLISECONDS);
@@ -355,7 +431,7 @@ public class StoreOrderScrmController extends AppBaseController {
     public R payRemain(HttpServletRequest request, @Validated @RequestBody FsStoreOrderPayParam param) {
         Long orderId = param.getOrderId();
         logger.info("开始处理支付尾款请求, 订单号: {}, 支付类型: {}", orderId, param.getPayType());
-        RLock lock = redissonClient.getLock(String.format(LOCK_KEY_PAY_REMAIN,orderId));
+        RLock lock = redissonClient.getLock(String.format(LOCK_KEY_PAY_REMAIN, orderId));
         R result = null;
         try {
             boolean locked = lock.tryLock(100, 30000, TimeUnit.MILLISECONDS);
@@ -377,131 +453,275 @@ public class StoreOrderScrmController extends AppBaseController {
                 logger.debug("支付尾款锁已释放, 订单号: {}", orderId);
             }
         }
-        return result;
+        return R.error("无支付类型");
     }
 
 
     @Login
     @ApiOperation("亲友支付")
     @PostMapping("/otherPayment")
-    public R otherPayment(@Validated @RequestBody FsStoreOrderOtherPayParam param, HttpServletRequest request){
-        Long orderId = param.getOrderId();
-        logger.info("开始处理亲友支付请求, 订单号: {}", orderId);
-
-        String lockKey = String.format(LOCK_KEY_PAY,orderId);
-        RLock lock = redissonClient.getLock(lockKey);
-        R result = null;
-
+    @Transactional
+    public R otherPayment(@Validated @RequestBody FsStoreOrderOtherPayParam param, HttpServletRequest request) {
+        final WxMaService wxService = WxMaConfiguration.getMaService(properties.getConfigs().get(0).getAppid());
         try {
-            boolean locked = lock.tryLock(100, 30000, TimeUnit.MILLISECONDS);
-
-            if (!locked) {
-                logger.warn("订单正在处理中,获取锁失败, 订单号: {}", orderId);
-                return R.error("订单正在处理中,请勿重复提交");
+            String ip = IpUtil.getRequestIp();
+            WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(param.getCode());
+            FsUserScrm user = userService.selectFsUserByMaOpenId(session.getOpenid());
+            if (user == null) {
+                //创建
+                user = new FsUserScrm();
+                user.setUsername("");
+                user.setNickname("微信用户");
+                user.setStatus(1);
+                user.setMaOpenId(session.getOpenid());
+                user.setUnionId(session.getUnionid());
+                user.setIsWeixinAuth(0);
+                user.setLastIp(ip);
+                user.setCreateTime(new Date());
+                userService.insertFsUser(user);
+            }
+            FsStoreOrderScrm order = orderService.selectFsStoreOrderById(param.getOrderId());
+            if (order == null) {
+                return R.error("订单不存在");
+            }
+            if (order.getStatus() != OrderInfoEnum.STATUS_0.getValue()) {
+                return R.error("此订单不能支付");
+            }
+            if (order.getPayMoney().compareTo(new BigDecimal(0)) < 1) {
+                return R.error("此订单没有可支付的金额");
             }
 
-            result = orderService.otherPayment(param);
+            String orderId = redisCache.getCacheObject("isPaying:" + order.getId());
+            if (StringUtils.isNotEmpty(orderId) && orderId.equals(order.getId().toString())) {
+                return R.error("正在支付中...");
+            }
 
-        } catch (InterruptedException e) {
-            logger.error("获取支付锁的过程被中断, 订单号: {}", orderId, e);
-            Thread.currentThread().interrupt();
-            return R.error("支付处理被中断,请稍后重试");
-        } catch (Throwable e) {
-            logger.error("亲友支付过程中发生异常, 订单号: {}", orderId, e);
-            throw e;
-        } finally {
-            if (lock != null && lock.isHeldByCurrentThread()) {
-                lock.unlock();
-                logger.debug("支付锁已释放, 订单号: {}", orderId);
+            String json = configService.selectConfigByKey(STORE_PAY_CONF);
+            FsPayConfigScrm fsPayConfig = JSON.parseObject(json, FsPayConfigScrm.class);
+            String payCode = IdUtil.getSnowflake(0, 0).nextIdStr();
+            //易宝支付
+            FsStorePaymentScrm storePayment = new FsStorePaymentScrm();
+            storePayment.setCompanyId(order.getCompanyId());
+            storePayment.setCompanyUserId(order.getCompanyUserId());
+            storePayment.setStatus(0);
+            storePayment.setPayCode(payCode);
+            storePayment.setPayMode(fsPayConfig.getType());
+            storePayment.setPayMoney(order.getPayMoney());
+            storePayment.setCreateTime(new Date());
+            storePayment.setPayTypeCode("weixin");
+            storePayment.setBusinessType(2);
+            storePayment.setRemark("商城订单支付");
+            storePayment.setOpenId(session.getOpenid());
+            storePayment.setUserId(user.getUserId());
+            storePayment.setBusinessOrderId(order.getId().toString());
+            storePayment.setOrderId(order.getId());
+            fsStorePaymentMapper.insertFsStorePayment(storePayment);
+
+            if (fsPayConfig.getType().equals("hf")) {
+                HuiFuCreateOrder o = new HuiFuCreateOrder();
+                o.setTradeType("T_MINIAPP");
+                o.setOpenid(user.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"))) {
+
+                    FsStorePaymentScrm mt = new FsStorePaymentScrm();
+                    mt.setPaymentId(storePayment.getPaymentId());
+                    mt.setTradeNo(result.getHf_seq_id());
+                    fsStorePaymentMapper.updateFsStorePayment(mt);
+                    redisCache.setCacheObject("isPaying:" + order.getId(), order.getId().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);
+                    return R.ok().put("result", resultMap);
+                } 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(null);
+                payConfig.setNotifyUrl(fsPayConfig.getNotifyUrlScrm());
+                wxPayService.setConfig(payConfig);
+                WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
+                orderRequest.setOpenid(user.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);
+                } catch (WxPayException e) {
+                    e.printStackTrace();
+                    throw new CustomException("支付失败" + e.getMessage());
+                }
             }
+        } catch (WxErrorException e) {
+            e.printStackTrace();
+            return R.error(e.getMessage());
         }
-
-        return result;
+        return R.error("无支付类型");
     }
 
     @Login
     @ApiOperation("亲友支付")
     @PostMapping("/otherPaymentRemain")
     @Transactional
-    public R otherPaymentRemain(@Validated @RequestBody FsStoreOrderOtherPayParam param, HttpServletRequest request){
-        Long orderId = param.getOrderId();
-        logger.info("开始处理亲友支付请求, 订单号: {}", orderId);
-        String lockKey = String.format(LOCK_KEY_PAY,orderId);
-        RLock lock = redissonClient.getLock(lockKey);
-        R result = null;
+    public R otherPaymentRemain(@Validated @RequestBody FsStoreOrderOtherPayParam param, HttpServletRequest request) {
+        final WxMaService wxService = WxMaConfiguration.getMaService(properties.getConfigs().get(0).getAppid());
         try {
-            boolean locked = lock.tryLock(100, 30000, TimeUnit.MILLISECONDS);
-
-            if (!locked) {
-                logger.warn("订单正在处理中,获取锁失败, 订单号: {}", orderId);
-                return R.error("订单正在处理中,请勿重复提交");
+            String ip = IpUtil.getRequestIp();
+            WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(param.getCode());
+            FsUserScrm user = userService.selectFsUserByMaOpenId(session.getOpenid());
+            if (user == null) {
+                //创建
+                user = new FsUserScrm();
+                user.setUsername("");
+                user.setNickname("微信用户");
+                user.setStatus(1);
+                user.setMaOpenId(session.getOpenid());
+                user.setUnionId(session.getUnionid());
+                user.setIsWeixinAuth(0);
+                user.setLastIp(ip);
+                user.setCreateTime(new Date());
+                userService.insertFsUser(user);
+            }
+            FsStoreOrderScrm order = orderService.selectFsStoreOrderById(param.getOrderId());
+            if (order == null) {
+                return R.error("订单不存在");
+            }
+            if (order.getStatus() != OrderInfoEnum.STATUS_2.getValue()) {
+                return R.error("待收货订单可申请支付尾款");
+            }
+            if (order.getPayType().equals(1)) {
+                return R.error("此订单已支付");
+            }
+            //只有顺风才可以付尾
+            if (!order.getDeliverySn().trim().equals("SF")) {
+                return R.error("只有顺丰物流支持尾款支付");
             }
 
-            result = orderService.otherPaymentRemain(param);
-
-        } catch (InterruptedException e) {
-            logger.error("获取亲友支付锁的过程被中断, 订单号: {}", orderId, e);
-            Thread.currentThread().interrupt();
-            return R.error("支付处理被中断,请稍后重试");
-        } catch (Throwable e) {
-            logger.error("亲友支付过程中发生异常, 订单号: {}", orderId, e);
-            throw e;
-        } finally {
-            if (lock != null && lock.isHeldByCurrentThread()) {
-                lock.unlock();
-                logger.debug("亲友支付锁已释放, 订单号: {}", orderId);
+            if (!order.getIsPayRemain().equals(0)) {
+                return R.error("此订单已支付");
             }
+            String payCode = IdUtil.getSnowflake(0, 0).nextIdStr();
+            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.setStatus(0);
+            storePayment.setPayMode(fsPayConfig.getType());
+            storePayment.setPayCode(payCode);
+            storePayment.setPayMoney(order.getPayDelivery());
+            storePayment.setCreateTime(new Date());
+            storePayment.setPayTypeCode("weixin");
+            storePayment.setBusinessType(2);
+            storePayment.setRemark("商城订单尾款支付");
+            storePayment.setOpenId(user.getRealName());
+            storePayment.setUserId(user.getUserId());
+            storePayment.setBusinessOrderId(order.getId().toString());
+            storePayment.setOrderId(order.getId());
+            storePayment.setIsPayRemain(1);
+            fsStorePaymentMapper.insertFsStorePayment(storePayment);
+
+            if (fsPayConfig.getType().equals("hf")) {
+                HuiFuCreateOrder o = new HuiFuCreateOrder();
+                o.setTradeType("T_MINIAPP");
+                o.setOpenid(user.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"))) {
+
+                    FsStorePaymentScrm mt = new FsStorePaymentScrm();
+                    mt.setPaymentId(storePayment.getPaymentId());
+                    mt.setTradeNo(result.getHf_seq_id());
+                    fsStorePaymentMapper.updateFsStorePayment(mt);
+                    redisCache.setCacheObject("isPaying:" + order.getId(), order.getId().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);
+                    return R.ok().put("result", resultMap);
+                } 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(null);
+                payConfig.setNotifyUrl(fsPayConfig.getNotifyUrlScrm());
+                wxPayService.setConfig(payConfig);
+                WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
+                orderRequest.setOpenid(user.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);
+                } catch (WxPayException e) {
+                    e.printStackTrace();
+                    throw new CustomException("支付失败" + e.getMessage());
+                }
+            }
+        } catch (WxErrorException e) {
+            e.printStackTrace();
+            return R.error(e.getMessage());
         }
-
-        return result;
+        return R.error("无支付类型");
     }
 
 
     @Login
     @ApiOperation("取消订单")
     @PostMapping("/cancelOrder")
-    public R cancelOrder( @Validated @RequestBody FsStoreOrderCancelParam param, HttpServletRequest request){
-
-        Long orderId = param.getOrderId();
-        logger.info("开始处理取消订单请求, 订单号: {}", orderId);
-
-        RLock lock = redissonClient.getLock(String.format(LOCK_KEY_CANCEL,orderId));
-        R result = null;
-
-        try {
-            boolean locked = lock.tryLock(100, 30000, TimeUnit.MILLISECONDS);
-            if (!locked) {
-                throw new CustomException("订单正在处理中,请勿重复提交");
-            }
-            FsStoreOrderScrm order = orderService.selectFsStoreOrderById(orderId);
-            if (ObjectUtil.isNull(order)) {
-                throw new CustomException("订单不存在");
-            }
-            if (order.getStatus() != 0) {
-                throw new CustomException("非法操作");
-            }
-            orderService.cancelOrder(orderId);
-
-            result = R.ok("操作成功");
-        } catch (Exception e) {
-            logger.error("取消订单失败, 订单号: {}", orderId, e);
-            throw new CustomException("取消订单过程中发生错误");
-        } finally {
-            if (lock.isHeldByCurrentThread()) {
-                lock.unlock();
-            }
+//    @Log(title = "取消订单", businessType = BusinessType.UPDATE)
+    public R cancelOrder(@Validated @RequestBody FsStoreOrderCancelParam param, HttpServletRequest request) {
+        FsStoreOrderScrm order = orderService.selectFsStoreOrderById(param.getOrderId());
+        if (ObjectUtil.isNull(order)) {
+            throw new CustomException("订单不存在");
         }
-        return result;
+        if (order.getStatus() != 0) {
+            throw new CustomException("非法操作");
+        }
+        orderService.cancelOrder(param.getOrderId());
+
+        return R.ok("操作成功");
     }
+
     @Login
     @ApiOperation("物流查询")
     @PostMapping("/getExpress")
-    public R getExpress( @Validated @RequestBody FsStoreOrderExpressParam param, HttpServletRequest request){
-        FsStoreOrderScrm order=orderService.selectFsStoreOrderById(param.getOrderId());
+    public R getExpress(@Validated @RequestBody FsStoreOrderExpressParam param, HttpServletRequest request) {
+        FsStoreOrderScrm order = orderService.selectFsStoreOrderById(param.getOrderId());
         if (ObjectUtil.isNull(order)) {
             throw new CustomException("订单不存在");
         }
-        if (order.getStatus() <2) {
+        if (order.getStatus() < 2) {
             throw new CustomException("未发货订单不能查询");
         }
         return orderService.getExpress(order);
@@ -511,38 +731,28 @@ public class StoreOrderScrmController extends AppBaseController {
     @Login
     @ApiOperation("确认套餐订单")
     @PostMapping("/confirmPackageOrder")
-    public R confirmPackageOrder(@Validated @RequestBody FsStoreConfirmPackageIdOrderParam param, HttpServletRequest request){
-        return orderService.confirmPackageOrder(Long.parseLong(getUserId()),param);
+    public R confirmPackageOrder(@Validated @RequestBody FsStoreConfirmPackageIdOrderParam param, HttpServletRequest request) {
+        return orderService.confirmPackageOrder(Long.parseLong(getUserId()), param);
     }
 
     @Login
     @ApiOperation("计算套餐订单")
     @PostMapping("/computedPackageOrder")
-    public R computedPackageOrder(@Validated @RequestBody FsStoreComputedPackageIdOrderParam param, HttpServletRequest request){
-        return orderService.computedPackageOrder(Long.parseLong(getUserId()),param);
+    public R computedPackageOrder(@Validated @RequestBody FsStoreComputedPackageIdOrderParam param, HttpServletRequest request) {
+        return orderService.computedPackageOrder(Long.parseLong(getUserId()), param);
     }
 
     @Login
     @ApiOperation("创建订单")
     @PostMapping("/createPackageOrder")
-    public R createPackageOrder(@Validated @RequestBody FsStorePackageOrderCreateParam param, HttpServletRequest request){
-        return orderService.createPackageOrder(Long.parseLong(getUserId()),param);
+    public R createPackageOrder(@Validated @RequestBody FsStorePackageOrderCreateParam param, HttpServletRequest request) {
+        return orderService.createPackageOrder(Long.parseLong(getUserId()), param);
     }
 
     @Login
     @ApiOperation("完成订单")
     @PostMapping("/finishOrder")
-    public R finishOrder( @Validated @RequestBody FsStoreOrderFinishParam param, HttpServletRequest request){
-        if(StringUtils.isNotEmpty(param.getTransactionId())){
-            if(param.getOrderId() == null || param.getOrderId() == 0){
-                //根据交易单号获取订单ID
-                FsStorePaymentScrm fsStorePaymentScrm=fsStorePaymentMapper.queryFsStorePaymentByBusinessOrderId(param.getTransactionId());
-                if(fsStorePaymentScrm == null){
-                    return R.error("操作失败,交易单号未找到订单信息!");
-                }
-                param.setOrderId(fsStorePaymentScrm.getOrderId());
-            }
-        }
+    public R finishOrder(@Validated @RequestBody FsStoreOrderFinishParam param, HttpServletRequest request) {
         return orderService.finishOrder(param.getOrderId());
     }
 
@@ -550,18 +760,13 @@ public class StoreOrderScrmController extends AppBaseController {
     @Login
     @ApiOperation("获取订单总数")
     @GetMapping("/getOrderCount")
-    public R getOrderCount( HttpServletRequest request){
-        Integer count0=orderService.selectFsStoreOrderCount(Long.parseLong(getUserId()),0);
-        Integer count1=orderService.selectFsStoreOrderCount(Long.parseLong(getUserId()),1);
-        Integer count2=orderService.selectFsStoreOrderCount(Long.parseLong(getUserId()),2);
-        Integer afterSalesCount=afterSalesService.selectFsStoreAfterSalesCount(Long.parseLong(getUserId()),0);
-        return R.ok().put("count0",count0).put("count1",count1).put("count2",count2).put("afterSalesCount",afterSalesCount);
+    public R getOrderCount(HttpServletRequest request) {
+        Integer count0 = orderService.selectFsStoreOrderCount(Long.parseLong(getUserId()), 0);
+        Integer count1 = orderService.selectFsStoreOrderCount(Long.parseLong(getUserId()), 1);
+        Integer count2 = orderService.selectFsStoreOrderCount(Long.parseLong(getUserId()), 2);
+        Integer afterSalesCount = afterSalesService.selectFsStoreAfterSalesCount(Long.parseLong(getUserId()), 0);
+        return R.ok().put("count0", count0).put("count1", count1).put("count2", count2).put("afterSalesCount", afterSalesCount);
     }
 
-    @Login
-    @ApiOperation("获取确认收货类型")
-    @GetMapping("/queryReceiptType")
-    public R queryReceiptType(){
-        return orderService.queryReceiptType();
-    }
-}
+
+}