Przeglądaj źródła

1、储值记录需求支付消费开发

yys 1 miesiąc temu
rodzic
commit
541af8ff93

+ 24 - 0
fs-service/src/main/java/com/fs/company/domain/RechargeRecord.java

@@ -37,6 +37,12 @@ public class RechargeRecord extends BaseEntity
     @Excel(name = "交易流水号")
     private String transactionId;
 
+    /** 订单ID */
+    private Long orderId;
+
+    /** 订单编号 */
+    private String orderNo;
+
     /** 业务类型:0-充值,1-消费 */
     @Excel(name = "业务类型", readConverterExp = "0=充值,1=消费")
     private Integer businessType;
@@ -133,6 +139,24 @@ public class RechargeRecord extends BaseEntity
         this.delFlag = delFlag;
     }
 
+    public Long getOrderId() {
+        return orderId;
+    }
+
+    public RechargeRecord setOrderId(Long orderId) {
+        this.orderId = orderId;
+        return this;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public RechargeRecord setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+        return this;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 4 - 1
fs-service/src/main/java/com/fs/company/service/impl/RechargeRecordServiceImpl.java

@@ -13,6 +13,7 @@ import com.fs.company.mapper.CompanyConfigMapper;
 import com.fs.company.mapper.RechargeRecordMapper;
 import com.fs.company.service.ICompanyConfigService;
 import com.fs.company.service.IRechargeRecordService;
+import com.fs.erp.dto.sdk.df.utils.StringUtils;
 import com.fs.his.domain.FsUser;
 import com.fs.his.mapper.FsUserMapper;
 import com.fs.his.service.IFsUserService;
@@ -72,7 +73,9 @@ public class RechargeRecordServiceImpl implements IRechargeRecordService
         if (fsUser == null) {
             throw new RuntimeException("用户不存在!");
         }
-
+        if (StringUtils.isEmpty(rechargeRecord.getRemark())){
+            rechargeRecord.setRemark("用户充值");
+        }
         // 2. 获取配置
         CompanyConfig config = companyConfigMapper.selectCompanyConfigByKey(
                 rechargeRecord.getCompanyId(), "recharge:record:config");

+ 2 - 1
fs-service/src/main/java/com/fs/his/enums/PaymentMethodEnum.java

@@ -11,7 +11,8 @@ public enum PaymentMethodEnum {
     WX_APP("wx_app"),      // H5微信支付
     T_NATIVE("t_native"),      // H5微信支付
     ALIPAY("alipay"),         // 支付宝支付
-    H5_ALIPAY("alipay");       // H5支付宝支付
+    H5_ALIPAY("alipay"),       // H5支付宝支付
+    CZ_PAY("cz_pay");       // H5支付宝支付
 
     private final String desc;
 }

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

@@ -131,6 +131,12 @@ public class FsUserScrm extends BaseEntity
     @Excel(name = "余额")
     private BigDecimal balance;
 
+    /**
+     * 储值金额
+     */
+    @Excel(name = "储值金额")
+    private BigDecimal rechargeBalance;
+
     /** 连续签到天数 */
     @Excel(name = "连续签到天数")
     private Long signNum;
@@ -187,6 +193,15 @@ public class FsUserScrm extends BaseEntity
      */
     private String appId;
 
+    public BigDecimal getRechargeBalance() {
+        return rechargeBalance;
+    }
+
+    public FsUserScrm setRechargeBalance(BigDecimal rechargeBalance) {
+        this.rechargeBalance = rechargeBalance;
+        return this;
+    }
+
     public String getAppId() {
         return appId;
     }

+ 3 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreAfterSalesScrmServiceImpl.java

@@ -979,6 +979,9 @@ public class FsStoreAfterSalesScrmServiceImpl implements IFsStoreAfterSalesScrmS
                             throw new CustomException("退款请求失败" + e);
                         }
 
+                    }else if (payment.getPayMode()!=null&&payment.getPayMode().equals("cz")) {
+//                      TODO 储值退款
+
                     } else {
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                         return R.error("支付类型异常");

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

@@ -2642,6 +2642,9 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                             throw new CustomException("退款请求失败" + e);
                         }
 
+                    }else if (payment.getPayMode()!=null&&payment.getPayMode().equals("cz")) {
+//                      TODO 储值退款
+
                     } else {
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                         return R.error("支付类型异常");

+ 96 - 7
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStorePaymentScrmServiceImpl.java

@@ -30,7 +30,9 @@ import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.ip.IpUtils;
 import com.fs.company.domain.Company;
 import com.fs.company.domain.CompanyUser;
+import com.fs.company.domain.RechargeRecord;
 import com.fs.company.mapper.CompanyConfigMapper;
+import com.fs.company.mapper.RechargeRecordMapper;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.service.ICompanyUserService;
 import com.fs.core.config.WxMaConfiguration;
@@ -53,14 +55,18 @@ import com.fs.his.service.IFsUserService;
 import com.fs.his.service.IFsUserWxService;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.hisStore.config.StoreConfig;
+import com.fs.hisStore.domain.FsStoreOrderScrm;
 import com.fs.hisStore.enums.SysConfigEnum;
+import com.fs.hisStore.mapper.FsStoreOrderScrmMapper;
 import com.fs.hisStore.param.*;
 import com.fs.hisStore.vo.FsStorePaymentUsetVo;
 import com.fs.huifuPay.domain.HuiFuCreateOrder;
 import com.fs.huifuPay.domain.HuifuCreateOrderResult;
 import com.fs.huifuPay.sdk.opps.core.utils.HuiFuUtils;
 import com.fs.huifuPay.service.HuiFuService;
+import com.fs.live.domain.LiveOrder;
 import com.fs.live.domain.LiveOrderPayment;
+import com.fs.live.mapper.LiveOrderMapper;
 import com.fs.live.mapper.LiveOrderPaymentMapper;
 import com.fs.pay.pay.dto.WxJspayDTO;
 import com.fs.hisStore.vo.FsStorePaymentStatisticsVO;
@@ -126,7 +132,14 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
     private LiveOrderPaymentMapper liveOrderPaymentMapper;
     @Autowired
     private IFsUserScrmService userService;
+    @Autowired
+    private RechargeRecordMapper rechargeRecordMapper;
+
+    @Autowired
+    private FsStoreOrderScrmMapper storeOrderScrmMapper;
 
+    @Autowired
+    private LiveOrderMapper liveOrderMapper;
     @Autowired
     private ICompanyUserService companyUserService;
     @Autowired
@@ -1148,7 +1161,7 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
             String json = configService.selectConfigByKey("his.pay");
             PayConfigDTO payConfigDTO = JSONUtil.toBean(json, PayConfigDTO.class);
             payConfig.setType(payConfigDTO.getType());
-        } else {
+        }else if(!(PaymentMethodEnum.CZ_PAY == payOrderParam.getPaymentMethod())){
             if (StringUtils.isBlank(payOrderParam.getAppId())) {
                 throw new IllegalArgumentException("appId不能为空");
             }
@@ -1183,20 +1196,85 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
             }
         }
 
-        // 创建记录 TODO 根据type创建支付
         FsStorePaymentScrm storePayment = new FsStorePaymentScrm();
         if (payOrderParam.getBusinessType().getPrefix().equals("live")) {
             LiveOrderPayment liveOrderPayment = createLiveStorePayment(payConfig, user, payOrderParam);
             BeanUtils.copyProperties(liveOrderPayment, storePayment);
+            if (PaymentMethodEnum.CZ_PAY == payOrderParam.getPaymentMethod()) {
+                LiveOrder liveOrder  = liveOrderMapper.selectLiveOrderByOrderId(liveOrderPayment.getBusinessId());
+                Company company = companyService.selectCompanyById(liveOrder.getCompanyId());
+                user.setRechargeBalance(user.getRechargeBalance().multiply(liveOrder.getPayMoney()));
+                userService.updateFsUser(user);
+                return R.ok().put("data",createConsumptionRecord(
+                        liveOrder.getOrderId(),
+                        liveOrder.getOrderCode(),
+                        user.getUserId(),
+                        user.getNickName(),
+                        storePayment.getPayMoney(),
+                        company.getCompanyId(),
+                        company.getCompanyName())
+                );
+            }
         } else {
             storePayment = createStorePaymentScrm(payConfig, user, payOrderParam);
+            if (PaymentMethodEnum.CZ_PAY == payOrderParam.getPaymentMethod()) {
+                FsStoreOrderScrm fsStoreOrderScrm  = storeOrderScrmMapper.selectFsStoreOrderById(storePayment.getOrderId());
+                Company company = companyService.selectCompanyById(fsStoreOrderScrm.getCompanyId());
+                user.setRechargeBalance(user.getRechargeBalance().multiply(storePayment.getPayMoney()));
+                userService.updateFsUser(user);
+                return R.ok().put("data",createConsumptionRecord(
+                        fsStoreOrderScrm.getId(),
+                        fsStoreOrderScrm.getOrderCode(),
+                        user.getUserId(),
+                        user.getNickName(),
+                        storePayment.getPayMoney(),
+                        company.getCompanyId(),
+                        company.getCompanyName())
+                );
+            }
         }
-
         // 根据配置类型创建第三方支付订单
         return createThirdPartyPaymentScrm(payConfig, storePayment, user, payOrderParam);
     }
 
+    /**
+     * 订单支付成功后,增加消费记录
+     * @param orderId 订单ID
+     * @param orderNo 订单编号
+     * @param userId 用户ID
+     * @param userName 用户姓名
+     * @param amount 消费金额
+     * @param companyId 公司ID
+     * @param companyName 公司名称
+     * @return 影响行数
+     */
+    public int createConsumptionRecord(Long orderId, String orderNo, Long userId,
+                                       String userName, BigDecimal amount,
+                                       Long companyId, String companyName) {
+        RechargeRecord record = new RechargeRecord();
+        record.setUserId(userId);
+        record.setUserName(userName);
+        record.setTotalAmount(amount);
+        record.setTransactionId(generateTransactionId());
+        record.setOrderId(orderId);
+        record.setOrderNo(orderNo);
+        record.setBusinessType(1); // 1-消费
+        record.setCompanyId(companyId);
+        record.setCompanyName(companyName);
+        record.setRemark("订单消费");
+        record.setCreateTime(new Date());
+        record.setDelFlag("0");
+
+        return rechargeRecordMapper.insertRechargeRecord(record);
+    }
 
+    /**
+     * 生成交易流水号
+     * @return 交易流水号
+     */
+    private String generateTransactionId() {
+        return "TXN" + System.currentTimeMillis() + UUID.randomUUID().toString().substring(0, 8).toUpperCase();
+    }
     /**
      * 直播订单支付信息
      *
@@ -1212,9 +1290,15 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
         }
 
         LiveOrderPayment storePayment = new LiveOrderPayment();
-        storePayment.setStatus(0);
+
+        if (PaymentMethodEnum.CZ_PAY == payOrderParam.getPaymentMethod()){
+            storePayment.setStatus(1);
+            storePayment.setPayMode("cz");
+        }else {
+            storePayment.setStatus(0);
+            storePayment.setPayMode(payConfig.getType());
+        }
         storePayment.setAppId(payConfig.getAppId());
-        storePayment.setPayMode(payConfig.getType());
         storePayment.setBusinessCode(payOrderParam.getOrderCode());
         storePayment.setPayCode(payCode);
         storePayment.setPayMoney(payOrderParam.getAmount());
@@ -1436,10 +1520,15 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
         }
 
         FsStorePaymentScrm storePayment = new FsStorePaymentScrm();
-        storePayment.setStatus(0);
+        if (PaymentMethodEnum.CZ_PAY == payOrderParam.getPaymentMethod()){
+            storePayment.setStatus(1);
+            storePayment.setPayMode("cz");
+        }else {
+            storePayment.setStatus(0);
+            storePayment.setPayMode(payConfig.getType());
+        }
         storePayment.setAppId(payConfig.getAppId());
         storePayment.setOrderId(payOrderParam.getOrderId());
-        storePayment.setPayMode(payConfig.getType());
         storePayment.setBusinessCode(payOrderParam.getOrderCode());
         storePayment.setPayCode(payCode);
         storePayment.setPayMoney(payOrderParam.getAmount());

+ 6 - 0
fs-service/src/main/java/com/fs/live/service/impl/LiveOrderServiceImpl.java

@@ -1584,6 +1584,9 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
                             throw new CustomException("退款请求失败" + e);
                         }
 
+                    }else if (payment.getPayMode()!=null&&payment.getPayMode().equals("cz")) {
+//                      TODO 储值退款
+
                     } else {
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                         return R.error("支付类型异常");
@@ -1863,6 +1866,9 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
                             throw new CustomException("退款请求失败" + e);
                         }
 
+                    }else if (payment.getPayMode()!=null&&payment.getPayMode().equals("cz")) {
+//                      TODO 储值退款
+
                     } else {
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                         return R.error("支付类型异常");

+ 1 - 1
fs-service/src/main/resources/application-druid-zkzh-test.yml

@@ -30,7 +30,7 @@ spring:
             druid:
                 # 主库数据源
                 master:
-                    url: jdbc:mysql://47.111.26.148:2345/jz_store_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    url: jdbc:mysql://47.111.26.148:2345/jz_store_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
                     username: root
                     password: Zkhj951753@#
                 # 从库数据源

+ 1 - 1
fs-service/src/main/resources/application-druid-zkzh.yml

@@ -30,7 +30,7 @@ spring:
             druid:
                 # 主库数据源
                 master:
-                    url: jdbc:mysql://rm-bp1l45210q9m4m83u.mysql.rds.aliyuncs.com:3306/jz_store_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    url: jdbc:mysql://rm-bp1l45210q9m4m83u.mysql.rds.aliyuncs.com:3306/jz_store_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
                     username: root
                     password: Zkhj951753@#
                 # 从库数据源

+ 8 - 0
fs-service/src/main/resources/mapper/company/RechargeRecordMapper.xml

@@ -11,6 +11,8 @@
         <result property="totalAmount"    column="total_amount"    />
         <result property="transactionId"    column="transaction_id"    />
         <result property="businessType"    column="business_type"    />
+        <result property="orderId" column="order_id"/>
+        <result property="orderNo" column="order_no"/>
         <result property="companyId"    column="company_id"    />
         <result property="companyName"    column="company_name"    />
         <result property="remark"    column="remark"    />
@@ -56,6 +58,8 @@
             <if test="companyName != null and companyName != ''">company_name,</if>
             <if test="remark != null">remark,</if>
             <if test="createBy != null">create_by,</if>
+            <if test="orderId != null">order_id,</if>
+            <if test="orderNo != null">order_no,</if>
             create_time
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
@@ -68,6 +72,8 @@
             <if test="companyName != null and companyName != ''">#{companyName},</if>
             <if test="remark != null">#{remark},</if>
             <if test="createBy != null">#{createBy},</if>
+            <if test="orderId != null">#{orderId},</if>
+            <if test="orderNo != null">#{orderNo},</if>
             sysdate()
         </trim>
     </insert>
@@ -84,6 +90,8 @@
             <if test="companyName != null and companyName != ''">company_name = #{companyName},</if>
             <if test="remark != null">remark = #{remark},</if>
             <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="orderId != null">order_id = #{orderId},</if>
+            <if test="orderNo != null">order_no = #{orderNo},</if>
             update_time = sysdate()
         </trim>
         where id = #{id}

+ 10 - 0
fs-user-app/src/main/java/com/fs/app/controller/app/AppController.java

@@ -71,4 +71,14 @@ public class AppController extends AppBaseController {
         param.setUserId(Long.parseLong(getUserId()));
         return fsStoreOrderScrmService.payment(param, PaymentMethodEnum.WX_APP);
     }
+
+
+//    @Login
+    @RepeatSubmit
+    @ApiOperation("储值支付")
+    @PostMapping("/czPayment")
+    public R czPayment(@Validated @RequestBody FsIntegralOrderDoPayParam param) {
+        param.setUserId(Long.parseLong(getUserId()));
+        return fsStoreOrderScrmService.payment(param, PaymentMethodEnum.CZ_PAY);
+    }
 }