Sfoglia il codice sorgente

feat(order): 新增店铺资金变动记录功能

- 新增 ShopMoney 实体类用于记录资金变动- 新增 ShopMoneyMapper 接口继承 BaseMapper
- 在订单退款时新增资金变动记录逻辑
- 在微信支付成功回调中增加资金变动记录- 在分账成功后增加资金变动记录- 修改统计服务接口及实现,支持分页查询资金变动记录- 更新 StatisticsController 支持新的分页查询接口返回类型
SheepHy 4 giorni fa
parent
commit
638cf7dd37

+ 18 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/OrderController.java

@@ -32,9 +32,11 @@ import org.jeecg.modules.pay.entity.WxchatCallbackRefundData;
 import org.jeecg.modules.system.app.entity.AppOrder;
 import org.jeecg.modules.system.app.entity.AppOrderProInfo;
 import org.jeecg.modules.system.app.entity.AppOrderRefundsInfo;
+import org.jeecg.modules.system.app.entity.ShopMoney;
 import org.jeecg.modules.system.app.mapper.AppOrderMapper;
 import org.jeecg.modules.system.app.mapper.AppOrderProInfoMapper;
 import org.jeecg.modules.system.app.mapper.AppOrderRefundsInfoMapper;
+import org.jeecg.modules.system.app.mapper.ShopMoneyMapper;
 import org.jeecg.modules.system.app.service.IAppOrderProInfoService;
 import org.jeecg.modules.system.app.service.IAppOrderRefundsInfoService;
 import org.jeecg.modules.system.app.service.impl.AppOrderProInfoServiceImpl;
@@ -70,6 +72,8 @@ public class OrderController {
     private WeChatProfitSharingService weChatProfitSharingService;
     @Resource
     private IAppOrderRefundsInfoService appOrderRefundsInfoService;
+    @Resource
+    private ShopMoneyMapper shopMoneyMapper;
 
     /**
      * @return Result<OrderVO.PreviewOrderPlaceSchool>
@@ -300,6 +304,20 @@ public class OrderController {
                 appOrderRefundsInfo.setStatus(refundData.getStatus());
                 appOrderRefundsInfo.setSuccessTime(refundData.getSuccessTime());
                 appOrderRefundsInfoService.updateById(appOrderRefundsInfo);
+                ShopMoney shopMoney = shopMoneyMapper.selectOne(Wrappers.<ShopMoney>lambdaQuery()
+                        .eq(ShopMoney::getOrgCode, appOrder.getOrgCode())
+                        .last("limit 1")
+                        .orderByDesc(ShopMoney::getCreateTime));
+                shopMoneyMapper.insert(new ShopMoney()
+                        .setOrgCode(appOrder.getOrgCode())
+                        .setIncomeType(1)
+                        .setMoneyType(2)
+                        .setOrderCode(appOrder.getOrderCode())
+                        .setBeforeChange(shopMoney.getAfterChange())
+                        .setAfterChange(shopMoney.getAfterChange().subtract(appOrder.getPrice()))
+                        .setMoneyChange(appOrder.getPrice())
+                        .setChangeInfo(2)
+                        .setCreateTime(new Date()));
             }
 
             @Override

+ 22 - 1
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/WeChatPayService.java

@@ -73,7 +73,8 @@ public class WeChatPayService {
 
     @Resource
     private WeChatProfitSharingService weChatProfitSharingService;
-
+    @Resource
+    private ShopMoneyMapper shopMoneyMapper;
     // 声明一个可重入锁
     private final ReentrantLock lock = new ReentrantLock();
 
@@ -244,6 +245,26 @@ public class WeChatPayService {
                         if (appOrder.getOrProfitSharing() == 1) {
                             addProfitSharingInfos(appOrder);
                         }
+                        ShopMoney shopMoney = shopMoneyMapper.selectOne(Wrappers.<ShopMoney>lambdaQuery()
+                                .eq(ShopMoney::getOrgCode, appOrder.getOrgCode())
+                                .last("limit 1")
+                                .orderByDesc(ShopMoney::getCreateTime));
+                        if(null == shopMoney){
+                            shopMoney = new ShopMoney()
+                                    .setBeforeChange(BigDecimal.ZERO)
+                                    .setAfterChange(BigDecimal.ZERO);
+                        }
+                        shopMoneyMapper.insert(new ShopMoney()
+                                .setOrgCode(appOrder.getOrgCode())
+                                .setIncomeType(2)
+                                .setMoneyType(2)
+                                .setOrderCode(appOrder.getOrderCode())
+                                .setBeforeChange(shopMoney.getAfterChange())
+                                .setAfterChange(shopMoney.getAfterChange().add(appOrder.getPrice()))
+                                .setMoneyChange(appOrder.getPrice())
+                                .setChangeInfo(1)
+                                .setCreateTime(new Date()));
+
                     }
                 }
                 result.put("code", "SUCCESS");

+ 18 - 9
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/pay/config/WeChatProfitSharingService.java

@@ -12,14 +12,8 @@ import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.modules.pay.entity.ProfitSharingRequest;
 import org.jeecg.modules.pay.entity.Receiver;
 import org.jeecg.modules.pay.entity.ReceiverAddForm;
-import org.jeecg.modules.system.app.entity.AppOrder;
-import org.jeecg.modules.system.app.entity.AppOrderProInfo;
-import org.jeecg.modules.system.app.entity.AppProfitSharingInfo;
-import org.jeecg.modules.system.app.entity.AppProfitSharingRecords;
-import org.jeecg.modules.system.app.mapper.AppOrderMapper;
-import org.jeecg.modules.system.app.mapper.AppOrderProInfoMapper;
-import org.jeecg.modules.system.app.mapper.AppProfitSharingInfoMapper;
-import org.jeecg.modules.system.app.mapper.AppProfitSharingRecordsMapper;
+import org.jeecg.modules.system.app.entity.*;
+import org.jeecg.modules.system.app.mapper.*;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.stereotype.Service;
 
@@ -61,7 +55,8 @@ public class WeChatProfitSharingService {
 
     @Resource
     private AppProfitSharingInfoMapper appProfitSharingInfoMapper;
-
+    @Resource
+    private ShopMoneyMapper shopMoneyMapper;
     /**
      * 添加分账接收方
      *
@@ -155,6 +150,20 @@ public class WeChatProfitSharingService {
             JSONObject res = wechatPayV3Utils.profitSharingSendPost(WechatUrlConstants.PAY_V3_PROFIT_SHARING, JSONObject.from(profitSharingRequest));
             log.info("微信服务商分账--------------------------------------------------wechatPay res:{}", res.toString());
             if (ObjectUtil.isNotEmpty(res)) {
+                ShopMoney shopMoney = shopMoneyMapper.selectOne(Wrappers.<ShopMoney>lambdaQuery()
+                        .eq(ShopMoney::getOrgCode, appOrder.getOrgCode())
+                        .last("limit 1")
+                        .orderByDesc(ShopMoney::getCreateTime));
+                shopMoneyMapper.insert(new ShopMoney()
+                        .setOrgCode(appOrder.getOrgCode())
+                        .setIncomeType(2)
+                        .setMoneyType(1)
+                        .setOrderCode(appOrder.getOrderCode())
+                        .setBeforeChange(shopMoney.getAfterChange())
+                        .setAfterChange(shopMoney.getAfterChange().subtract(appOrder.getPrice()))
+                        .setMoneyChange(appOrder.getPrice())
+                        .setChangeInfo(3)
+                        .setCreateTime(new Date()));
                 if ("PROCESSING".equals(res.getString("state"))) {
                     appProfitSharingRecords.setStatus(0);
                     appOrder.setProfitSharingStatus(1);

+ 3 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/StatisticsController.java

@@ -5,6 +5,7 @@ import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.system.app.entity.ShopMoney;
 import org.jeecg.modules.system.app.service.IStatisticsService;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -111,12 +112,12 @@ public class StatisticsController {
      */
     @GetMapping("/selectFundChanges")
     @Operation(summary = "分页查询店铺资金总览-门店")
-    public Result<List<Map<String, Object>>> selectFundChanges(@RequestParam(name="pageNo",required=false) Integer pageNo,
+    public Result<Page<ShopMoney>> selectFundChanges(@RequestParam(name="pageNo",required=false) Integer pageNo,
                                                                @RequestParam(name="pageSize",required=false) Integer pageSize,
                                                                @RequestParam(name="incomeExpenseType",required=false)String incomeExpenseType,
                                                                @RequestParam(name="changeReason",required=false)String changeReason,
                                                                @RequestParam(name="amountType",required=false)String amountType){
-        Page<Map<String, Object>> page = new Page<>(pageNo, pageSize);
+        Page<ShopMoney> page = new Page<>(pageNo, pageSize);
         return Result.ok(statisticsService.selectFundChanges(page,incomeExpenseType,changeReason,amountType));
     }
 }

+ 77 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/ShopMoney.java

@@ -0,0 +1,77 @@
+package org.jeecg.modules.system.app.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@TableName("nm_shop_money")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description="账户资金变动记录表")
+public class ShopMoney implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**主键ID*/
+    @TableId(type = IdType.ASSIGN_ID)
+    @Schema(description = "主键ID")
+    private String id;
+
+    /**组织编号*/
+    @Excel(name = "组织编号", width = 15)
+    @Schema(description = "组织编号")
+    private String orgCode;
+
+    /**收支类型(1、支出  2、收入)*/
+    @Excel(name = "收支类型(1、支出  2、收入)", width = 15)
+    @Schema(description = "收支类型(1、支出  2、收入)")
+    private Integer incomeType;
+
+    /**金额类型(1、可用余额 2、待结算)*/
+    @Excel(name = "金额类型(1、可用余额 2、待结算)", width = 15)
+    @Schema(description = "金额类型(1、可用余额 2、待结算)")
+    private Integer moneyType;
+
+    /**订单编号*/
+    @Excel(name = "订单编号", width = 15)
+    @Schema(description = "订单编号")
+    private String orderCode;
+
+    /**改变前金额*/
+    @Excel(name = "改变前金额", width = 15)
+    @Schema(description = "改变前金额")
+    private BigDecimal beforeChange;
+
+    /**改变后金额*/
+    @Excel(name = "改变后金额", width = 15)
+    @Schema(description = "改变后金额")
+    private BigDecimal afterChange;
+
+    /**改变金额*/
+    @Excel(name = "改变金额", width = 15)
+    @Schema(description = "改变金额")
+    private BigDecimal moneyChange;
+
+    /**改变原因(1、用户支付 2、用户退款 3、分账)*/
+    @Excel(name = "改变原因(1、用户支付 2、用户退款 3、分账)", width = 15)
+    @Schema(description = "改变原因(1、用户支付 2、用户退款 3、分账)")
+    private Integer changeInfo;
+
+    /**创建时间;创建时间*/
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "创建时间;创建时间")
+    private Date createTime;
+}

+ 7 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/ShopMoneyMapper.java

@@ -0,0 +1,7 @@
+package org.jeecg.modules.system.app.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.system.app.entity.ShopMoney;
+
+public interface ShopMoneyMapper extends BaseMapper<ShopMoney> {
+}

+ 5 - 4
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IStatisticsService.java

@@ -2,6 +2,7 @@ package org.jeecg.modules.system.app.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.system.app.entity.ShopMoney;
 
 import java.util.List;
 import java.util.Map;
@@ -68,9 +69,9 @@ public interface IStatisticsService {
      * @return 返回值描述,如无返回值则为void 返回值为类则包含{@link object}
      *
      */
-    List<Map<String, Object>> selectFundChanges(Page<Map<String, Object>> page,
-                                                String incomeExpenseType,
-                                                String changeReason,
-                                                String amountType);
+    Page<ShopMoney> selectFundChanges(Page<ShopMoney> page,
+                                      String incomeExpenseType,
+                                      String changeReason,
+                                      String amountType);
 
 }

+ 13 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/StatisticsServiceImpl.java

@@ -1,8 +1,12 @@
 package org.jeecg.modules.system.app.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.system.app.entity.ShopMoney;
+import org.jeecg.modules.system.app.mapper.ShopMoneyMapper;
 import org.jeecg.modules.system.app.mapper.StatisticsMapper;
 import org.jeecg.modules.system.app.service.IStatisticsService;
 import org.springframework.stereotype.Service;
@@ -16,6 +20,8 @@ public class StatisticsServiceImpl implements IStatisticsService {
 
     @Resource
     private StatisticsMapper statisticsMapper;
+    @Resource
+    private ShopMoneyMapper shopMoneyMapper;
 
     @Override
     public List<Map<String, Object>> findByShopSum(int type) {
@@ -53,8 +59,13 @@ public class StatisticsServiceImpl implements IStatisticsService {
     }
 
     @Override
-    public List<Map<String, Object>> selectFundChanges(Page<Map<String, Object>> page, String incomeExpenseType, String changeReason, String amountType) {
+    public Page<ShopMoney> selectFundChanges(Page<ShopMoney> page, String incomeExpenseType, String changeReason, String amountType) {
         LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        return statisticsMapper.selectFundChanges(page,loginUser.getOrgCode(), incomeExpenseType, changeReason, amountType );
+        return shopMoneyMapper.selectPage(page, Wrappers.<ShopMoney>lambdaQuery()
+                .eq(StringUtils.isNotBlank(incomeExpenseType), ShopMoney::getIncomeType, incomeExpenseType)
+                .eq(StringUtils.isNotBlank(changeReason), ShopMoney::getChangeInfo, changeReason)
+                .eq(StringUtils.isNotBlank(amountType), ShopMoney::getMoneyType, amountType)
+                .eq(ShopMoney::getOrgCode, loginUser.getOrgCode())
+        );
     }
 }