|
@@ -2,9 +2,12 @@ package cn.newfeifan.mall.module.distri.service.integral;
|
|
|
|
|
|
import cn.newfeifan.mall.module.distri.controller.admin.ptprofitlog.vo.PtProfitLogSaveReqVO;
|
|
|
import cn.newfeifan.mall.module.distri.dal.dataobject.integral.IntegralDO;
|
|
|
+import cn.newfeifan.mall.module.distri.dal.dataobject.orderpercentage.OrderPercentageDO;
|
|
|
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofitlog.PtProfitLogDO;
|
|
|
import cn.newfeifan.mall.module.distri.dal.mysql.integral.IntegralMapper;
|
|
|
import cn.newfeifan.mall.module.distri.dal.mysql.ptprofit.PtProfitMapper;
|
|
|
import cn.newfeifan.mall.module.distri.enums.CaclEnum;
|
|
|
+import cn.newfeifan.mall.module.distri.service.orderpercentage.OrderPercentageService;
|
|
|
import cn.newfeifan.mall.module.distri.service.ptprofitlog.PtProfitLogService;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
@@ -21,133 +24,95 @@ import java.util.Map;
|
|
|
@Validated
|
|
|
public class IntegralServiceImpl implements IntegralService {
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
@Resource
|
|
|
private PtProfitMapper ptProfitMapper;
|
|
|
-
|
|
|
@Resource
|
|
|
private IntegralMapper integralMapper;
|
|
|
-
|
|
|
@Resource
|
|
|
private PtProfitLogService ptProfitLogService;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ @Resource
|
|
|
+ private OrderPercentageService orderPercentageService;
|
|
|
|
|
|
|
|
|
* add by Ben
|
|
|
* 修改用户积分
|
|
|
*
|
|
|
- * @param userId 要修改积分的用户
|
|
|
- * @param caclEnum 导致积分变化的事件类型枚举
|
|
|
- * @param amount 用户可用积分变化金额,可为负数
|
|
|
+ * @param userId 要修改积分的用户
|
|
|
+ * @param caclEnum 导致积分变化的事件类型枚举
|
|
|
+ * @param amount 用户可用积分变化金额,可为负数
|
|
|
* @param freezeAmount 用户冻结积分变化金额,可为负数
|
|
|
- * @return 返回是否执行成功。执行失败,通常是就是用户积分不足,没积分抵扣
|
|
|
*/
|
|
|
@Override
|
|
|
- public Boolean updateUserIntegral(Long generateUserId,//导致产生积分变动的用户ID
|
|
|
- Long userId, CaclEnum caclEnum, Long amount, Long freezeAmount,
|
|
|
- Long tradeOrderId,
|
|
|
- String OrderNum
|
|
|
- ) {
|
|
|
- Boolean success = null;
|
|
|
-
|
|
|
+ public void updateUserIntegral(Long generateUserId,//导致产生积分变动的用户ID
|
|
|
+ Long userId, CaclEnum caclEnum, Long amount, Long freezeAmount,
|
|
|
+ Long tradeOrderId,
|
|
|
+ String orderNum
|
|
|
+ ) {
|
|
|
|
|
|
- int effectRowNum = ptProfitMapper.updateUserIntegral(amount,amount,freezeAmount,freezeAmount,userId);
|
|
|
-
|
|
|
- if (effectRowNum==1) {
|
|
|
- success = true;
|
|
|
+ IntegralDO integralDO = integralMapper.selectOne(IntegralDO::getUserId, userId);
|
|
|
|
|
|
-
|
|
|
- Long afterAmount = null;
|
|
|
-
|
|
|
- Long afterFreezeAmount = null;
|
|
|
+
|
|
|
+ integralDO.setCurrentQuota(integralDO.getCurrentQuota() + amount);
|
|
|
|
|
|
-
|
|
|
- Map<String, Object> map = ptProfitMapper.selectUserIntegral(userId);
|
|
|
- Object currentQuotaObj = map.get("current_quota");
|
|
|
- Object freezeQuotaObj = map.get("freeze_quota");
|
|
|
+
|
|
|
+ Long ancestorQuotaAmount = 0L;
|
|
|
+
|
|
|
+ if (caclEnum.getType().equals(CaclEnum.ORDER_REFUND_INTEGRAL_ANCESTER.getType())) {
|
|
|
|
|
|
- afterAmount = (Long)currentQuotaObj;
|
|
|
- afterFreezeAmount = (Long)freezeQuotaObj;
|
|
|
+ PtProfitLogDO profitLog = ptProfitLogService.selectProfitLogByUserIdWithProfitStatus(userId, CaclEnum.RECOMMENDED_PERSON_QUOTA.getType(), orderNum);
|
|
|
|
|
|
- if(afterAmount<0||afterFreezeAmount<0){
|
|
|
- throw new RuntimeException("用户钱包为负数:用户IO为"+userId+"的用户可用钱包为"+afterAmount+",冻结钱包为"+afterFreezeAmount);
|
|
|
+ if(profitLog.getAncestorQuotaAmount() != null && profitLog.getAncestorQuotaAmount() != 0){
|
|
|
+ ancestorQuotaAmount = profitLog.getAncestorQuotaAmount();
|
|
|
}
|
|
|
+ integralDO.setCurrentQuota(integralDO.getCurrentQuota() + ancestorQuotaAmount);
|
|
|
+
|
|
|
+ integralDO.setHighQuota(integralDO.getHighQuota() - amount - ancestorQuotaAmount);
|
|
|
+ integralDO.setAncestorQuota(integralDO.getAncestorQuota() + amount + ancestorQuotaAmount);
|
|
|
+ }
|
|
|
+
|
|
|
+ integralMapper.updateById(integralDO);
|
|
|
+
|
|
|
+
|
|
|
+ Long afterAmount = null;
|
|
|
+
|
|
|
+ Long afterFreezeAmount = null;
|
|
|
|
|
|
-
|
|
|
- ptProfitLogService.addMessage(generateUserId,userId, caclEnum, amount, afterAmount,
|
|
|
- freezeAmount, afterFreezeAmount,null,tradeOrderId,OrderNum);
|
|
|
+
|
|
|
+ Map<String, Object> map = ptProfitMapper.selectUserIntegral(userId);
|
|
|
+ Object currentQuotaObj = map.get("current_quota");
|
|
|
+ Object freezeQuotaObj = map.get("freeze_quota");
|
|
|
|
|
|
- }else if(effectRowNum<1){
|
|
|
- success = false;
|
|
|
- } else if (effectRowNum>1) {
|
|
|
-
|
|
|
- throw new RuntimeException("用户IO为"+userId+"的用户钱包不只一个!");
|
|
|
+ afterAmount = (Long) currentQuotaObj;
|
|
|
+ afterFreezeAmount = (Long) freezeQuotaObj;
|
|
|
+
|
|
|
+
|
|
|
+ if (caclEnum.getType().equals(CaclEnum.ORDER_REFUND_INTEGRAL_ANCESTER.getType())) {
|
|
|
+ OrderPercentageDO orderPercentageDO = orderPercentageService.queryStatus();
|
|
|
+ ptProfitLogService.addMessage(generateUserId, userId, caclEnum, amount + ancestorQuotaAmount, afterAmount,
|
|
|
+ freezeAmount, afterFreezeAmount, null, tradeOrderId, orderNum, -amount - ancestorQuotaAmount, integralDO.getHighQuota() + Long.parseLong(orderPercentageDO.getBaseMaxQuota()));
|
|
|
+ } else {
|
|
|
+ ptProfitLogService.addMessage(generateUserId, userId, caclEnum, amount, afterAmount,
|
|
|
+ freezeAmount, afterFreezeAmount, null, tradeOrderId, orderNum, null, null);
|
|
|
}
|
|
|
|
|
|
- return success;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void updateIntegralFreezeHighQuota(Long generateUserId, Long userId, CaclEnum caclEnum, Long totalFreezeHighQuota, Long tradeOrderId, String orderNum) {
|
|
|
- IntegralDO integralDO = integralMapper.selectOne(IntegralDO::getUserId,userId);
|
|
|
- integralDO.setFreezeHighQuota(integralDO.getFreezeHighQuota() - totalFreezeHighQuota);
|
|
|
+ IntegralDO integralDO = integralMapper.selectOne(IntegralDO::getUserId, userId);
|
|
|
+
|
|
|
+ integralDO.setHighQuota(integralDO.getHighQuota() - totalFreezeHighQuota);
|
|
|
+ integralDO.setHighQuotaTotal(integralDO.getHighQuotaTotal() - totalFreezeHighQuota);
|
|
|
integralMapper.updateById(integralDO);
|
|
|
|
|
|
+ OrderPercentageDO orderPercentageDO = orderPercentageService.queryStatus();
|
|
|
+
|
|
|
|
|
|
PtProfitLogSaveReqVO profitLogSaveReqVO = PtProfitLogSaveReqVO.builder()
|
|
|
- .freezeHighQuota(-totalFreezeHighQuota)
|
|
|
- .afterFreezeHighQuota(integralDO.getFreezeHighQuota())
|
|
|
+
|
|
|
+
|
|
|
+ .maxAvailablePointsAmount(-totalFreezeHighQuota)
|
|
|
+ .afterMaxAvailablePointsAmount(integralDO.getHighQuota() + Long.parseLong(orderPercentageDO.getBaseMaxQuota()))
|
|
|
.userId(userId)
|
|
|
.generateUserId(generateUserId)
|
|
|
.profitStatus(caclEnum.getType())
|