浏览代码

补充结算价

Yangzw 1 月之前
父节点
当前提交
3badeddc91
共有 40 个文件被更改,包括 1406 次插入34 次删除
  1. 11 4
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharepath/vo/AppSharePathRespVO.java
  2. 14 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralService.java
  3. 23 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralServiceImpl.java
  4. 41 6
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathServiceImpl.java
  5. 3 0
      feifan-module-mall/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/module/sale/service/merchant/MerchantService.java
  6. 10 0
      feifan-module-mall/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/module/sale/service/merchant/MerchantServiceImpl.java
  7. 3 0
      feifan-module-mall/feifan-module-trade-api/src/main/java/cn/newfeifan/mall/module/trade/enums/ErrorCodeConstants.java
  8. 66 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/ordersettlement/AppOrderSettlementController.java
  9. 27 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/ordersettlement/vo/AppOrderSettlementPageReqVO.java
  10. 29 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/ordersettlement/vo/AppOrderSettlementRespVO.java
  11. 22 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/ordersettlement/vo/AppOrderSettlementSaveReqVO.java
  12. 66 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/ptsettlement/AppPtSettlementController.java
  13. 43 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/ptsettlement/vo/AppPtSettlementPageReqVO.java
  14. 50 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/ptsettlement/vo/AppPtSettlementRespVO.java
  15. 41 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/ptsettlement/vo/AppPtSettlementSaveReqVO.java
  16. 66 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/shopsettlement/AppShopSettlementController.java
  17. 49 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/shopsettlement/vo/AppShopSettlementPageReqVO.java
  18. 58 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/shopsettlement/vo/AppShopSettlementRespVO.java
  19. 47 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/shopsettlement/vo/AppShopSettlementSaveReqVO.java
  20. 5 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/order/TradeOrderItemDO.java
  21. 36 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/ordersettlement/OrderSettlementDO.java
  22. 61 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/ptsettlement/PtSettlementDO.java
  23. 69 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/shopsettlement/ShopSettlementDO.java
  24. 27 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/mysql/ordersettlement/OrderSettlementMapper.java
  25. 32 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/mysql/ptsettlement/PtSettlementMapper.java
  26. 34 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/mysql/shopsettlement/ShopSettlementMapper.java
  27. 51 10
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderUpdateServiceImpl.java
  28. 53 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/ordersettlement/OrderSettlementService.java
  29. 70 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/ordersettlement/OrderSettlementServiceImpl.java
  30. 53 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/ptsettlement/PtSettlementService.java
  31. 70 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/ptsettlement/PtSettlementServiceImpl.java
  32. 53 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/shopsettlement/ShopSettlementService.java
  33. 70 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/shopsettlement/ShopSettlementServiceImpl.java
  34. 12 0
      feifan-module-mall/feifan-module-trade-biz/src/main/resources/mapper/ordersettlement/OrderSettlementMapper.xml
  35. 12 0
      feifan-module-mall/feifan-module-trade-biz/src/main/resources/mapper/ptsettlement/PtSettlementMapper.xml
  36. 12 0
      feifan-module-mall/feifan-module-trade-biz/src/main/resources/mapper/shopsettlement/ShopSettlementMapper.xml
  37. 1 1
      feifan-module-member/feifan-module-member-api/src/main/java/cn/newfeifan/mall/module/member/enums/DictTypeConstants.java
  38. 6 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/admin/user/vo/MemberUserRespVO.java
  39. 9 9
      feifan-server/src/main/resources/application-prod.yaml
  40. 1 1
      feifan-server/src/main/resources/application.yaml

+ 11 - 4
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharepath/vo/AppSharePathRespVO.java

@@ -1,11 +1,12 @@
 package cn.newfeifan.mall.module.distri.controller.app.sharepath.vo;
 
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.module.member.controller.admin.user.vo.MemberUserRespVO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Builder;
 import lombok.Data;
 
-import java.util.List;
+import java.util.Map;
 
 
 @Schema(description = "用户 APP - 分销用户关系 Response VO")
@@ -15,9 +16,15 @@ public class AppSharePathRespVO {
     @Schema(description = "推荐人")
     private MemberUserRespVO referrerUser;
 
-    @Schema(description = "上级")
-    private MemberUserRespVO parentUser;
+//    @Schema(description = "上级")
+//    private MemberUserRespVO parentUser;
+
+    @Schema(description = "区域成员")
+    private Map<String, MemberUserRespVO> areaUsers;
 
     @Schema(description = "团队成员")
-    private List<MemberUserRespVO> descendants;
+    private PageResult<MemberUserRespVO> descendants;
+
+    @Schema(description = "推荐人数")
+    private Long referrerCount;
 }

+ 14 - 2
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralService.java

@@ -1,6 +1,7 @@
 package cn.newfeifan.mall.module.distri.service.integral;
 
 import javax.validation.*;
+
 import cn.newfeifan.mall.module.distri.controller.app.integral.vo.*;
 import cn.newfeifan.mall.module.distri.dal.dataobject.integral.IntegralDO;
 import cn.newfeifan.mall.module.distri.enums.CaclEnum;
@@ -56,7 +57,18 @@ public interface IntegralService {
                             String orderNum,
                             Integer integralType,
                             Long highQuota
-                               );
+    );
+
+    /**
+     * 给商户绑定的用户结算价
+     * @param orderId 订单id
+     * @param orderNum 订单编号
+     * @param amount 结算价
+     * @param userId 用户id
+     * @param integralEnum 积分类型
+     * @param generateUserId 订单用户id
+     */
+    void updateSHUserIntegral(Long orderId, String orderNum, Long amount, Long userId, IntegralEnum integralEnum, Long generateUserId);
 
     /**
      * 增加用户的直推奖
@@ -67,7 +79,7 @@ public interface IntegralService {
      * @param orderId 订单id
      * @param orderNo 订单编号
      */
-    void updateUserIntegralByBonus(Long generateUserId, Long userId,IntegralEnum integralEnum, Long amount, Long orderId,String orderNo);
+    void updateUserIntegralByBonus(Long generateUserId, Long userId, IntegralEnum integralEnum, Long amount, Long orderId, String orderNo);
 
     /**
      * 修改用户积分

+ 23 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralServiceImpl.java

@@ -116,7 +116,7 @@ public class IntegralServiceImpl implements IntegralService {
      * @param userId         要修改积分的用户
      * @param integralEnum       导致积分变化的事件类型枚举
      * @param amount         用户可用积分变化金额,可为负数
-     * @return 返回是否执行成功。执行失败,通常是就是用户积分不足,没积分抵扣
+     *  返回是否执行成功。执行失败,通常是就是用户积分不足,没积分抵扣
      */
     @Override
     public void updateUserIntegral(Long generateUserId,//导致产生积分变动的用户ID
@@ -198,6 +198,28 @@ public class IntegralServiceImpl implements IntegralService {
         integralChangeLogService.createIntegralChangeLog(changeLog);
     }
 
+    @Override
+    public void updateSHUserIntegral(Long orderId, String orderNum, Long amount, Long userId, IntegralEnum integralEnum, Long generateUserId) {
+        // 增加商户用户黄积分
+        IntegralDO shIntegral = integralMapper.selectOne(new LambdaQueryWrapperX<IntegralDO>().eq(IntegralDO::getUserId, userId));
+        shIntegral.setYellowCurrentQuota(shIntegral.getYellowCurrentQuota() + amount);
+        integralMapper.updateById(shIntegral);
+
+        // 记录积分变动日志
+        IntegralChangeLogSaveReqVO changeLog = IntegralChangeLogSaveReqVO.builder()
+                .userId(userId)
+                .integralPoints(amount)
+                .afterIntegralPoints(shIntegral.getYellowCurrentQuota())
+                .practicalIntegralPoints(amount)
+                .generateUserId(generateUserId)
+                .orderId(orderId)
+                .orderNo(orderNum)
+                .integralStatus(integralEnum.getType())
+                .integralType(IntegralTypeEnum.YELLOW_INTEGRAL.getType())
+                .build();
+        integralChangeLogService.createIntegralChangeLog(changeLog);
+    }
+
     @Override
     public void updateUserIntegralByBonus(Long generateUserId, Long userId, IntegralEnum integralEnum, Long amount, Long orderId, String orderNo) {
         if (amount == null || amount == 0L) return;

+ 41 - 6
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathServiceImpl.java

@@ -26,7 +26,10 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.newfeifan.mall.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@@ -137,17 +140,49 @@ public class SharePathServiceImpl implements SharePathService {
         Long userId = getLoginUserId();
 
         SharePathDO sharePathDO = sharePathMapper.selectOne(new LambdaQueryWrapperX<SharePathDO>().eq(SharePathDO::getUserId, userId));
-        MemberUserRespVO parentUser = BeanUtils.toBean(memberUserService.getUser(sharePathDO.getParentId()), MemberUserRespVO.class);
-        MemberUserRespVO referrerUser = BeanUtils.toBean(memberUserService.getUser(sharePathDO.getReferrerId()), MemberUserRespVO.class);
-
-        List<MemberUserRespVO> list = BeanUtils.toBean(memberUserService.getUserList(Arrays.asList(sharePathDO.getLeftChildId(), sharePathDO.getRightChildId())), MemberUserRespVO.class);
+//        MemberUserRespVO parentUser = BeanUtils.toBean(memberUserService.getUser(sharePathDO.getParentId()), MemberUserRespVO.class);
+        MemberUserRespVO referrerUser = getMemberUserRespVO(sharePathDO.getReferrerId());
+
+        // 获取AB区用户的信息
+        Map<String, MemberUserRespVO> areaUsers = new HashMap<>();
+        MemberUserRespVO AUser = getMemberUserRespVO(sharePathDO.getLeftChildId());
+        updateUserAmount(AUser);
+        areaUsers.put("A", AUser);
+        MemberUserRespVO BUser = getMemberUserRespVO(sharePathDO.getRightChildId());
+        updateUserAmount(BUser);
+        areaUsers.put("B", BUser);
+
+        PageResult<SharePathDO> shareList = sharePathMapper.selectPage(pageParam, new LambdaQueryWrapperX<SharePathDO>().eq(SharePathDO::getReferrerId, userId));
+        List<MemberUserRespVO> list = BeanUtils.toBean(memberUserService.getUserList(shareList.getList().stream().map(SharePathDO::getUserId).collect(Collectors.toList())), MemberUserRespVO.class);
+        for (MemberUserRespVO memberUserRespVO : list) {
+            updateUserAmount(memberUserRespVO);
+        }
+        Long referrerCount = sharePathMapper.selectCount(new LambdaQueryWrapperX<SharePathDO>().eq(SharePathDO::getReferrerId, userId));
+        PageResult<MemberUserRespVO> result = new PageResult<>(list, referrerCount);
         return AppSharePathRespVO.builder()
-                .parentUser(parentUser)
+//                .parentUser(parentUser)
                 .referrerUser(referrerUser)
-                .descendants(list)
+                .descendants(result)
+                .areaUsers(areaUsers)
+                .referrerCount(referrerCount)
                 .build();
     }
 
+    private void updateUserAmount(MemberUserRespVO user){
+        PartitionCrashDO AYesterdayCrash = getYesterdayCrash(user.getId(), 1);
+        user.setSurplusAmount(AYesterdayCrash == null ? 0L : AYesterdayCrash.getAfterHitQuota());
+        user.setAddAmount(AYesterdayCrash == null ? 0L : AYesterdayCrash.getSonPrice() + AYesterdayCrash.getBrotherPrice());
+    }
+
+    /**
+     * 获取会员用户信息
+     * @param userId 用户id
+     * @return 会员用户信息
+     */
+    private MemberUserRespVO getMemberUserRespVO(Long userId) {
+        return BeanUtils.toBean(memberUserService.getUser(userId), MemberUserRespVO.class);
+    }
+
     @Override
     public SharePathDO getSharePathByDescendant(Long userId) {
         List<SharePathDO> sharePathDOS = sharePathMapper.selectList(new LambdaQueryWrapperX<SharePathDO>().eqIfPresent(SharePathDO::getUserId, userId));

+ 3 - 0
feifan-module-mall/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/module/sale/service/merchant/MerchantService.java

@@ -1,5 +1,6 @@
 package cn.newfeifan.mall.module.sale.service.merchant;
 
+import cn.newfeifan.mall.module.sale.dal.dataobject.merchant.MerchantDO;
 import cn.newfeifan.mall.module.system.mq.message.login.LoginSendMessage;
 
 /**
@@ -11,4 +12,6 @@ public interface MerchantService {
 
     void doSendMail(LoginSendMessage message);
 
+    MerchantDO getMerchantByMerchantId(Long merchantId);
+
 }

+ 10 - 0
feifan-module-mall/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/module/sale/service/merchant/MerchantServiceImpl.java

@@ -2,11 +2,14 @@ package cn.newfeifan.mall.module.sale.service.merchant;
 
 import cn.newfeifan.mall.framework.common.util.json.JsonUtils;
 import cn.newfeifan.mall.module.sale.controller.app.shop.vo.ShopRespVO;
+import cn.newfeifan.mall.module.sale.dal.dataobject.merchant.MerchantDO;
+import cn.newfeifan.mall.module.sale.dal.mysql.merchant.MerchantMapper;
 import cn.newfeifan.mall.module.sale.service.shop.ShopService;
 import cn.newfeifan.mall.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO;
 import cn.newfeifan.mall.module.system.dal.dataobject.user.AdminUserDO;
 import cn.newfeifan.mall.module.system.dal.mysql.user.AdminUserMapper;
 import cn.newfeifan.mall.module.system.mq.message.login.LoginSendMessage;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
@@ -32,6 +35,8 @@ public class MerchantServiceImpl implements MerchantService {
     private AdminUserMapper userMapper;
     @Resource
     private ShopService shopService;
+    @Resource
+    private MerchantMapper merchantMapper;
     @Override
     public void doSendMail(LoginSendMessage message) {
 
@@ -63,4 +68,9 @@ public class MerchantServiceImpl implements MerchantService {
         }
     }
 
+    @Override
+    public MerchantDO getMerchantByMerchantId(Long merchantId) {
+        return merchantMapper.selectOne(new LambdaQueryWrapper<MerchantDO>().eq(MerchantDO::getId, merchantId));
+    }
+
 }

+ 3 - 0
feifan-module-mall/feifan-module-trade-api/src/main/java/cn/newfeifan/mall/module/trade/enums/ErrorCodeConstants.java

@@ -97,6 +97,9 @@ public interface ErrorCodeConstants {
     ErrorCode ORDER_PAY_ERROR = new ErrorCode(1_011_008_005, "钱包积分不够支付");
     ErrorCode ORDER_PAY_CONSUMPTION_POINTS_ERROR = new ErrorCode(1_011_008_006, "钱包消费分不够支付");
     ErrorCode J_PUSH_MESSAGE_LOG_NOT_EXISTS = new ErrorCode(1_011_008_011, "极光推送消息日志不存在");
+    ErrorCode ORDER_SETTLEMENT_NOT_EXISTS = new ErrorCode(1_011_008_012, "订单结算表不存在");
+    ErrorCode PT_SETTLEMENT_NOT_EXISTS = new ErrorCode(1_011_008_013, "平台订单结算表不存在");
+    ErrorCode SHOP_SETTLEMENT_NOT_EXISTS = new ErrorCode(1_011_008_014, "商户订单结算表不存在");
 
 
 }

+ 66 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/ordersettlement/AppOrderSettlementController.java

@@ -0,0 +1,66 @@
+package cn.newfeifan.mall.module.trade.controller.app.ordersettlement;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.*;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.CommonResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
+
+import cn.newfeifan.mall.module.trade.controller.app.ordersettlement.vo.*;
+import cn.newfeifan.mall.module.trade.dal.dataobject.ordersettlement.OrderSettlementDO;
+import cn.newfeifan.mall.module.trade.service.ordersettlement.OrderSettlementService;
+
+@Tag(name = "用户 APP - 订单结算表,记录有那些订单参与了本次结算")
+@RestController
+@RequestMapping("/trade/order-settlement")
+@Validated
+public class AppOrderSettlementController {
+
+    @Resource
+    private OrderSettlementService orderSettlementService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建订单结算表,记录有那些订单参与了本次结算")
+    public CommonResult<Long> createOrderSettlement(@Valid @RequestBody AppOrderSettlementSaveReqVO createReqVO) {
+        return success(orderSettlementService.createOrderSettlement(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新订单结算表,记录有那些订单参与了本次结算")
+    public CommonResult<Boolean> updateOrderSettlement(@Valid @RequestBody AppOrderSettlementSaveReqVO updateReqVO) {
+        orderSettlementService.updateOrderSettlement(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除订单结算表,记录有那些订单参与了本次结算")
+    @Parameter(name = "id", description = "编号", required = true)
+    public CommonResult<Boolean> deleteOrderSettlement(@RequestParam("id") Long id) {
+        orderSettlementService.deleteOrderSettlement(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得订单结算表,记录有那些订单参与了本次结算")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    public CommonResult<AppOrderSettlementRespVO> getOrderSettlement(@RequestParam("id") Long id) {
+        OrderSettlementDO orderSettlement = orderSettlementService.getOrderSettlement(id);
+        return success(BeanUtils.toBean(orderSettlement, AppOrderSettlementRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得订单结算表,记录有那些订单参与了本次结算分页")
+    public CommonResult<PageResult<AppOrderSettlementRespVO>> getOrderSettlementPage(@Valid AppOrderSettlementPageReqVO pageReqVO) {
+        PageResult<OrderSettlementDO> pageResult = orderSettlementService.getOrderSettlementPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, AppOrderSettlementRespVO.class));
+    }
+
+}

+ 27 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/ordersettlement/vo/AppOrderSettlementPageReqVO.java

@@ -0,0 +1,27 @@
+package cn.newfeifan.mall.module.trade.controller.app.ordersettlement.vo;
+
+import lombok.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.newfeifan.mall.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "用户 APP - 订单结算表,记录有那些订单参与了本次结算分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class AppOrderSettlementPageReqVO extends PageParam {
+
+    @Schema(description = "结算表ID", example = "3362")
+    private Long tradeShopSettlementId;
+
+    @Schema(description = "订单ID", example = "17253")
+    private Long tradeOrderId;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 29 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/ordersettlement/vo/AppOrderSettlementRespVO.java

@@ -0,0 +1,29 @@
+package cn.newfeifan.mall.module.trade.controller.app.ordersettlement.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "用户 APP - 订单结算表,记录有那些订单参与了本次结算 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class AppOrderSettlementRespVO {
+
+    @Schema(description = "结算二级表ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2527")
+    @ExcelProperty("结算二级表ID")
+    private Long id;
+
+    @Schema(description = "结算表ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "3362")
+    @ExcelProperty("结算表ID")
+    private Long tradeShopSettlementId;
+
+    @Schema(description = "订单ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "17253")
+    @ExcelProperty("订单ID")
+    private Long tradeOrderId;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 22 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/ordersettlement/vo/AppOrderSettlementSaveReqVO.java

@@ -0,0 +1,22 @@
+package cn.newfeifan.mall.module.trade.controller.app.ordersettlement.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "用户 APP - 订单结算表,记录有那些订单参与了本次结算新增/修改 Request VO")
+@Data
+public class AppOrderSettlementSaveReqVO {
+
+    @Schema(description = "结算二级表ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2527")
+    private Long id;
+
+    @Schema(description = "结算表ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "3362")
+    @NotNull(message = "结算表ID不能为空")
+    private Long tradeShopSettlementId;
+
+    @Schema(description = "订单ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "17253")
+    @NotNull(message = "订单ID不能为空")
+    private Long tradeOrderId;
+
+}

+ 66 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/ptsettlement/AppPtSettlementController.java

@@ -0,0 +1,66 @@
+package cn.newfeifan.mall.module.trade.controller.app.ptsettlement;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.*;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.CommonResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
+
+import cn.newfeifan.mall.module.trade.controller.app.ptsettlement.vo.*;
+import cn.newfeifan.mall.module.trade.dal.dataobject.ptsettlement.PtSettlementDO;
+import cn.newfeifan.mall.module.trade.service.ptsettlement.PtSettlementService;
+
+@Tag(name = "用户 APP - 平台每日结算信息表,记录店铺的结算信息")
+@RestController
+@RequestMapping("/trade/pt-settlement")
+@Validated
+public class AppPtSettlementController {
+
+    @Resource
+    private PtSettlementService ptSettlementService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建平台每日结算信息表,记录店铺的结算信息")
+    public CommonResult<Long> createPtSettlement(@Valid @RequestBody AppPtSettlementSaveReqVO createReqVO) {
+        return success(ptSettlementService.createPtSettlement(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新平台每日结算信息表,记录店铺的结算信息")
+    public CommonResult<Boolean> updatePtSettlement(@Valid @RequestBody AppPtSettlementSaveReqVO updateReqVO) {
+        ptSettlementService.updatePtSettlement(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除平台每日结算信息表,记录店铺的结算信息")
+    @Parameter(name = "id", description = "编号", required = true)
+    public CommonResult<Boolean> deletePtSettlement(@RequestParam("id") Long id) {
+        ptSettlementService.deletePtSettlement(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得平台每日结算信息表,记录店铺的结算信息")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    public CommonResult<AppPtSettlementRespVO> getPtSettlement(@RequestParam("id") Long id) {
+        PtSettlementDO ptSettlement = ptSettlementService.getPtSettlement(id);
+        return success(BeanUtils.toBean(ptSettlement, AppPtSettlementRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得平台每日结算信息表,记录店铺的结算信息分页")
+    public CommonResult<PageResult<AppPtSettlementRespVO>> getPtSettlementPage(@Valid AppPtSettlementPageReqVO pageReqVO) {
+        PageResult<PtSettlementDO> pageResult = ptSettlementService.getPtSettlementPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, AppPtSettlementRespVO.class));
+    }
+
+}

+ 43 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/ptsettlement/vo/AppPtSettlementPageReqVO.java

@@ -0,0 +1,43 @@
+package cn.newfeifan.mall.module.trade.controller.app.ptsettlement.vo;
+
+import lombok.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.newfeifan.mall.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "用户 APP - 平台每日结算信息表,记录店铺的结算信息分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class AppPtSettlementPageReqVO extends PageParam {
+
+    @Schema(description = "销售额(积分 + 支付金额)")
+    private Integer platformCollectionAmount;
+
+    @Schema(description = "共计成本价格(高精度 + 成本)")
+    private BigDecimal shopTotalHighAmount;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "是否结账")
+    private Boolean platformTransferConfirm;
+
+    @Schema(description = "抵扣积分")
+    private Long shopAmount;
+
+    @Schema(description = "结算单状态 0:未完成 , 1:已完成 , 2:部分完成 , 3:全部失败", example = "2")
+    private Integer status;
+
+    @Schema(description = "导出状态,已导出是1,未导出为0", example = "1")
+    private Boolean exportStatus;
+
+    @Schema(description = "抵扣消费分")
+    private Long consumptionPoints;
+
+}

+ 50 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/ptsettlement/vo/AppPtSettlementRespVO.java

@@ -0,0 +1,50 @@
+package cn.newfeifan.mall.module.trade.controller.app.ptsettlement.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "用户 APP - 平台每日结算信息表,记录店铺的结算信息 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class AppPtSettlementRespVO {
+
+    @Schema(description = "结算id", requiredMode = Schema.RequiredMode.REQUIRED, example = "2104")
+    @ExcelProperty("结算id")
+    private Long id;
+
+    @Schema(description = "销售额(积分 + 支付金额)", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("销售额(积分 + 支付金额)")
+    private Integer platformCollectionAmount;
+
+    @Schema(description = "共计成本价格(高精度 + 成本)")
+    @ExcelProperty("共计成本价格(高精度 + 成本)")
+    private BigDecimal shopTotalHighAmount;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "是否结账")
+    @ExcelProperty("是否结账")
+    private Boolean platformTransferConfirm;
+
+    @Schema(description = "抵扣积分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("抵扣积分")
+    private Long shopAmount;
+
+    @Schema(description = "结算单状态 0:未完成 , 1:已完成 , 2:部分完成 , 3:全部失败", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty("结算单状态 0:未完成 , 1:已完成 , 2:部分完成 , 3:全部失败")
+    private Integer status;
+
+    @Schema(description = "导出状态,已导出是1,未导出为0", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty("导出状态,已导出是1,未导出为0")
+    private Boolean exportStatus;
+
+    @Schema(description = "抵扣消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("抵扣消费分")
+    private Long consumptionPoints;
+
+}

+ 41 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/ptsettlement/vo/AppPtSettlementSaveReqVO.java

@@ -0,0 +1,41 @@
+package cn.newfeifan.mall.module.trade.controller.app.ptsettlement.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import javax.validation.constraints.*;
+import java.math.BigDecimal;
+
+@Schema(description = "用户 APP - 平台每日结算信息表,记录店铺的结算信息新增/修改 Request VO")
+@Data
+public class AppPtSettlementSaveReqVO {
+
+    @Schema(description = "结算id", requiredMode = Schema.RequiredMode.REQUIRED, example = "2104")
+    private Long id;
+
+    @Schema(description = "销售额(积分 + 支付金额)", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "销售额(积分 + 支付金额)不能为空")
+    private Integer platformCollectionAmount;
+
+    @Schema(description = "共计成本价格(高精度 + 成本)")
+    private BigDecimal shopTotalHighAmount;
+
+    @Schema(description = "是否结账")
+    private Boolean platformTransferConfirm;
+
+    @Schema(description = "抵扣积分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "抵扣积分不能为空")
+    private Long shopAmount;
+
+    @Schema(description = "结算单状态 0:未完成 , 1:已完成 , 2:部分完成 , 3:全部失败", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotNull(message = "结算单状态 0:未完成 , 1:已完成 , 2:部分完成 , 3:全部失败不能为空")
+    private Integer status;
+
+    @Schema(description = "导出状态,已导出是1,未导出为0", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "导出状态,已导出是1,未导出为0不能为空")
+    private Boolean exportStatus;
+
+    @Schema(description = "抵扣消费分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "抵扣消费分不能为空")
+    private Long consumptionPoints;
+
+}

+ 66 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/shopsettlement/AppShopSettlementController.java

@@ -0,0 +1,66 @@
+package cn.newfeifan.mall.module.trade.controller.app.shopsettlement;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.*;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.CommonResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
+
+import cn.newfeifan.mall.module.trade.controller.app.shopsettlement.vo.*;
+import cn.newfeifan.mall.module.trade.dal.dataobject.shopsettlement.ShopSettlementDO;
+import cn.newfeifan.mall.module.trade.service.shopsettlement.ShopSettlementService;
+
+@Tag(name = "用户 APP - 订单结算信息表,记录店铺的结算信息")
+@RestController
+@RequestMapping("/trade/shop-settlement")
+@Validated
+public class AppShopSettlementController {
+
+    @Resource
+    private ShopSettlementService shopSettlementService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建订单结算信息表,记录店铺的结算信息")
+    public CommonResult<Long> createShopSettlement(@Valid @RequestBody AppShopSettlementSaveReqVO createReqVO) {
+        return success(shopSettlementService.createShopSettlement(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新订单结算信息表,记录店铺的结算信息")
+    public CommonResult<Boolean> updateShopSettlement(@Valid @RequestBody AppShopSettlementSaveReqVO updateReqVO) {
+        shopSettlementService.updateShopSettlement(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除订单结算信息表,记录店铺的结算信息")
+    @Parameter(name = "id", description = "编号", required = true)
+    public CommonResult<Boolean> deleteShopSettlement(@RequestParam("id") Long id) {
+        shopSettlementService.deleteShopSettlement(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得订单结算信息表,记录店铺的结算信息")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    public CommonResult<AppShopSettlementRespVO> getShopSettlement(@RequestParam("id") Long id) {
+        ShopSettlementDO shopSettlement = shopSettlementService.getShopSettlement(id);
+        return success(BeanUtils.toBean(shopSettlement, AppShopSettlementRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得订单结算信息表,记录店铺的结算信息分页")
+    public CommonResult<PageResult<AppShopSettlementRespVO>> getShopSettlementPage(@Valid AppShopSettlementPageReqVO pageReqVO) {
+        PageResult<ShopSettlementDO> pageResult = shopSettlementService.getShopSettlementPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, AppShopSettlementRespVO.class));
+    }
+
+}

+ 49 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/shopsettlement/vo/AppShopSettlementPageReqVO.java

@@ -0,0 +1,49 @@
+package cn.newfeifan.mall.module.trade.controller.app.shopsettlement.vo;
+
+import lombok.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.newfeifan.mall.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "用户 APP - 订单结算信息表,记录店铺的结算信息分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class AppShopSettlementPageReqVO extends PageParam {
+
+    @Schema(description = "店铺id", example = "14984")
+    private Long shopId;
+
+    @Schema(description = "商户id", example = "21578")
+    private Long merchantId;
+
+    @Schema(description = "销售额(积分 + 支付金额)")
+    private Integer platformCollectionAmount;
+
+    @Schema(description = "共计成本价格(高精度 + 成本)")
+    private BigDecimal shopTotalHighAmount;
+
+    @Schema(description = "平台结算ID", example = "3176")
+    private Long ptSettlementId;
+
+    @Schema(description = "转账凭证附件")
+    private String attachment;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "抵扣积分")
+    private Long shopAmount;
+
+    @Schema(description = "账户名称", example = "张三")
+    private String accountName;
+
+    @Schema(description = "账户号码")
+    private String accountNumber;
+
+}

+ 58 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/shopsettlement/vo/AppShopSettlementRespVO.java

@@ -0,0 +1,58 @@
+package cn.newfeifan.mall.module.trade.controller.app.shopsettlement.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "用户 APP - 订单结算信息表,记录店铺的结算信息 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class AppShopSettlementRespVO {
+
+    @Schema(description = "结算id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27950")
+    @ExcelProperty("结算id")
+    private Long id;
+
+    @Schema(description = "店铺id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14984")
+    @ExcelProperty("店铺id")
+    private Long shopId;
+
+    @Schema(description = "商户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "21578")
+    @ExcelProperty("商户id")
+    private Long merchantId;
+
+    @Schema(description = "销售额(积分 + 支付金额)", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("销售额(积分 + 支付金额)")
+    private Integer platformCollectionAmount;
+
+    @Schema(description = "共计成本价格(高精度 + 成本)")
+    @ExcelProperty("共计成本价格(高精度 + 成本)")
+    private BigDecimal shopTotalHighAmount;
+
+    @Schema(description = "平台结算ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "3176")
+    @ExcelProperty("平台结算ID")
+    private Long ptSettlementId;
+
+    @Schema(description = "转账凭证附件")
+    @ExcelProperty("转账凭证附件")
+    private String attachment;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "抵扣积分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("抵扣积分")
+    private Long shopAmount;
+
+    @Schema(description = "账户名称", example = "张三")
+    @ExcelProperty("账户名称")
+    private String accountName;
+
+    @Schema(description = "账户号码")
+    @ExcelProperty("账户号码")
+    private String accountNumber;
+
+}

+ 47 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/shopsettlement/vo/AppShopSettlementSaveReqVO.java

@@ -0,0 +1,47 @@
+package cn.newfeifan.mall.module.trade.controller.app.shopsettlement.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import javax.validation.constraints.*;
+import java.math.BigDecimal;
+
+@Schema(description = "用户 APP - 订单结算信息表,记录店铺的结算信息新增/修改 Request VO")
+@Data
+public class AppShopSettlementSaveReqVO {
+
+    @Schema(description = "结算id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27950")
+    private Long id;
+
+    @Schema(description = "店铺id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14984")
+    @NotNull(message = "店铺id不能为空")
+    private Long shopId;
+
+    @Schema(description = "商户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "21578")
+    @NotNull(message = "商户id不能为空")
+    private Long merchantId;
+
+    @Schema(description = "销售额(积分 + 支付金额)", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "销售额(积分 + 支付金额)不能为空")
+    private Integer platformCollectionAmount;
+
+    @Schema(description = "共计成本价格(高精度 + 成本)")
+    private BigDecimal shopTotalHighAmount;
+
+    @Schema(description = "平台结算ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "3176")
+    @NotNull(message = "平台结算ID不能为空")
+    private Long ptSettlementId;
+
+    @Schema(description = "转账凭证附件")
+    private String attachment;
+
+    @Schema(description = "抵扣积分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "抵扣积分不能为空")
+    private Long shopAmount;
+
+    @Schema(description = "账户名称", example = "张三")
+    private String accountName;
+
+    @Schema(description = "账户号码")
+    private String accountNumber;
+
+}

+ 5 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/order/TradeOrderItemDO.java

@@ -150,6 +150,11 @@ public class TradeOrderItemDO extends BaseDO {
      */
     private Integer settlementPrice;
 
+    /**
+     * 是否结算
+     */
+    private Boolean isSettlement;
+
     private LocalDateTime settlementTime;
 
     /**

+ 36 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/ordersettlement/OrderSettlementDO.java

@@ -0,0 +1,36 @@
+package cn.newfeifan.mall.module.trade.dal.dataobject.ordersettlement;
+
+import lombok.*;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 订单结算表,记录有那些订单参与了本次结算 DO
+ *
+ * @author 非繁人
+ */
+@TableName("trade_order_settlement")
+@KeySequence("trade_order_settlement_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class OrderSettlementDO extends BaseDO {
+
+    /**
+     * 结算二级表ID
+     */
+    @TableId
+    private Long id;
+    /**
+     * 结算表ID
+     */
+    private Long tradeShopSettlementId;
+    /**
+     * 订单ID
+     */
+    private Long tradeOrderId;
+
+}

+ 61 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/ptsettlement/PtSettlementDO.java

@@ -0,0 +1,61 @@
+package cn.newfeifan.mall.module.trade.dal.dataobject.ptsettlement;
+
+import lombok.*;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 平台每日结算信息表,记录店铺的结算信息 DO
+ *
+ * @author 非繁人
+ */
+@TableName("trade_pt_settlement")
+@KeySequence("trade_pt_settlement_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtSettlementDO extends BaseDO {
+
+    /**
+     * 结算id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 销售额(积分 + 支付金额)
+     */
+    private Integer platformCollectionAmount;
+    /**
+     * 共计成本价格(高精度 + 成本)
+     */
+    private BigDecimal shopTotalHighAmount;
+    /**
+     * 结算成本
+     */
+    private Long settlementAmount;
+    /**
+     * 是否结账
+     */
+    private Boolean platformTransferConfirm;
+    /**
+     * 抵扣积分
+     */
+    private Long shopAmount;
+    /**
+     * 结算单状态 0:未完成 , 1:已完成 , 2:部分完成 , 3:全部失败
+     */
+    private Integer status;
+    /**
+     * 导出状态,已导出是1,未导出为0
+     */
+    private Boolean exportStatus;
+    /**
+     * 抵扣消费分
+     */
+    private Long consumptionPoints;
+
+}

+ 69 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/shopsettlement/ShopSettlementDO.java

@@ -0,0 +1,69 @@
+package cn.newfeifan.mall.module.trade.dal.dataobject.shopsettlement;
+
+import lombok.*;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 订单结算信息表,记录店铺的结算信息 DO
+ *
+ * @author 非繁人
+ */
+@TableName("trade_shop_settlement")
+@KeySequence("trade_shop_settlement_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ShopSettlementDO extends BaseDO {
+
+    /**
+     * 结算id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 店铺id
+     */
+    private Long shopId;
+    /**
+     * 商户id
+     */
+    private Long merchantId;
+    /**
+     * 销售额(积分 + 支付金额)
+     */
+    private Integer platformCollectionAmount;
+    /**
+     * 共计成本价格(高精度 + 成本)
+     */
+    private BigDecimal shopTotalHighAmount;
+    /**
+     * 结算成本
+     */
+    private Long settlementAmount;
+    /**
+     * 平台结算ID
+     */
+    private Long ptSettlementId;
+    /**
+     * 转账凭证附件
+     */
+    private String attachment;
+    /**
+     * 抵扣积分
+     */
+    private Long shopAmount;
+    /**
+     * 账户名称
+     */
+    private String accountName;
+    /**
+     * 账户号码
+     */
+    private String accountNumber;
+
+}

+ 27 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/mysql/ordersettlement/OrderSettlementMapper.java

@@ -0,0 +1,27 @@
+package cn.newfeifan.mall.module.trade.dal.mysql.ordersettlement;
+
+
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
+import cn.newfeifan.mall.module.trade.dal.dataobject.ordersettlement.OrderSettlementDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.trade.controller.app.ordersettlement.vo.*;
+
+/**
+ * 订单结算表,记录有那些订单参与了本次结算 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface OrderSettlementMapper extends BaseMapperX<OrderSettlementDO> {
+
+    default PageResult<OrderSettlementDO> selectPage(AppOrderSettlementPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<OrderSettlementDO>()
+                .eqIfPresent(OrderSettlementDO::getTradeShopSettlementId, reqVO.getTradeShopSettlementId())
+                .eqIfPresent(OrderSettlementDO::getTradeOrderId, reqVO.getTradeOrderId())
+                .betweenIfPresent(OrderSettlementDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(OrderSettlementDO::getId));
+    }
+
+}

+ 32 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/mysql/ptsettlement/PtSettlementMapper.java

@@ -0,0 +1,32 @@
+package cn.newfeifan.mall.module.trade.dal.mysql.ptsettlement;
+
+
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
+import cn.newfeifan.mall.module.trade.dal.dataobject.ptsettlement.PtSettlementDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.trade.controller.app.ptsettlement.vo.*;
+
+/**
+ * 平台每日结算信息表,记录店铺的结算信息 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface PtSettlementMapper extends BaseMapperX<PtSettlementDO> {
+
+    default PageResult<PtSettlementDO> selectPage(AppPtSettlementPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<PtSettlementDO>()
+                .eqIfPresent(PtSettlementDO::getPlatformCollectionAmount, reqVO.getPlatformCollectionAmount())
+                .eqIfPresent(PtSettlementDO::getShopTotalHighAmount, reqVO.getShopTotalHighAmount())
+                .betweenIfPresent(PtSettlementDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(PtSettlementDO::getPlatformTransferConfirm, reqVO.getPlatformTransferConfirm())
+                .eqIfPresent(PtSettlementDO::getShopAmount, reqVO.getShopAmount())
+                .eqIfPresent(PtSettlementDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(PtSettlementDO::getExportStatus, reqVO.getExportStatus())
+                .eqIfPresent(PtSettlementDO::getConsumptionPoints, reqVO.getConsumptionPoints())
+                .orderByDesc(PtSettlementDO::getId));
+    }
+
+}

+ 34 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/mysql/shopsettlement/ShopSettlementMapper.java

@@ -0,0 +1,34 @@
+package cn.newfeifan.mall.module.trade.dal.mysql.shopsettlement;
+
+
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
+import cn.newfeifan.mall.module.trade.dal.dataobject.shopsettlement.ShopSettlementDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.trade.controller.app.shopsettlement.vo.*;
+
+/**
+ * 订单结算信息表,记录店铺的结算信息 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface ShopSettlementMapper extends BaseMapperX<ShopSettlementDO> {
+
+    default PageResult<ShopSettlementDO> selectPage(AppShopSettlementPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ShopSettlementDO>()
+                .eqIfPresent(ShopSettlementDO::getShopId, reqVO.getShopId())
+                .eqIfPresent(ShopSettlementDO::getMerchantId, reqVO.getMerchantId())
+                .eqIfPresent(ShopSettlementDO::getPlatformCollectionAmount, reqVO.getPlatformCollectionAmount())
+                .eqIfPresent(ShopSettlementDO::getShopTotalHighAmount, reqVO.getShopTotalHighAmount())
+                .eqIfPresent(ShopSettlementDO::getPtSettlementId, reqVO.getPtSettlementId())
+                .eqIfPresent(ShopSettlementDO::getAttachment, reqVO.getAttachment())
+                .betweenIfPresent(ShopSettlementDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(ShopSettlementDO::getShopAmount, reqVO.getShopAmount())
+                .likeIfPresent(ShopSettlementDO::getAccountName, reqVO.getAccountName())
+                .eqIfPresent(ShopSettlementDO::getAccountNumber, reqVO.getAccountNumber())
+                .orderByDesc(ShopSettlementDO::getId));
+    }
+
+}

+ 51 - 10
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderUpdateServiceImpl.java

@@ -28,6 +28,7 @@ import cn.newfeifan.mall.module.product.dal.mysql.sku.ProductSkuMapper;
 import cn.newfeifan.mall.module.product.dal.mysql.spu.ProductSpuMapper;
 import cn.newfeifan.mall.module.sale.dal.dataobject.shop.ShopDO;
 import cn.newfeifan.mall.module.sale.dal.mysql.shop.ShopMapper;
+import cn.newfeifan.mall.module.sale.service.merchant.MerchantService;
 import cn.newfeifan.mall.module.trade.controller.app.base.property.AppProductPropertyValueDetailRespVO;
 import cn.newfeifan.mall.module.trade.controller.app.order.vo.*;
 import cn.newfeifan.mall.module.trade.controller.app.order.vo.item.AppTradeOrderItemCommentCreateReqVO;
@@ -35,8 +36,14 @@ import cn.newfeifan.mall.module.trade.convert.order.TradeOrderConvert;
 import cn.newfeifan.mall.module.trade.dal.dataobject.cart.CartDO;
 import cn.newfeifan.mall.module.trade.dal.dataobject.order.TradeOrderDO;
 import cn.newfeifan.mall.module.trade.dal.dataobject.order.TradeOrderItemDO;
+import cn.newfeifan.mall.module.trade.dal.dataobject.ordersettlement.OrderSettlementDO;
+import cn.newfeifan.mall.module.trade.dal.dataobject.ptsettlement.PtSettlementDO;
+import cn.newfeifan.mall.module.trade.dal.dataobject.shopsettlement.ShopSettlementDO;
 import cn.newfeifan.mall.module.trade.dal.mysql.order.TradeOrderItemMapper;
 import cn.newfeifan.mall.module.trade.dal.mysql.order.TradeOrderMapper;
+import cn.newfeifan.mall.module.trade.dal.mysql.ordersettlement.OrderSettlementMapper;
+import cn.newfeifan.mall.module.trade.dal.mysql.ptsettlement.PtSettlementMapper;
+import cn.newfeifan.mall.module.trade.dal.mysql.shopsettlement.ShopSettlementMapper;
 import cn.newfeifan.mall.module.trade.dal.redis.no.TradeNoRedisDAO;
 import cn.newfeifan.mall.module.trade.enums.delivery.DeliveryTypeEnum;
 import cn.newfeifan.mall.module.trade.enums.order.*;
@@ -124,6 +131,14 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
     private SharePathService sharePathService;
     @Resource
     private PtProfitService ptProfitService;
+    @Resource
+    private MerchantService merchantService;
+    @Resource
+    private OrderSettlementMapper orderSettlementMapper;
+    @Resource
+    private PtSettlementMapper ptSettlementMapper;
+    @Resource
+    private ShopSettlementMapper shopSettlementMapper;
 
     // =================== Order ===================
 
@@ -258,7 +273,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
         Long spuId = null;
         for (AppTradeOrderSettlementRespVO value : respVO.getShopRespVOMap().values()) {
-             spuId = value.getItems().get(0).getSpuId();
+            spuId = value.getItems().get(0).getSpuId();
         }
         ProductSpuDO productSpuDO = productSpuMapper.selectOne(new LambdaQueryWrapper<ProductSpuDO>().eq(ProductSpuDO::getId, spuId));
         respVO.setShopAreaId(productSpuDO.getAreaId().intValue());
@@ -453,16 +468,35 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         // 收货订单
         receiveOrder0(order);
 
+        List<TradeOrderItemDO> tradeOrderItemDOS = tradeOrderItemMapper.selectList(new LambdaQueryWrapper<TradeOrderItemDO>().eq(TradeOrderItemDO::getOrderId, order.getId()));
         // 收货后给商家结算价
-        giveShopSettlementPrice(order);
+        giveShopSettlementPrice(order, tradeOrderItemDOS);
+
+        // 记录pt和sh的结算单
+        addSettlement(order.getId(), tradeOrderItemDOS);
+    }
+
+    /**
+     * 添加结算单
+     */
+    private void addSettlement(Long orderId, List<TradeOrderItemDO> tradeOrderItemDOS) {
+        OrderSettlementDO orderSettlementDO = orderSettlementMapper.selectOne(new LambdaQueryWrapper<OrderSettlementDO>().eq(OrderSettlementDO::getTradeOrderId, orderId));
+
+        if (orderSettlementDO == null) return;
+
+        ShopSettlementDO shopSettlementDO = shopSettlementMapper.selectOne(new LambdaQueryWrapper<ShopSettlementDO>().eq(ShopSettlementDO::getId, orderSettlementDO.getTradeShopSettlementId()));
+        PtSettlementDO ptSettlementDO = ptSettlementMapper.selectOne(new LambdaQueryWrapper<PtSettlementDO>().eq(PtSettlementDO::getId, shopSettlementDO.getPtSettlementId()));
+        for (TradeOrderItemDO tradeOrderItemDO : tradeOrderItemDOS) {
+            shopSettlementDO.setSettlementAmount(shopSettlementDO.getSettlementAmount() + tradeOrderItemDO.getSettlementPrice());
+            ptSettlementDO.setSettlementAmount(ptSettlementDO.getSettlementAmount() + tradeOrderItemDO.getSettlementPrice());
+        }
     }
 
     /**
      * 给商家结算价
      * @param order 订单
      */
-    private void giveShopSettlementPrice(TradeOrderDO order){
-        List<TradeOrderItemDO> tradeOrderItemDOS = tradeOrderItemMapper.selectList(new LambdaQueryWrapper<TradeOrderItemDO>().eq(TradeOrderItemDO::getOrderId,order.getId()));
+    private void giveShopSettlementPrice(TradeOrderDO order, List<TradeOrderItemDO> tradeOrderItemDOS) {
 
         Long settlementPrice = 0L;      //结算价
         for (TradeOrderItemDO tradeOrderItemDO : tradeOrderItemDOS) {
@@ -474,7 +508,13 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         tradeOrderItemMapper.updateBatch(tradeOrderItemDOS);
 
         // 从平台中扣除
-        ptProfitService.subtractIntegral(moneyTransitionIntegral(settlementPrice),IntegralEnum.ORDER_SETTLEMENT,order.getId(),order.getNo(),order.getUserId());
+        Long settlementPrice1 = moneyTransitionIntegral(settlementPrice);
+        ptProfitService.subtractIntegral(settlementPrice1, IntegralEnum.ORDER_SETTLEMENT, order.getId(), order.getNo(), order.getUserId());
+
+        // 记录结算价
+        Long applyMemberUserId = merchantService.getMerchantByMerchantId(order.getMerchantId()).getApplyMemberUserId();     //商家的会员用户
+        // 增加商家绑定用户积分(黄)
+        integralService.updateSHUserIntegral(order.getId(), order.getNo(), settlementPrice1, applyMemberUserId, IntegralEnum.ORDER_SETTLEMENT, getLoginUserId());
     }
 
     @Override
@@ -990,8 +1030,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         Long userId = getLoginUserId();
         MemberUserDO user = memberUserService.getUser(userId);
         // 校验支付密码
-        if(user.getPayPassword() == null) throw exception(USER_NOT_PAY_PASSWORD);
-        if (!memberUserService.isPasswordMatch(requestVO.getPayPassword(), user.getPayPassword())) throw exception(USER_PAY_PASS_WORD_ERROR);
+        if (user.getPayPassword() == null) throw exception(USER_NOT_PAY_PASSWORD);
+        if (!memberUserService.isPasswordMatch(requestVO.getPayPassword(), user.getPayPassword()))
+            throw exception(USER_PAY_PASS_WORD_ERROR);
 
         for (Long orderId : requestVO.getOrderIds()) {
             List<Long> skuList = new ArrayList<>();
@@ -1054,7 +1095,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                 totalFreezeHighQuota += freezeHighQuotaInt;
 
                 totalPromotionExpenses += promotionExpenses;        //累加推广费
-                totalServiceCharge += (long)(promotionExpenses * Double.parseDouble(orderPercentageDO.getGrossProfitPlatformQuotaPerc()));      //累加服务费
+                totalServiceCharge += (long) (promotionExpenses * Double.parseDouble(orderPercentageDO.getGrossProfitPlatformQuotaPerc()));      //累加服务费
                 totalProfit += (long) (productSkuDO.getCostPrice() - productSkuDO.getSettlementPrice()) * tradeOrderItemDO.getCount();      //累加利润
                 totalSettlementPrice += (long) productSkuDO.getSettlementPrice() * tradeOrderItemDO.getCount();     //累加结算价
 
@@ -1071,7 +1112,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
             // 记录平台收益
             ptProfitService.updatePtProfit(moneyTransitionIntegral(totalPromotionExpenses), moneyTransitionIntegral(totalServiceCharge),
                     moneyTransitionIntegral(totalProfit), moneyTransitionIntegral(totalSettlementPrice), IntegralEnum.BUY_ORDER,
-                    orderId,order.getNo(),order.getUserId());
+                    orderId, order.getNo(), order.getUserId());
 
             // 增加推荐人积分
             SharePathDO sharePathByDescendant = sharePathService.getSharePathByDescendant(order.getUserId());       // 获取用户的关系王拿到推荐人id
@@ -1140,7 +1181,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         return money.multiply(DistriConstants.MONEY2INTEGRAL_BIG_DECIMAL);
     }
 
-    public static Long moneyTransitionIntegral(Long money){
+    public static Long moneyTransitionIntegral(Long money) {
         return money * DistriConstants.MONEY2INTEGRAL;
     }
 

+ 53 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/ordersettlement/OrderSettlementService.java

@@ -0,0 +1,53 @@
+package cn.newfeifan.mall.module.trade.service.ordersettlement;
+
+import javax.validation.*;
+import cn.newfeifan.mall.module.trade.controller.app.ordersettlement.vo.*;
+import cn.newfeifan.mall.module.trade.dal.dataobject.ordersettlement.OrderSettlementDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+/**
+ * 订单结算表,记录有那些订单参与了本次结算 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface OrderSettlementService {
+
+    /**
+     * 创建订单结算表,记录有那些订单参与了本次结算
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createOrderSettlement(@Valid AppOrderSettlementSaveReqVO createReqVO);
+
+    /**
+     * 更新订单结算表,记录有那些订单参与了本次结算
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateOrderSettlement(@Valid AppOrderSettlementSaveReqVO updateReqVO);
+
+    /**
+     * 删除订单结算表,记录有那些订单参与了本次结算
+     *
+     * @param id 编号
+     */
+    void deleteOrderSettlement(Long id);
+
+    /**
+     * 获得订单结算表,记录有那些订单参与了本次结算
+     *
+     * @param id 编号
+     * @return 订单结算表,记录有那些订单参与了本次结算
+     */
+    OrderSettlementDO getOrderSettlement(Long id);
+
+    /**
+     * 获得订单结算表,记录有那些订单参与了本次结算分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 订单结算表,记录有那些订单参与了本次结算分页
+     */
+    PageResult<OrderSettlementDO> getOrderSettlementPage(AppOrderSettlementPageReqVO pageReqVO);
+
+}

+ 70 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/ordersettlement/OrderSettlementServiceImpl.java

@@ -0,0 +1,70 @@
+package cn.newfeifan.mall.module.trade.service.ordersettlement;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import cn.newfeifan.mall.module.trade.controller.app.ordersettlement.vo.*;
+import cn.newfeifan.mall.module.trade.dal.dataobject.ordersettlement.OrderSettlementDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+
+import cn.newfeifan.mall.module.trade.dal.mysql.ordersettlement.OrderSettlementMapper;
+
+import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.module.trade.enums.ErrorCodeConstants.*;
+
+/**
+ * 订单结算表,记录有那些订单参与了本次结算 Service 实现类
+ *
+ * @author 非繁人
+ */
+@Service
+@Validated
+public class OrderSettlementServiceImpl implements OrderSettlementService {
+
+    @Resource
+    private OrderSettlementMapper orderSettlementMapper;
+
+    @Override
+    public Long createOrderSettlement(AppOrderSettlementSaveReqVO createReqVO) {
+        // 插入
+        OrderSettlementDO orderSettlement = BeanUtils.toBean(createReqVO, OrderSettlementDO.class);
+        orderSettlementMapper.insert(orderSettlement);
+        // 返回
+        return orderSettlement.getId();
+    }
+
+    @Override
+    public void updateOrderSettlement(AppOrderSettlementSaveReqVO updateReqVO) {
+        // 校验存在
+        validateOrderSettlementExists(updateReqVO.getId());
+        // 更新
+        OrderSettlementDO updateObj = BeanUtils.toBean(updateReqVO, OrderSettlementDO.class);
+        orderSettlementMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteOrderSettlement(Long id) {
+        // 校验存在
+        validateOrderSettlementExists(id);
+        // 删除
+        orderSettlementMapper.deleteById(id);
+    }
+
+    private void validateOrderSettlementExists(Long id) {
+        if (orderSettlementMapper.selectById(id) == null) {
+            throw exception(ORDER_SETTLEMENT_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public OrderSettlementDO getOrderSettlement(Long id) {
+        return orderSettlementMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<OrderSettlementDO> getOrderSettlementPage(AppOrderSettlementPageReqVO pageReqVO) {
+        return orderSettlementMapper.selectPage(pageReqVO);
+    }
+
+}

+ 53 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/ptsettlement/PtSettlementService.java

@@ -0,0 +1,53 @@
+package cn.newfeifan.mall.module.trade.service.ptsettlement;
+
+import javax.validation.*;
+import cn.newfeifan.mall.module.trade.controller.app.ptsettlement.vo.*;
+import cn.newfeifan.mall.module.trade.dal.dataobject.ptsettlement.PtSettlementDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+/**
+ * 平台每日结算信息表,记录店铺的结算信息 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface PtSettlementService {
+
+    /**
+     * 创建平台每日结算信息表,记录店铺的结算信息
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createPtSettlement(@Valid AppPtSettlementSaveReqVO createReqVO);
+
+    /**
+     * 更新平台每日结算信息表,记录店铺的结算信息
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updatePtSettlement(@Valid AppPtSettlementSaveReqVO updateReqVO);
+
+    /**
+     * 删除平台每日结算信息表,记录店铺的结算信息
+     *
+     * @param id 编号
+     */
+    void deletePtSettlement(Long id);
+
+    /**
+     * 获得平台每日结算信息表,记录店铺的结算信息
+     *
+     * @param id 编号
+     * @return 平台每日结算信息表,记录店铺的结算信息
+     */
+    PtSettlementDO getPtSettlement(Long id);
+
+    /**
+     * 获得平台每日结算信息表,记录店铺的结算信息分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 平台每日结算信息表,记录店铺的结算信息分页
+     */
+    PageResult<PtSettlementDO> getPtSettlementPage(AppPtSettlementPageReqVO pageReqVO);
+
+}

+ 70 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/ptsettlement/PtSettlementServiceImpl.java

@@ -0,0 +1,70 @@
+package cn.newfeifan.mall.module.trade.service.ptsettlement;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import cn.newfeifan.mall.module.trade.controller.app.ptsettlement.vo.*;
+import cn.newfeifan.mall.module.trade.dal.dataobject.ptsettlement.PtSettlementDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+
+import cn.newfeifan.mall.module.trade.dal.mysql.ptsettlement.PtSettlementMapper;
+
+import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.module.trade.enums.ErrorCodeConstants.*;
+
+/**
+ * 平台每日结算信息表,记录店铺的结算信息 Service 实现类
+ *
+ * @author 非繁人
+ */
+@Service
+@Validated
+public class PtSettlementServiceImpl implements PtSettlementService {
+
+    @Resource
+    private PtSettlementMapper ptSettlementMapper;
+
+    @Override
+    public Long createPtSettlement(AppPtSettlementSaveReqVO createReqVO) {
+        // 插入
+        PtSettlementDO ptSettlement = BeanUtils.toBean(createReqVO, PtSettlementDO.class);
+        ptSettlementMapper.insert(ptSettlement);
+        // 返回
+        return ptSettlement.getId();
+    }
+
+    @Override
+    public void updatePtSettlement(AppPtSettlementSaveReqVO updateReqVO) {
+        // 校验存在
+        validatePtSettlementExists(updateReqVO.getId());
+        // 更新
+        PtSettlementDO updateObj = BeanUtils.toBean(updateReqVO, PtSettlementDO.class);
+        ptSettlementMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deletePtSettlement(Long id) {
+        // 校验存在
+        validatePtSettlementExists(id);
+        // 删除
+        ptSettlementMapper.deleteById(id);
+    }
+
+    private void validatePtSettlementExists(Long id) {
+        if (ptSettlementMapper.selectById(id) == null) {
+            throw exception(PT_SETTLEMENT_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public PtSettlementDO getPtSettlement(Long id) {
+        return ptSettlementMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<PtSettlementDO> getPtSettlementPage(AppPtSettlementPageReqVO pageReqVO) {
+        return ptSettlementMapper.selectPage(pageReqVO);
+    }
+
+}

+ 53 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/shopsettlement/ShopSettlementService.java

@@ -0,0 +1,53 @@
+package cn.newfeifan.mall.module.trade.service.shopsettlement;
+
+import javax.validation.*;
+import cn.newfeifan.mall.module.trade.controller.app.shopsettlement.vo.*;
+import cn.newfeifan.mall.module.trade.dal.dataobject.shopsettlement.ShopSettlementDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+/**
+ * 订单结算信息表,记录店铺的结算信息 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface ShopSettlementService {
+
+    /**
+     * 创建订单结算信息表,记录店铺的结算信息
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createShopSettlement(@Valid AppShopSettlementSaveReqVO createReqVO);
+
+    /**
+     * 更新订单结算信息表,记录店铺的结算信息
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateShopSettlement(@Valid AppShopSettlementSaveReqVO updateReqVO);
+
+    /**
+     * 删除订单结算信息表,记录店铺的结算信息
+     *
+     * @param id 编号
+     */
+    void deleteShopSettlement(Long id);
+
+    /**
+     * 获得订单结算信息表,记录店铺的结算信息
+     *
+     * @param id 编号
+     * @return 订单结算信息表,记录店铺的结算信息
+     */
+    ShopSettlementDO getShopSettlement(Long id);
+
+    /**
+     * 获得订单结算信息表,记录店铺的结算信息分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 订单结算信息表,记录店铺的结算信息分页
+     */
+    PageResult<ShopSettlementDO> getShopSettlementPage(AppShopSettlementPageReqVO pageReqVO);
+
+}

+ 70 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/shopsettlement/ShopSettlementServiceImpl.java

@@ -0,0 +1,70 @@
+package cn.newfeifan.mall.module.trade.service.shopsettlement;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import cn.newfeifan.mall.module.trade.controller.app.shopsettlement.vo.*;
+import cn.newfeifan.mall.module.trade.dal.dataobject.shopsettlement.ShopSettlementDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+
+import cn.newfeifan.mall.module.trade.dal.mysql.shopsettlement.ShopSettlementMapper;
+
+import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.module.trade.enums.ErrorCodeConstants.*;
+
+/**
+ * 订单结算信息表,记录店铺的结算信息 Service 实现类
+ *
+ * @author 非繁人
+ */
+@Service
+@Validated
+public class ShopSettlementServiceImpl implements ShopSettlementService {
+
+    @Resource
+    private ShopSettlementMapper shopSettlementMapper;
+
+    @Override
+    public Long createShopSettlement(AppShopSettlementSaveReqVO createReqVO) {
+        // 插入
+        ShopSettlementDO shopSettlement = BeanUtils.toBean(createReqVO, ShopSettlementDO.class);
+        shopSettlementMapper.insert(shopSettlement);
+        // 返回
+        return shopSettlement.getId();
+    }
+
+    @Override
+    public void updateShopSettlement(AppShopSettlementSaveReqVO updateReqVO) {
+        // 校验存在
+        validateShopSettlementExists(updateReqVO.getId());
+        // 更新
+        ShopSettlementDO updateObj = BeanUtils.toBean(updateReqVO, ShopSettlementDO.class);
+        shopSettlementMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteShopSettlement(Long id) {
+        // 校验存在
+        validateShopSettlementExists(id);
+        // 删除
+        shopSettlementMapper.deleteById(id);
+    }
+
+    private void validateShopSettlementExists(Long id) {
+        if (shopSettlementMapper.selectById(id) == null) {
+            throw exception(SHOP_SETTLEMENT_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public ShopSettlementDO getShopSettlement(Long id) {
+        return shopSettlementMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<ShopSettlementDO> getShopSettlementPage(AppShopSettlementPageReqVO pageReqVO) {
+        return shopSettlementMapper.selectPage(pageReqVO);
+    }
+
+}

+ 12 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/resources/mapper/ordersettlement/OrderSettlementMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.trade.dal.mysql.ordersettlement.OrderSettlementMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/resources/mapper/ptsettlement/PtSettlementMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.trade.dal.mysql.ptsettlement.PtSettlementMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/resources/mapper/shopsettlement/ShopSettlementMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.newfeifan.mall.module.trade.dal.mysql.shopsettlement.ShopSettlementMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 1 - 1
feifan-module-member/feifan-module-member-api/src/main/java/cn/newfeifan/mall/module/member/enums/DictTypeConstants.java

@@ -18,7 +18,7 @@ public interface DictTypeConstants {
     String DISTRI_ORDER_PERCENTAGE  = "distri:orderPercentage";
 
     //默认头像
-    String DEFAULT_AVATAR = "https://pt.letcgo.com/admin-api/infra/file/23/get/f9deb6a0e38c17d3d416da8b5285412dee1360e53e5b094f9397094be4252e66.png";
+    String DEFAULT_AVATAR = "https://hkpt.letcgo.com/admin-api/infra/file/23/get/f9deb6a0e38c17d3d416da8b5285412dee1360e53e5b094f9397094be4252e66.png";
 
     Long MOBILE_REGISTER_MAX = 10L;
 

+ 6 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/admin/user/vo/MemberUserRespVO.java

@@ -43,4 +43,10 @@ public class MemberUserRespVO extends MemberUserBaseVO {
     @Schema(description = "用户经验值", requiredMode  = Schema.RequiredMode.REQUIRED, example = "200")
     private Integer experience;
 
+    @Schema(description = "新增业绩")
+    private Long addAmount;
+
+    @Schema(description = "存余业绩")
+    private Long surplusAmount;
+
 }

+ 9 - 9
feifan-server/src/main/resources/application-prod.yaml

@@ -47,14 +47,14 @@ spring:
       primary: master
       datasource:
         master:
-          name: new-letcgo
-          url: jdbc:mysql://120.78.5.233:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
+          name: new-feifan
+          url: jdbc:mysql://120.78.5.233:3307/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
           username: root
           password: PA55W0RD
         slave: # 模拟从库,可根据自己需要修改
-          name: new-letcgo
+          name: new-feifan
           lazy: true # 开启懒加载,保证启动速度
-          url: jdbc:mysql://120.78.5.233:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
+          url: jdbc:mysql://120.78.5.233:3307/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
           username: root
           password: PA55W0RD
 
@@ -62,8 +62,8 @@ spring:
   redis:
     host: 47.107.29.61 # 地址
     port: 6379 # 端口
-    database: 0 # 数据库索引
-#    password: 123456 # 密码,建议生产环境开启
+    database: 2 # 数据库索引
+    password: FF@QWQiopY.1 # 密码,建议生产环境开启
 
 --- #################### 定时任务相关配置 ####################
 
@@ -146,7 +146,7 @@ spring:
     admin:
       # Spring Boot Admin Client 客户端的相关配置
       client:
-        url: http://47.107.28.221:${server.port}/${spring.boot.admin.context-path} # 设置 Spring Boot Admin Server 地址
+        url: http://47.107.29.61:${server.port}/${spring.boot.admin.context-path} # 设置 Spring Boot Admin Server 地址
         instance:
           service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME]
       # Spring Boot Admin Server 服务端的相关配置
@@ -220,8 +220,8 @@ feifan:
       - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求
       - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求
   pay:
-    order-notify-url: http://zxgz.newfeifan.cn/admin-api/pay/notify/order # 支付渠道的【支付】回调地址
-    refund-notify-url: http://zxgz.newfeifan.cn/admin-api/pay/notify/refund # 支付渠道的【退款】回调地址
+    order-notify-url: https://hk.letcgo.com/admin-api/pay/notify/order # 支付渠道的【支付】回调地址
+    refund-notify-url: https://hk.letcgo.com/admin-api/pay/notify/refund # 支付渠道的【退款】回调地址
   access-log: # 访问日志的配置项
     enable: false
   error-code: # 错误码相关配置项

+ 1 - 1
feifan-server/src/main/resources/application.yaml

@@ -3,7 +3,7 @@ spring:
     name: feifan-server
 
   profiles:
-    active: local
+    active: prod
 
   main:
     allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。