Explorar o código

分账生成代码

skyline hai 1 ano
pai
achega
a587a89ee4
Modificáronse 19 ficheiros con 317 adicións e 25 borrados
  1. 18 0
      car-wash-admin/src/main/java/com/kym/admin/controller/DailyStatController.java
  2. 3 3
      car-wash-admin/src/main/java/com/kym/admin/controller/InvestorInfoController.java
  3. 38 0
      car-wash-entity/src/main/java/com/kym/entity/MerchantStation.java
  4. 53 0
      car-wash-entity/src/main/java/com/kym/entity/SplitRecord.java
  5. 1 0
      car-wash-entity/src/main/java/com/kym/entity/queryParams/WxLoginParams.java
  6. 16 0
      car-wash-mapper/src/main/java/com/kym/mapper/MerchantStationMapper.java
  7. 16 0
      car-wash-mapper/src/main/java/com/kym/mapper/SplitRecordMapper.java
  8. 17 0
      car-wash-mapper/src/main/resources/mappers/MerchantStationMapper.xml
  9. 20 0
      car-wash-mapper/src/main/resources/mappers/SplitRecordMapper.xml
  10. 18 0
      car-wash-miniapp/src/main/java/com/kym/admin/controller/MerchantStationController.java
  11. 18 0
      car-wash-miniapp/src/main/java/com/kym/admin/controller/SplitRecordController.java
  12. 16 0
      car-wash-service/src/main/java/com/kym/service/MerchantStationService.java
  13. 16 0
      car-wash-service/src/main/java/com/kym/service/SplitRecordService.java
  14. 3 22
      car-wash-service/src/main/java/com/kym/service/cache/KymCache.java
  15. 35 0
      car-wash-service/src/main/java/com/kym/service/impl/MerchantStationServiceImpl.java
  16. 20 0
      car-wash-service/src/main/java/com/kym/service/impl/SplitRecordServiceImpl.java
  17. 2 0
      car-wash-service/src/main/java/com/kym/service/impl/UserServiceImpl.java
  18. 6 0
      car-wash-service/src/main/java/com/kym/service/impl/WashStationServiceImpl.java
  19. 1 0
      car-wash-service/src/main/java/com/kym/service/wechat/impl/WxPayServiceImpl.java

+ 18 - 0
car-wash-admin/src/main/java/com/kym/admin/controller/DailyStatController.java

@@ -0,0 +1,18 @@
+package com.kym.admin.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 日统计表 前端控制器
+ * </p>
+ *
+ * @author skyline
+ * @since 2025-02-19
+ */
+@RestController
+@RequestMapping("/daily-stat")
+public class DailyStatController {
+
+}

+ 3 - 3
car-wash-admin/src/main/java/com/kym/admin/controller/InvestorInfoController.java

@@ -6,7 +6,7 @@ import com.kym.common.utils.CommUtil;
 import com.kym.entity.InvestorInfo;
 import com.kym.entity.queryParams.CommonQueryParam;
 import com.kym.service.InvestorInfoService;
-import com.kym.service.cache.SysCache;
+import com.kym.service.cache.KymCache;
 import org.springframework.web.bind.annotation.*;
 
 /**
@@ -36,7 +36,7 @@ public class InvestorInfoController {
     @PostMapping("/create")
     R<?> create(@RequestBody InvestorInfo investorInfo) {
         investorInfo.setId(null);
-        investorInfo.setStationName(SysCache.INSTANCE.getStationNameById(investorInfo.getStationId()));
+        investorInfo.setStationName(KymCache.INSTANCE.getStationNameById(investorInfo.getStationId()));
         CommUtil.asserts(investorInfo.getAdminUserId() != null, "请选择关联客户");
         return R.success(investorInfoService.save(investorInfo));
     }
@@ -48,7 +48,7 @@ public class InvestorInfoController {
      */
     @PostMapping("/update")
     R<?> update(@RequestBody InvestorInfo investorInfo) {
-        investorInfo.setStationName(SysCache.INSTANCE.getStationNameById(investorInfo.getStationId()));
+        investorInfo.setStationName(KymCache.INSTANCE.getStationNameById(investorInfo.getStationId()));
         CommUtil.asserts(investorInfo.getAdminUserId() != null, "请选择关联客户");
         return R.success(investorInfoService.updateById(investorInfo));
     }

+ 38 - 0
car-wash-entity/src/main/java/com/kym/entity/MerchantStation.java

@@ -0,0 +1,38 @@
+package com.kym.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.kym.entity.BaseEntity;
+import java.io.Serializable;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 商户站点表
+ * </p>
+ *
+ * @author skyline
+ * @since 2025-02-25
+ */
+@Getter
+@Setter
+@TableName("t_merchant_station")
+public class MerchantStation extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 商户id
+     */
+    private Long merchantId;
+
+    /**
+     * 站点id
+     */
+    private String stationId;
+
+    /**
+     * 状态:0无效,1有效
+     */
+    private Integer status;
+}

+ 53 - 0
car-wash-entity/src/main/java/com/kym/entity/SplitRecord.java

@@ -0,0 +1,53 @@
+package com.kym.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.kym.entity.BaseEntity;
+import java.io.Serializable;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 平台分账记录表
+ * </p>
+ *
+ * @author skyline
+ * @since 2025-02-24
+ */
+@Getter
+@Setter
+@TableName("t_split_record")
+public class SplitRecord extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 出账账户ID
+     */
+    private Long fromAccount;
+
+    /**
+     * 入账账户ID
+     */
+    private Long toAccount;
+
+    /**
+     * 分账交易流水号
+     */
+    private String tradeNo;
+
+    /**
+     * 分账交易金额(分)
+     */
+    private Integer amount;
+
+    /**
+     * 交易类型(1-充值 2-消费 3-解冻 4-退款)
+     */
+    private Integer type;
+
+    /**
+     * 状态(0-处理中 1-成功 2-失败)
+     */
+    private Integer status;
+}

+ 1 - 0
car-wash-entity/src/main/java/com/kym/entity/queryParams/WxLoginParams.java

@@ -16,4 +16,5 @@ public class WxLoginParams {
     private String phoneCode;
     private String avatar;
     private String nickname;
+    private String stationId;
 }

+ 16 - 0
car-wash-mapper/src/main/java/com/kym/mapper/MerchantStationMapper.java

@@ -0,0 +1,16 @@
+package com.kym.mapper;
+
+import com.kym.entity.MerchantStation;
+import com.kym.mapper.mybatisplus.MyBaseMapper;
+
+/**
+ * <p>
+ * 商户站点表 Mapper 接口
+ * </p>
+ *
+ * @author skyline
+ * @since 2025-02-25
+ */
+public interface MerchantStationMapper extends MyBaseMapper<MerchantStation> {
+
+}

+ 16 - 0
car-wash-mapper/src/main/java/com/kym/mapper/SplitRecordMapper.java

@@ -0,0 +1,16 @@
+package com.kym.mapper;
+
+import com.kym.entity.SplitRecord;
+import com.kym.mapper.mybatisplus.MyBaseMapper;
+
+/**
+ * <p>
+ * 平台分账记录表 Mapper 接口
+ * </p>
+ *
+ * @author skyline
+ * @since 2025-02-24
+ */
+public interface SplitRecordMapper extends MyBaseMapper<SplitRecord> {
+
+}

+ 17 - 0
car-wash-mapper/src/main/resources/mappers/MerchantStationMapper.xml

@@ -0,0 +1,17 @@
+<?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="com.kym.mapper.MerchantStationMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.kym.entity.MerchantStation">
+        <result column="merchant_id" property="merchantId" />
+        <result column="station_id" property="stationId" />
+        <result column="status" property="status" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        merchant_id, station_id, status
+    </sql>
+
+</mapper>

+ 20 - 0
car-wash-mapper/src/main/resources/mappers/SplitRecordMapper.xml

@@ -0,0 +1,20 @@
+<?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="com.kym.mapper.SplitRecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.kym.entity.SplitRecord">
+        <result column="from_account" property="fromAccount" />
+        <result column="to_account" property="toAccount" />
+        <result column="trade_no" property="tradeNo" />
+        <result column="amount" property="amount" />
+        <result column="type" property="type" />
+        <result column="status" property="status" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        from_account, to_account, trade_no, amount, type, status
+    </sql>
+
+</mapper>

+ 18 - 0
car-wash-miniapp/src/main/java/com/kym/admin/controller/MerchantStationController.java

@@ -0,0 +1,18 @@
+package com.kym.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 商户站点表 前端控制器
+ * </p>
+ *
+ * @author skyline
+ * @since 2025-02-25
+ */
+@RestController
+@RequestMapping("/merchant-station")
+public class MerchantStationController {
+
+}

+ 18 - 0
car-wash-miniapp/src/main/java/com/kym/admin/controller/SplitRecordController.java

@@ -0,0 +1,18 @@
+package com.kym.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 平台分账记录表 前端控制器
+ * </p>
+ *
+ * @author skyline
+ * @since 2025-02-24
+ */
+@RestController
+@RequestMapping("/split-record")
+public class SplitRecordController {
+
+}

+ 16 - 0
car-wash-service/src/main/java/com/kym/service/MerchantStationService.java

@@ -0,0 +1,16 @@
+package com.kym.service;
+
+import com.kym.entity.MerchantStation;
+import com.kym.service.mybatisplus.MyBaseService;
+
+/**
+ * <p>
+ * 商户站点表 服务类
+ * </p>
+ *
+ * @author skyline
+ * @since 2025-02-25
+ */
+public interface MerchantStationService extends MyBaseService<MerchantStation> {
+
+}

+ 16 - 0
car-wash-service/src/main/java/com/kym/service/SplitRecordService.java

@@ -0,0 +1,16 @@
+package com.kym.service;
+
+import com.kym.entity.SplitRecord;
+import com.kym.service.mybatisplus.MyBaseService;
+
+/**
+ * <p>
+ * 平台分账记录表 服务类
+ * </p>
+ *
+ * @author skyline
+ * @since 2025-02-24
+ */
+public interface SplitRecordService extends MyBaseService<SplitRecord> {
+
+}

+ 3 - 22
car-wash-service/src/main/java/com/kym/service/cache/KymCache.java

@@ -3,11 +3,7 @@ package com.kym.service.cache;
 import cn.hutool.extra.spring.SpringUtil;
 import com.kym.common.exception.BusinessException;
 import com.kym.common.utils.CommUtil;
-import com.kym.entity.WashStation;
 import com.kym.entity.common.RedisKeys;
-import com.kym.service.WashStationService;
-import org.springframework.boot.context.event.ApplicationStartedEvent;
-import org.springframework.context.ApplicationListener;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Component;
 
@@ -15,7 +11,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
 
 /**
  * @author skyline
@@ -35,7 +30,7 @@ public enum KymCache {
      *
      * @param map
      */
-    public static void putStationId2MerchantId(Map<String, String> map) {
+    public void putStationId2MerchantId(Map<String, String> map) {
         map.forEach((k, v) -> KymCacheInjector.redisTemplate.opsForValue().set(RedisKeys.STATION_ID_TO_MERCHANT_ID + k, v));
     }
 
@@ -44,7 +39,7 @@ public enum KymCache {
      *
      * @param map
      */
-    public static void putStationId2Name(Map<String, String> map) {
+    public void putStationId2Name(Map<String, String> map) {
         map.forEach((k, v) -> KymCacheInjector.redisTemplate.opsForValue().set(RedisKeys.STATION_ID_TO_NAME + k, v));
     }
 
@@ -120,22 +115,8 @@ public enum KymCache {
 
 
     @Component
-    public static class KymCacheInjector implements ApplicationListener<ApplicationStartedEvent> {
-
+    public static class KymCacheInjector {
         private static final StringRedisTemplate redisTemplate = SpringUtil.getBean(StringRedisTemplate.class);
 
-        private final WashStationService washStationService;
-
-
-        private KymCacheInjector(WashStationService washStationService) {
-            this.washStationService = washStationService;
-        }
-
-        @Override
-        public void onApplicationEvent(ApplicationStartedEvent event) {
-            // 将数据库数据缓存到redis
-
-            putStationId2Name(washStationService.list().stream().collect(Collectors.toMap(WashStation::getStationId, WashStation::getStationName)));
-        }
     }
 }

+ 35 - 0
car-wash-service/src/main/java/com/kym/service/impl/MerchantStationServiceImpl.java

@@ -0,0 +1,35 @@
+package com.kym.service.impl;
+
+import com.kym.entity.MerchantStation;
+import com.kym.mapper.MerchantStationMapper;
+import com.kym.service.MerchantStationService;
+import com.kym.service.cache.KymCache;
+import com.kym.service.mybatisplus.MyBaseServiceImpl;
+import jakarta.annotation.PostConstruct;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 商户站点表 服务实现类
+ * </p>
+ *
+ * @author skyline
+ * @since 2025-02-25
+ */
+@Service
+public class MerchantStationServiceImpl extends MyBaseServiceImpl<MerchantStationMapper, MerchantStation> implements MerchantStationService {
+
+    /**
+     * 初始化缓存站点-商户对应关系
+     */
+    @PostConstruct
+    private void init() {
+        var merchantStationList = list();
+        for (MerchantStation ms : merchantStationList) {
+            KymCache.INSTANCE.putStationId2MerchantId(Map.of(ms.getStationId(), String.valueOf(ms.getId())));
+        }
+    }
+
+}

+ 20 - 0
car-wash-service/src/main/java/com/kym/service/impl/SplitRecordServiceImpl.java

@@ -0,0 +1,20 @@
+package com.kym.service.impl;
+
+import com.kym.entity.SplitRecord;
+import com.kym.mapper.SplitRecordMapper;
+import com.kym.service.SplitRecordService;
+import com.kym.service.mybatisplus.MyBaseServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 平台分账记录表 服务实现类
+ * </p>
+ *
+ * @author skyline
+ * @since 2025-02-24
+ */
+@Service
+public class SplitRecordServiceImpl extends MyBaseServiceImpl<SplitRecordMapper, SplitRecord> implements SplitRecordService {
+
+}

+ 2 - 0
car-wash-service/src/main/java/com/kym/service/impl/UserServiceImpl.java

@@ -121,6 +121,8 @@ public class UserServiceImpl extends MPJBaseServiceImpl<UserMapper, User> implem
                 newUser.setUsername(mobilePhone);
                 newUser.setAvatar(params.getAvatar());
                 newUser.setNickname(params.getNickname());
+                // 用户归属站点 todo 如何在用户注册时
+                newUser.setStationId(params.getStationId());
                 baseMapper.insert(newUser);
                 // 创建用户账户
                 var account = new Account();

+ 6 - 0
car-wash-service/src/main/java/com/kym/service/impl/WashStationServiceImpl.java

@@ -10,7 +10,9 @@ import com.kym.entity.vo.WashStationVo;
 import com.kym.mapper.WashStationMapper;
 import com.kym.service.WashDeviceService;
 import com.kym.service.WashStationService;
+import com.kym.service.cache.KymCache;
 import com.kym.service.mybatisplus.MyBaseServiceImpl;
+import jakarta.annotation.PostConstruct;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
@@ -27,6 +29,10 @@ import java.util.stream.Collectors;
  */
 @Service
 public class WashStationServiceImpl extends MyBaseServiceImpl<WashStationMapper, WashStation> implements WashStationService {
+    @PostConstruct
+    public void init() {
+        KymCache.INSTANCE.putStationId2Name(list().stream().collect(Collectors.toMap(WashStation::getStationId, WashStation::getStationName)));
+    }
 
     private final WashDeviceService washDeviceService;
 

+ 1 - 0
car-wash-service/src/main/java/com/kym/service/wechat/impl/WxPayServiceImpl.java

@@ -378,6 +378,7 @@ public class WxPayServiceImpl implements WxPayService {
 //        if (chargeOrder != null) {
 //            throw new BusinessException("存在未完结的订单,请等待所有订单完结之后重试");
 //        }
+        // todo 洗车未完结订单校验
 
         var account = accountService.getAccountByUserId(userId);
         if (account.getBalance() <= 0) {