Browse Source

剩余理赔限额日志表

xdd 2 weeks ago
parent
commit
a52908fa59

+ 62 - 0
fs-service-system/src/main/java/com/fs/store/domain/RemainingClaimLimitLog.java

@@ -0,0 +1,62 @@
+package com.fs.store.domain;
+
+import lombok.Data;
+import lombok.Builder;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 剩余理赔限额日志表
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class RemainingClaimLimitLog implements Cloneable{
+    /**
+     * 主键ID
+     */
+    private Integer id;
+
+    /**
+     * 订单id
+     */
+    private Long orderId;
+
+    /**
+     * 订单金额
+     */
+    private BigDecimal orderMoney;
+
+    /**
+     * 金额
+     */
+    private BigDecimal money;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 0购买 1退款
+     */
+    private Integer status;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    @Override
+    public RemainingClaimLimitLog clone() {
+        try {
+            RemainingClaimLimitLog clone = (RemainingClaimLimitLog) super.clone();
+            return clone;
+        } catch (CloneNotSupportedException e) {
+            throw new AssertionError();
+        }
+    }
+}

+ 52 - 0
fs-service-system/src/main/java/com/fs/store/mapper/RemainingClaimLimitLogMapper.java

@@ -0,0 +1,52 @@
+package com.fs.store.mapper;
+
+import com.fs.store.domain.RemainingClaimLimitLog;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+
+/**
+ * 剩余理赔限额日志Mapper
+ */
+@Mapper
+public interface RemainingClaimLimitLogMapper {
+
+    /**
+     * 根据ID查询
+     */
+    @Select("SELECT * FROM fs_remaining_claim_limit_log WHERE id = #{id}")
+    RemainingClaimLimitLog selectById(Integer id);
+
+    /**
+     * 根据订单ID查询
+     */
+    @Select("SELECT * FROM fs_remaining_claim_limit_log WHERE order_id = #{orderId} and user_id=#{userId} and status=0 limit 1")
+    RemainingClaimLimitLog selectByOrderId(@Param("orderId") Long orderId, @Param("userId") Long userId);
+
+    /**
+     * 根据用户ID查询
+     */
+    @Select("SELECT * FROM fs_remaining_claim_limit_log WHERE user_id = #{userId}")
+    List<RemainingClaimLimitLog> selectByUserId(Integer userId);
+
+    /**
+     * 插入记录
+     */
+    @Insert("INSERT INTO fs_remaining_claim_limit_log(order_id, order_money, money, user_id, status, create_time) " +
+            "VALUES(#{orderId}, #{orderMoney}, #{money}, #{userId}, #{status}, #{createTime})")
+    @Options(useGeneratedKeys = true, keyProperty = "id")
+    int insert(RemainingClaimLimitLog record);
+
+    /**
+     * 更新记录
+     */
+    @Update("UPDATE fs_remaining_claim_limit_log SET " +
+            "order_id = #{orderId}, " +
+            "order_money = #{orderMoney}, " +
+            "money = #{money}, " +
+            "user_id = #{userId}, " +
+            "status = #{status}, " +
+            "create_time = #{createTime} " +
+            "WHERE id = #{id}")
+    int update(RemainingClaimLimitLog record);
+}

+ 1 - 1
fs-service-system/src/main/java/com/fs/store/service/impl/FsPrescribeServiceImpl.java

@@ -274,7 +274,7 @@ public class FsPrescribeServiceImpl implements IFsPrescribeService
         // 医生名称
         param.setDoctorName(fsPrescribe.getDoctorName());
         // 订单总价
-        param.setTotalPrice(fsStoreOrder.getTotalPrice());
+        param.setTotalPrice(fsStoreOrder.getPayMoney());
         param.setAuditDoctor(fsPrescribe.getAuditDoctor());
         param.setDrugDoctorUrl(fsSysConfig.getDrugDoctorSignImgUrl());
         param.setUrl(fsSysConfig.getDoctorSignImgUrl());

+ 31 - 4
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreAfterSalesServiceImpl.java

@@ -33,8 +33,7 @@ import com.fs.huifuPay.domain.HuiFuRefundResult;
 import com.fs.huifuPay.dto.*;
 import com.fs.huifuPay.sdk.opps.core.request.V2TradePaymentScanpayRefundRequest;
 import com.fs.huifuPay.service.HuiFuService;
-import com.fs.store.mapper.FsStoreDeliversMapper;
-import com.fs.store.mapper.FsWarehousesMapper;
+import com.fs.store.mapper.*;
 import com.fs.tzBank.TzBankService;
 import com.fs.pay.pay.domain.RefundResult;
 import com.fs.pay.pay.service.PayService;
@@ -44,7 +43,6 @@ import com.fs.store.dto.StoreOrderProductDTO;
 import com.fs.store.enums.AfterSalesStatusEnum;
 import com.fs.store.enums.AfterStatusEnum;
 import com.fs.store.enums.OrderInfoEnum;
-import com.fs.store.mapper.FsStoreOrderItemMapper;
 import com.fs.store.param.*;
 import com.fs.store.service.*;
 import com.fs.store.vo.FsStoreAfterSalesQueryVO;
@@ -61,7 +59,6 @@ import org.springframework.aop.framework.AopContext;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.EnableAspectJAutoProxy;
 import org.springframework.stereotype.Service;
-import com.fs.store.mapper.FsStoreAfterSalesMapper;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
@@ -212,6 +209,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService
         notAllowRefundStatusSet.add(-2);
         notAllowRefundStatusSet.add(-3);
         notAllowRefundStatusSet.add(0);
+        notAllowRefundStatusSet.add(2);
         notAllowRefundStatusSet.add(3);
         if(notAllowRefundStatusSet.contains(order.getStatus())){
             throw new CustomException("该订单不可申请售后");
@@ -604,6 +602,11 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService
         IFsStoreAfterSalesService fsStoreAfterSalesService = (IFsStoreAfterSalesService) AopContext.currentProxy();
         return fsStoreAfterSalesService.refundStoreMoney(param);
     }
+
+    @Autowired
+    private FsUserMapper fsUserMapper;
+    @Autowired
+    private RemainingClaimLimitLogMapper remainingClaimLimitLogMapper;
     @Override
     @Transactional(rollbackFor = Throwable.class,propagation = Propagation.REQUIRED)
     public R refundStoreMoney(FsStoreAfterSalesRefundParam param){
@@ -759,6 +762,30 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService
             userService.subTuiMoney(order);
         }
 
+        // 理赔额度金额加回去
+        Long userId = order.getUserId();
+        FsUser fsUser = fsUserMapper.selectFsUserByIdForUpdate(userId);
+        RemainingClaimLimitLog log = remainingClaimLimitLogMapper.selectByOrderId(order.getId(),userId);
+        if(log == null){
+            throw new RuntimeException(String.format("当前用户的订单购买记录没有找到!订单id:%d 用户:%d",order.getId(),userId));
+        }
+
+        if(fsUser.getRemainingClaimLimit() != null) {
+            if(log.getMoney() != null) {
+                fsUser.setRemainingClaimLimit(fsUser.getRemainingClaimLimit().add(log.getMoney()));
+                fsUserMapper.updateFsUser(fsUser);
+
+                RemainingClaimLimitLog remainingClaimLimitLog = new RemainingClaimLimitLog();
+                remainingClaimLimitLog.setId(null);
+                remainingClaimLimitLog.setStatus(1);
+                remainingClaimLimitLog.setOrderId(order.getId());
+                remainingClaimLimitLog.setUserId(order.getUserId());
+                remainingClaimLimitLog.setOrderMoney(order.getPayMoney());
+                remainingClaimLimitLog.setMoney(log.getMoney());
+                remainingClaimLimitLog.setCreateTime(new Date());
+                remainingClaimLimitLogMapper.insert(remainingClaimLimitLog);
+            }
+        }
 
         return R.ok();
     }

+ 44 - 3
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderServiceImpl.java

@@ -1792,10 +1792,12 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         return fsStoreOrderMapper.selectDeliverPendingData();
     }
 
+    @Autowired
+    private RemainingClaimLimitLogMapper remainingClaimLimitLogMapper;
     @Override
     @Transactional(rollbackFor = Throwable.class,propagation = Propagation.REQUIRED)
     //类型1支付回调 类型2货到付款
-    public synchronized String  payConfirm(Integer type,Long orderId,String payCode,String tradeNo,String bankTransactionId,String bankSerialNo) {
+    public synchronized String payConfirm(Integer type,Long orderId,String payCode,String tradeNo,String bankTransactionId,String bankSerialNo) {
         //支付订单
         try {
             FsStoreOrder order=null;
@@ -1891,12 +1893,25 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             if (fsUser == null) {
                 throw new RuntimeException("用户不存在");
             }
-            int i = fsUser.getRemainingClaimLimit().compareTo(order.getTotalPrice());
+            int i = fsUser.getRemainingClaimLimit().compareTo(order.getPayMoney());
+            BigDecimal money;
             if(i>=0) {
-                fsUser.setRemainingClaimLimit(fsUser.getRemainingClaimLimit().subtract(order.getTotalPrice()));
+                fsUser.setRemainingClaimLimit(fsUser.getRemainingClaimLimit().subtract(order.getPayMoney()));
+                money = order.getPayMoney();
             } else {
                 fsUser.setRemainingClaimLimit(BigDecimal.ZERO);
+                money = BigDecimal.ZERO;
             }
+            RemainingClaimLimitLog log = new RemainingClaimLimitLog();
+            log.setOrderId(order.getId());
+            log.setOrderMoney(order.getPayMoney());
+            log.setMoney(money);
+            log.setStatus(0);
+            log.setUserId(order.getUserId());
+            log.setCreateTime(new Date());
+
+            remainingClaimLimitLogMapper.insert(log);
+
             fsUserMapper.updateFsUser(fsUser);
         }
         catch (Exception e){
@@ -2427,6 +2442,32 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                     best.refundOrder(payProcessContext);
                 }
             }
+
+
+            // 理赔额度金额加回去
+            Long userId = order.getUserId();
+            FsUser fsUser = fsUserMapper.selectFsUserByIdForUpdate(userId);
+            RemainingClaimLimitLog log = remainingClaimLimitLogMapper.selectByOrderId(order.getId(),userId);
+            if(log == null){
+                throw new RuntimeException(String.format("当前用户的订单购买记录没有找到!订单id:%d 用户:%d",order.getId(),userId));
+            }
+
+            if(fsUser.getRemainingClaimLimit() != null) {
+                if(log.getMoney() != null) {
+                    fsUser.setRemainingClaimLimit(fsUser.getRemainingClaimLimit().add(log.getMoney()));
+                    fsUserMapper.updateFsUser(fsUser);
+
+                    RemainingClaimLimitLog remainingClaimLimitLog = new RemainingClaimLimitLog();
+                    remainingClaimLimitLog.setId(null);
+                    remainingClaimLimitLog.setStatus(1);
+                    remainingClaimLimitLog.setOrderId(order.getId());
+                    remainingClaimLimitLog.setUserId(order.getUserId());
+                    remainingClaimLimitLog.setOrderMoney(order.getPayMoney());
+                    remainingClaimLimitLog.setMoney(log.getMoney());
+                    remainingClaimLimitLogMapper.insert(remainingClaimLimitLog);
+                }
+            }
+
         }
         orderStatusService.create(order.getId(), OrderLogEnum.REFUND_ORDER_SUCCESS.getValue(),
                 OrderLogEnum.REFUND_ORDER_SUCCESS.getDesc());

+ 8 - 0
fs-user-app/src/main/java/com/fs/app/controller/WxUserController.java

@@ -77,6 +77,7 @@ public class WxUserController extends AppBaseController{
                         userMap.setUserId(checkPhone.getUserId());
                         userMap.setUpdateTime(new DateTime());
                         userMap.setLastIp(ip);
+                        userMap.setPhone(phoneNoInfo.getPhoneNumber());
                         userService.updateFsUser(userMap);
                     }
                     else{
@@ -129,8 +130,13 @@ public class WxUserController extends AppBaseController{
             return R.error("code不存在");
         }
         final WxMaService wxService = WxMaConfiguration.getMaService(maProperties.getConfigs().get(0).getAppid());
+
         try {
             WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(param.getCode());
+
+            // 解密
+            WxMaPhoneNumberInfo phoneNoInfo = wxService.getUserService().getPhoneNoInfo(session.getSessionKey(), param.getEncryptedData(), param.getIv());
+
             // 解密
             FsUser user=userService.selectFsUserByMaOpenId(session.getOpenid());
             String ip = IpUtil.getRequestIp();
@@ -142,6 +148,7 @@ public class WxUserController extends AppBaseController{
                     userMap.setUpdateTime(new DateTime());
                     user.setMaOpenId(session.getOpenid());
                     userMap.setLastIp(ip);
+                    userMap.setPhone(phoneNoInfo.getPhoneNumber());
                     userService.updateFsUser(userMap);
                 }
                 else{
@@ -155,6 +162,7 @@ public class WxUserController extends AppBaseController{
                     user.setLastIp(ip);
                     user.setIsWeixinAuth(0);
                     user.setCreateTime(new Date());
+                    user.setPhone(phoneNoInfo.getPhoneNumber());
                     if(StringUtils.isNotEmpty(session.getUnionid())){
                         user.setUnionId(session.getUnionid());
                     }