Parcourir la source

1、储值支付逻辑调整
2、储值退款逻辑开发
3、销售绑定业务调整

yys il y a 4 semaines
Parent
commit
34e886ccc3

+ 18 - 0
fs-company/src/main/java/com/fs/user/FsUserAdminController.java

@@ -20,6 +20,7 @@ import com.fs.framework.service.TokenService;
 import com.fs.his.domain.FsUser;
 import com.fs.his.service.IFsUserService;
 import com.fs.his.utils.PhoneUtil;
+import com.fs.his.vo.FsUserVO;
 import com.fs.im.dto.OpenImResponseDTO;
 import com.fs.im.service.OpenIMService;
 import com.fs.qw.domain.CustomerTransferApproval;
@@ -103,6 +104,23 @@ public class FsUserAdminController extends BaseController {
         return fsUserService.selectFsUserPageListNew(param);
     }
 
+    @PreAuthorize("@ss.hasPermi('user:fsUser:myList')")
+    @PostMapping("/myUserList")
+    @ApiOperation("我的会员列表")
+    public TableDataInfo pageMyUserList(@RequestBody FsUser param) {
+
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        param.setCompanyId(loginUser.getCompany().getCompanyId());
+        param.setCompanyUserId(loginUser.getUser().getUserId());
+
+        if(param.getCompanyUserId() == null) {
+            throw new IllegalArgumentException("当前销售不存在!");
+        }
+        startPage();
+        List<FsUser> list = fsUserService.selectFsUserList(param);
+        return getDataTable(list);
+    }
+
     @PostMapping("/auditUser")
     @ApiOperation("审核用户(移除小黑屋)")
     public R auditUser(@RequestBody String[] userIds) {

+ 8 - 0
fs-service/src/main/java/com/fs/course/mapper/FsUserCompanyUserMapper.java

@@ -111,4 +111,12 @@ public interface FsUserCompanyUserMapper extends BaseMapper<FsUserCompanyUser>{
      * @return
      */
     List<Long> selectIdListByCompanyUserId(FsUserPageListParam param);
+
+
+    /**
+     * 根据userId查询最开始的数据
+     * @param userId
+     * @return
+     */
+    FsUserCompanyUser selectFsUserCompanyUserByUserId(@Param("userId") Long userId);
 }

+ 87 - 2
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreAfterSalesScrmServiceImpl.java

@@ -16,6 +16,9 @@ import com.fs.common.utils.CloudHostUtils;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.spring.SpringUtils;
+import com.fs.company.domain.Company;
+import com.fs.company.domain.RechargeRecord;
+import com.fs.company.mapper.RechargeRecordMapper;
 import com.fs.company.service.ICompanyService;
 import com.fs.config.cloud.CloudHostProper;
 import com.fs.core.config.WxPayProperties;
@@ -110,7 +113,8 @@ public class FsStoreAfterSalesScrmServiceImpl implements IFsStoreAfterSalesScrmS
     private ICompanyService companyService;
     @Autowired
     private FsStoreAfterSalesScrmMapper fsStoreAfterSalesMapper;
-
+    @Autowired
+    private RechargeRecordMapper rechargeRecordMapper;
 
     @Autowired
     private FsCoursePlaySourceConfigMapper fsCoursePlaySourceConfigMapper;
@@ -980,7 +984,14 @@ public class FsStoreAfterSalesScrmServiceImpl implements IFsStoreAfterSalesScrmS
                         }
 
                     }else if (payment.getPayMode()!=null&&payment.getPayMode().equals("cz")) {
-//                      TODO 储值退款
+                        FsStorePaymentScrm paymentMap = new FsStorePaymentScrm();
+                        paymentMap.setPaymentId(payment.getPaymentId());
+                        paymentMap.setStatus(-1);
+                        paymentMap.setRefundTime(DateUtils.getNowDate());
+                        paymentMap.setRefundMoney(payment.getPayMoney());
+                        paymentService.updateFsStorePayment(paymentMap);
+                        FsUserScrm fsUserScrm = userService.selectFsUserById(order.getUserId());
+                        processStoreRechargePayment(payment,fsUserScrm,order);
 
                     } else {
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -1003,6 +1014,80 @@ public class FsStoreAfterSalesScrmServiceImpl implements IFsStoreAfterSalesScrmS
         this.deletePurchaseLimitRecordsForStoreOrder(order);
         return R.ok();
     }
+
+    /**
+     * 处理商城储值支付
+     * @param storePayment 商城订单支付信息
+     * @param user 用户信息
+     * @return 支付处理结果
+     */
+    private R processStoreRechargePayment(FsStorePaymentScrm storePayment, FsUserScrm user, FsStoreOrderScrm fsStoreOrderScrm) {
+
+        Company company = companyService.selectCompanyById(fsStoreOrderScrm.getCompanyId());
+
+        // 增加用户储值余额
+        addUserRechargeBalance(user, storePayment.getPayMoney());
+
+        // 创建消费记录
+        return R.ok().put("data", createConsumptionRecord(
+                fsStoreOrderScrm.getId(),
+                fsStoreOrderScrm.getOrderCode(),
+                user.getUserId(),
+                user.getNickName(),
+                storePayment.getPayMoney(),
+                company
+        ));
+    }
+
+    /**
+     * 增加用户储值余额
+     * @param user 用户信息
+     * @param amount 扣减金额
+     */
+    private void addUserRechargeBalance(FsUserScrm user, BigDecimal amount) {
+        user.setRechargeBalance(user.getRechargeBalance().add(amount));
+        userService.updateFsUser(user);
+    }
+    /**
+     * 订单支付成功后,增加消费记录
+     * @param orderId 订单ID
+     * @param orderNo 订单编号
+     * @param userId 用户ID
+     * @param userName 用户姓名
+     * @param amount 消费金额
+     * @return 影响行数
+     */
+    public int createConsumptionRecord(Long orderId, String orderNo, Long userId,
+                                       String userName, BigDecimal amount,Company company
+    ) {
+        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-消费
+        if (ObjectUtil.isEmpty(company)){
+            record.setRemark("订单退款,自主下单没有归属公司");
+        }else {
+            record.setCompanyId(company.getCompanyId());
+            record.setCompanyName(company.getCompanyName());
+            record.setRemark("订单退款");
+        }
+        record.setCreateTime(new Date());
+        record.setDelFlag("0");
+
+        return rechargeRecordMapper.insertRechargeRecord(record);
+    }
+
+    /**
+     * 生成交易流水号
+     * @return 交易流水号
+     */
+    private String generateTransactionId() {
+        return "TTK" + System.currentTimeMillis() + UUID.randomUUID().toString().substring(0, 8).toUpperCase();
+    }
     /**
      * 封装微信参数
      *

+ 93 - 7
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -36,10 +36,7 @@ import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.ip.IpUtils;
 import com.fs.common.utils.spring.SpringUtils;
 import com.fs.company.domain.*;
-import com.fs.company.mapper.CompanyDeptMapper;
-import com.fs.company.mapper.CompanyMapper;
-import com.fs.company.mapper.CompanyMoneyLogsMapper;
-import com.fs.company.mapper.CompanyUserUserMapper;
+import com.fs.company.mapper.*;
 import com.fs.company.service.ICompanyDeptService;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.service.ICompanyUserService;
@@ -48,9 +45,11 @@ import com.fs.core.config.WxMaConfiguration;
 import com.fs.core.config.WxPayProperties;
 import com.fs.core.utils.OrderCodeUtils;
 import com.fs.course.domain.FsCoursePlaySourceConfig;
+import com.fs.course.domain.FsUserCompanyUser;
 import com.fs.course.dto.FsOrderDeliveryNoteDTO;
 import com.fs.course.dto.OrderOpenIdTransDTO;
 import com.fs.course.mapper.FsCoursePlaySourceConfigMapper;
+import com.fs.course.mapper.FsUserCompanyUserMapper;
 import com.fs.erp.domain.*;
 import com.fs.erp.dto.*;
 import com.fs.erp.dto.df.*;
@@ -192,7 +191,8 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
     private CompanyMoneyLogsMapper moneyLogsMapper;
     @Autowired
     private IFsStorePaymentScrmService storePaymentService;
-
+    @Autowired
+    private RechargeRecordMapper rechargeRecordMapper;
     @Autowired
     private CompanyUserUserMapper companyUserUserMapper;
     @Autowired
@@ -259,6 +259,9 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
 
     @Autowired
     private ICompanyUserService companyUserService;
+
+    @Autowired
+    private FsUserCompanyUserMapper fsUserCompanyUserMapper;
     @Autowired
     private IFsStoreProductAttrValueScrmService attrValueService;
     @Autowired
@@ -857,6 +860,11 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
     @Override
     @Transactional
     public R createOrder(long userId, FsStoreOrderCreateParam param) {
+
+        FsUserCompanyUser fsUserCompanyUser = fsUserCompanyUserMapper.selectFsUserCompanyUserByUserId(userId);
+        param.setCompanyId(fsUserCompanyUser.getCompanyId());
+        param.setCompanyUserId(fsUserCompanyUser.getCompanyUserId());
+
         if (!CloudHostUtils.hasCloudHostName("鹤颜堂")){
             log.error("进入到数据");
             if (ObjectUtil.isEmpty(param.getAddressId())){
@@ -2643,8 +2651,14 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                         }
 
                     }else if (payment.getPayMode()!=null&&payment.getPayMode().equals("cz")) {
-//                      TODO 储值退款
-
+                        FsStorePaymentScrm paymentMap = new FsStorePaymentScrm();
+                        paymentMap.setPaymentId(payment.getPaymentId());
+                        paymentMap.setStatus(-1);
+                        paymentMap.setRefundTime(DateUtils.getNowDate());
+                        paymentMap.setRefundMoney(payment.getPayMoney());
+                        paymentService.updateFsStorePayment(paymentMap);
+                        FsUserScrm fsUserScrm = userService.selectFsUserById(order.getUserId());
+                        processStoreRechargePayment(payment,fsUserScrm,order);
                     } else {
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                         return R.error("支付类型异常");
@@ -2729,7 +2743,79 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         return R.ok();
 
     }
+    /**
+     * 处理商城储值支付
+     * @param storePayment 商城订单支付信息
+     * @param user 用户信息
+     * @return 支付处理结果
+     */
+    private R processStoreRechargePayment(FsStorePaymentScrm storePayment, FsUserScrm user, FsStoreOrderScrm fsStoreOrderScrm) {
+
+        Company company = companyService.selectCompanyById(fsStoreOrderScrm.getCompanyId());
+
+        // 增加用户储值余额
+        addUserRechargeBalance(user, storePayment.getPayMoney());
+
+        // 创建消费记录
+        return R.ok().put("data", createConsumptionRecord(
+                fsStoreOrderScrm.getId(),
+                fsStoreOrderScrm.getOrderCode(),
+                user.getUserId(),
+                user.getNickName(),
+                storePayment.getPayMoney(),
+                company
+        ));
+    }
+
+    /**
+     * 增加用户储值余额
+     * @param user 用户信息
+     * @param amount 扣减金额
+     */
+    private void addUserRechargeBalance(FsUserScrm user, BigDecimal amount) {
+        user.setRechargeBalance(user.getRechargeBalance().add(amount));
+        userService.updateFsUser(user);
+    }
+    /**
+     * 订单支付成功后,增加消费记录
+     * @param orderId 订单ID
+     * @param orderNo 订单编号
+     * @param userId 用户ID
+     * @param userName 用户姓名
+     * @param amount 消费金额
+     * @return 影响行数
+     */
+    public int createConsumptionRecord(Long orderId, String orderNo, Long userId,
+                                       String userName, BigDecimal amount,Company company
+    ) {
+        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-消费
+        if (ObjectUtil.isEmpty(company)){
+            record.setRemark("订单退款,自主下单没有归属公司");
+        }else {
+            record.setCompanyId(company.getCompanyId());
+            record.setCompanyName(company.getCompanyName());
+            record.setRemark("订单退款");
+        }
+        record.setCreateTime(new Date());
+        record.setDelFlag("0");
+
+        return rechargeRecordMapper.insertRechargeRecord(record);
+    }
 
+    /**
+     * 生成交易流水号
+     * @return 交易流水号
+     */
+    private String generateTransactionId() {
+        return "TTK" + System.currentTimeMillis() + UUID.randomUUID().toString().substring(0, 8).toUpperCase();
+    }
     /**
      * 封装微信参数
      *

+ 129 - 36
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStorePaymentScrmServiceImpl.java

@@ -3,6 +3,7 @@ package com.fs.hisStore.service.impl;
 
 import java.math.BigDecimal;
 
+import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
@@ -14,6 +15,7 @@ import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import cn.binarywang.wx.miniapp.bean.shop.request.shipping.*;
 import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
@@ -56,6 +58,7 @@ 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.OrderInfoEnum;
 import com.fs.hisStore.enums.SysConfigEnum;
 import com.fs.hisStore.mapper.FsStoreOrderScrmMapper;
 import com.fs.hisStore.param.*;
@@ -1147,6 +1150,11 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
         if (Objects.isNull(user)) {
             throw new CustomException("用户不存在");
         }
+        if (PaymentMethodEnum.CZ_PAY == payOrderParam.getPaymentMethod()) {
+            if (user.getRechargeBalance().compareTo(BigDecimal.ZERO) <= 0) {
+                throw new CustomException("余额不足!请先充值。");
+            }
+        }
         String type = null;
         FsPayConfig payConfig = new FsPayConfig();
         if (PaymentMethodEnum.WX_APP == payOrderParam.getPaymentMethod()) {
@@ -1197,46 +1205,129 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
         }
 
         FsStorePaymentScrm storePayment = new FsStorePaymentScrm();
+
+        // 1. 根据业务类型创建对应的支付对象
         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())
-                );
+
+            // 处理储值支付
+            if (isRechargePayment(payOrderParam)) {
+                return processLiveRechargePayment(liveOrderPayment, user);
             }
         } 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())
-                );
+
+            // 处理储值支付
+            if (isRechargePayment(payOrderParam)) {
+                return processStoreRechargePayment(storePayment, user);
             }
         }
         // 根据配置类型创建第三方支付订单
         return createThirdPartyPaymentScrm(payConfig, storePayment, user, payOrderParam);
     }
 
+    /**
+     * 判断是否为储值支付
+     * @param payOrderParam 支付订单参数
+     * @return true:储值支付 false:其他支付方式
+     */
+    private boolean isRechargePayment(PayOrderParam payOrderParam) {
+        return PaymentMethodEnum.CZ_PAY == payOrderParam.getPaymentMethod();
+    }
+
+    /**
+     * 处理直播储值支付
+     * @param liveOrderPayment 直播订单支付信息
+     * @param user 用户信息
+     * @return 支付处理结果
+     */
+    private R processLiveRechargePayment(LiveOrderPayment liveOrderPayment, FsUserScrm user) {
+        // 查询直播订单信息
+        LiveOrder liveOrder = liveOrderMapper.selectLiveOrderByOrderId(liveOrderPayment.getBusinessId());
+        Company company = companyService.selectCompanyById(liveOrder.getCompanyId());
+
+        // 扣减用户储值余额
+        deductUserRechargeBalance(user, liveOrder.getPayMoney());
+
+        // 更新直播订单状态
+        updateLiveOrderStatus(liveOrder);
+
+        // 创建消费记录
+        return R.ok().put("data", createConsumptionRecord(
+                liveOrder.getOrderId(),
+                liveOrder.getOrderCode(),
+                user.getUserId(),
+                user.getNickName(),
+                liveOrderPayment.getPayMoney(),
+                company
+        ));
+    }
+
+    /**
+     * 处理商城储值支付
+     * @param storePayment 商城订单支付信息
+     * @param user 用户信息
+     * @return 支付处理结果
+     */
+    private R processStoreRechargePayment(FsStorePaymentScrm storePayment, FsUserScrm user) {
+        // 查询商城订单信息
+        FsStoreOrderScrm fsStoreOrderScrm = storeOrderScrmMapper.selectFsStoreOrderById(storePayment.getOrderId());
+        Company company = companyService.selectCompanyById(fsStoreOrderScrm.getCompanyId());
+
+        // 扣减用户储值余额
+        deductUserRechargeBalance(user, storePayment.getPayMoney());
+
+        // 更新商城订单状态
+        updateStoreOrderStatus(fsStoreOrderScrm);
+
+        // 创建消费记录
+        return R.ok().put("data", createConsumptionRecord(
+                fsStoreOrderScrm.getId(),
+                fsStoreOrderScrm.getOrderCode(),
+                user.getUserId(),
+                user.getNickName(),
+                storePayment.getPayMoney(),
+                company
+        ));
+    }
+
+    /**
+     * 扣减用户储值余额
+     * @param user 用户信息
+     * @param amount 扣减金额
+     */
+    private void deductUserRechargeBalance(FsUserScrm user, BigDecimal amount) {
+        user.setRechargeBalance(user.getRechargeBalance().subtract(amount));
+        userService.updateFsUser(user);
+    }
+
+    /**
+     * 更新直播订单状态
+     * @param liveOrder 直播订单
+     */
+    private void updateLiveOrderStatus(LiveOrder liveOrder) {
+        liveOrder.setStatus(OrderInfoEnum.STATUS_1.getValue());
+        liveOrder.setPayTime(LocalDateTime.now());
+        liveOrder.setIsPay("1");
+        liveOrderMapper.updateLiveOrder(liveOrder);
+    }
+
+    /**
+     * 更新商城订单状态
+     * @param storeOrder 商城订单
+     */
+    private void updateStoreOrderStatus(FsStoreOrderScrm storeOrder) {
+        storeOrder.setPaid(OrderInfoEnum.PAY_STATUS_1.getValue());
+        storeOrder.setStatus(OrderInfoEnum.STATUS_1.getValue());
+        storeOrder.setPayTime(new Date());
+        storeOrderScrmMapper.updateFsStoreOrder(storeOrder);
+    }
+
+
+
     /**
      * 订单支付成功后,增加消费记录
      * @param orderId 订单ID
@@ -1244,13 +1335,11 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
      * @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) {
+                                       String userName, BigDecimal amount,Company company
+    ) {
         RechargeRecord record = new RechargeRecord();
         record.setUserId(userId);
         record.setUserName(userName);
@@ -1259,9 +1348,13 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
         record.setOrderId(orderId);
         record.setOrderNo(orderNo);
         record.setBusinessType(1); // 1-消费
-        record.setCompanyId(companyId);
-        record.setCompanyName(companyName);
-        record.setRemark("订单消费");
+        if (ObjectUtil.isEmpty(company)){
+            record.setRemark("订单消费,自主下单没有归属公司");
+        }else {
+            record.setCompanyId(company.getCompanyId());
+            record.setCompanyName(company.getCompanyName());
+            record.setRemark("订单消费");
+        }
         record.setCreateTime(new Date());
         record.setDelFlag("0");
 
@@ -1273,7 +1366,7 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
      * @return 交易流水号
      */
     private String generateTransactionId() {
-        return "TXN" + System.currentTimeMillis() + UUID.randomUUID().toString().substring(0, 8).toUpperCase();
+        return "TXF" + System.currentTimeMillis() + UUID.randomUUID().toString().substring(0, 8).toUpperCase();
     }
     /**
      * 直播订单支付信息

+ 79 - 8
fs-service/src/main/java/com/fs/live/service/impl/LiveOrderServiceImpl.java

@@ -45,11 +45,9 @@ import com.fs.common.exception.ServiceException;
 import com.fs.common.utils.*;
 import com.fs.common.utils.ip.IpUtils;
 import com.fs.common.utils.spring.SpringUtils;
-import com.fs.company.domain.Company;
-import com.fs.company.domain.CompanyDept;
-import com.fs.company.domain.CompanyMoneyLogs;
-import com.fs.company.domain.CompanyUser;
+import com.fs.company.domain.*;
 import com.fs.company.mapper.CompanyMoneyLogsMapper;
+import com.fs.company.mapper.RechargeRecordMapper;
 import com.fs.company.service.ICompanyDeptService;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.service.ICompanyUserService;
@@ -174,7 +172,8 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
     private FsUserWxMapper fsUserWxMapper;
     @Autowired
     private RocketMQTemplate rocketMQTemplate;
-
+    @Autowired
+    private RechargeRecordMapper rechargeRecordMapper;
     @Autowired
     private FsCoursePlaySourceConfigMapper fsCoursePlaySourceConfigMapper;
 
@@ -1585,8 +1584,14 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
                         }
 
                     }else if (payment.getPayMode()!=null&&payment.getPayMode().equals("cz")) {
-//                      TODO 储值退款
-
+                        LiveOrderPayment paymentMap = new LiveOrderPayment();
+                        paymentMap.setPaymentId(payment.getPaymentId());
+                        paymentMap.setStatus(-1);
+                        paymentMap.setRefundTime(DateUtils.getNowDate());
+                        paymentMap.setRefundMoney(payment.getPayMoney());
+                        liveOrderPaymentMapper.updateLiveOrderPayment(paymentMap);
+                        FsUserScrm fsUserScrm = userService.selectFsUserById(Long.valueOf(order.getUserId()));
+                        processLiveRechargePayment(payment,fsUserScrm,order);
                     } else {
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                         return R.error("支付类型异常");
@@ -1617,7 +1622,68 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
         return R.ok();
     }
 
+    /**
+     * 处理直播储值支付
+     * @param liveOrderPayment 直播订单支付信息
+     * @param user 用户信息
+     * @return 支付处理结果
+     */
+    private R processLiveRechargePayment(LiveOrderPayment liveOrderPayment, FsUserScrm user,LiveOrder liveOrder) {
+        // 查询直播订单信息
+        Company company = companyService.selectCompanyById(liveOrder.getCompanyId());
+
+        // 创建消费记录
+        return R.ok().put("data", createConsumptionRecord(
+                liveOrder.getOrderId(),
+                liveOrder.getOrderCode(),
+                user.getUserId(),
+                user.getNickName(),
+                liveOrderPayment.getPayMoney(),
+                company
+        ));
+    }
+
+    /**
+     * 订单支付成功后,增加消费记录
+     * @param orderId 订单ID
+     * @param orderNo 订单编号
+     * @param userId 用户ID
+     * @param userName 用户姓名
+     * @param amount 消费金额
+     * @return 影响行数
+     */
+    public int createConsumptionRecord(Long orderId, String orderNo, Long userId,
+                                       String userName, BigDecimal amount,Company company
+    ) {
+        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-消费
+        if (ObjectUtil.isEmpty(company)){
+            record.setRemark("直播订单退款,自主下单没有归属公司");
+        }else {
+            record.setCompanyId(company.getCompanyId());
+            record.setCompanyName(company.getCompanyName());
+            record.setRemark("直播订单退款");
+        }
+        record.setCreateTime(new Date());
+        record.setDelFlag("0");
+
+        return rechargeRecordMapper.insertRechargeRecord(record);
+    }
+
 
+    /**
+     * 生成交易流水号
+     * @return 交易流水号
+     */
+    private String generateTransactionId() {
+        return "TTK" + System.currentTimeMillis() + UUID.randomUUID().toString().substring(0, 8).toUpperCase();
+    }
     /**
      * 封装微信参数
      *
@@ -1868,7 +1934,12 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
 
                     }else if (payment.getPayMode()!=null&&payment.getPayMode().equals("cz")) {
 //                      TODO 储值退款
-
+                        LiveOrderPayment paymentMap = new LiveOrderPayment();
+                        paymentMap.setPaymentId(payment.getPaymentId());
+                        paymentMap.setStatus(-1);
+                        paymentMap.setRefundTime(DateUtils.getNowDate());
+                        paymentMap.setRefundMoney(payment.getPayMoney());
+                        liveOrderPaymentMapper.updateLiveOrderPayment(paymentMap);
                     } else {
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                         return R.error("支付类型异常");

+ 9 - 0
fs-service/src/main/resources/mapper/course/FsUserCompanyUserMapper.xml

@@ -239,4 +239,13 @@
         </where>
     </select>
 
+
+    <select id="selectFsUserCompanyUserByUserId"  resultMap="FsUserCompanyUserResult">
+        SELECT a.*
+        FROM fs_user_company_user a
+                 LEFT JOIN fs_user ON a.user_id = fs_user.user_id
+        WHERE a.user_id = #{userId}
+        ORDER BY a.create_time ASC
+        LIMIT 1
+    </select>
 </mapper>

+ 1 - 0
fs-service/src/main/resources/mapper/his/FsUserMapper.xml

@@ -65,6 +65,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <where>
             <if test="userId != null">and user_id = #{userId}</if>
             <if test="nickName != null  and nickName != ''"> and nick_name like concat( #{nickName}, '%')</if>
+            <if test="nickname != null  and nickname != ''"> and nick_name like concat( #{nickname}, '%')</if>
             <if test="avatar != null  and avatar != ''"> and avatar = #{avatar}</if>
             <if test="phone != null  and phone != ''"> and phone = #{phone}</if>
             <if test="integral != null "> and integral = #{integral}</if>

+ 2 - 1
fs-service/src/main/resources/mapper/hisStore/FsUserScrmMapper.xml

@@ -75,7 +75,7 @@
     </resultMap>
 
     <sql id="selectFsUserVo">
-        select user_id, username, nick_name, avatar, phone, integral, status, `level`, spread_user_id, spread_time, user_type, is_promoter, pay_count, spread_count, addres, tui_user_id, tui_time, tui_user_count, ma_open_id, mp_open_id, union_id, is_del, user_code, remark, nickname, create_time, update_time, last_ip, now_money, brokerage_price, balance, sign_num, integral_status, is_buy, password, real_name, birthday, id_card, jpush_id, is_vip, vip_start_date, vip_end_date, vip_level, vip_status, sex, store_open_id, is_official_account_auth, is_push, is_individuation_push, is_weixin_auth, company_id, company_user_id, register_date, register_code, test, login_device, source, is_add_qw, qw_user_id, is_show, parent_id, course_ma_open_id, history_app, qw_ext_id, `rank`, react,order_count,bind_company_user_id,app_id from fs_user
+        select user_id, username, nick_name, avatar, phone, integral, status, `level`, spread_user_id, spread_time, user_type, is_promoter, pay_count, spread_count, addres, tui_user_id, recharge_balance,tui_time, tui_user_count, ma_open_id, mp_open_id, union_id, is_del, user_code, remark, nickname, create_time, update_time, last_ip, now_money, brokerage_price, balance, sign_num, integral_status, is_buy, password, real_name, birthday, id_card, jpush_id, is_vip, vip_start_date, vip_end_date, vip_level, vip_status, sex, store_open_id, is_official_account_auth, is_push, is_individuation_push, is_weixin_auth, company_id, company_user_id, register_date, register_code, test, login_device, source, is_add_qw, qw_user_id, is_show, parent_id, course_ma_open_id, history_app, qw_ext_id, `rank`, react,order_count,bind_company_user_id,app_id from fs_user
     </sql>
 
     <select id="selectFsUserList" parameterType="FsUserScrm" resultMap="FsUserResult">
@@ -568,6 +568,7 @@
             <if test="spreadUserId != null">spread_user_id = #{spreadUserId},</if>
             <if test="brokeragePrice != null">brokerage_price = #{brokeragePrice},</if>
             <if test="appId != null">app_id = #{appId},</if>
+            <if test="rechargeBalance != null">recharge_balance = #{rechargeBalance},</if>
         </trim>
         where user_id = #{userId}
     </update>

+ 2 - 1
fs-user-app/src/main/java/com/fs/app/controller/app/AppController.java

@@ -78,7 +78,8 @@ public class AppController extends AppBaseController {
     @ApiOperation("储值支付")
     @PostMapping("/czPayment")
     public R czPayment(@Validated @RequestBody FsIntegralOrderDoPayParam param) {
-        param.setUserId(Long.parseLong(getUserId()));
+//        param.setUserId(Long.parseLong(getUserId()));
+        param.setUserId(735199L);
         return fsStoreOrderScrmService.payment(param, PaymentMethodEnum.CZ_PAY);
     }
 }