Ver código fonte

益寿缘app-优化App奖品创建商城订单逻辑

cgp 1 semana atrás
pai
commit
2e71038d75

+ 5 - 3
fs-service/src/main/java/com/fs/his/service/impl/AppUserRewardServiceImpl.java

@@ -83,7 +83,7 @@ public class AppUserRewardServiceImpl implements IAppUserRewardService {
             log.info("奖品领取成功: rewardsId={}, orderCode={}", rewardsId, result.getOrderCode());
         } else {
             log.error("奖品领取失败: rewardsId={}, reason={}", rewardsId, result.getMessage());
-            throw new CustomException(result.getMessage());
+            throw new CustomException(result.getMessage(),result.getCode());
         }
     }
 
@@ -197,10 +197,12 @@ public class AppUserRewardServiceImpl implements IAppUserRewardService {
 
             // 根据奖品类型设置具体值
             if (appRoleConfig.getCourseRewardType() == 1) { // 红包
-                BigDecimal amount = calculateRewardValue(appRoleConfig, targetDay, true);
+                //BigDecimal amount = calculateRewardValue(appRoleConfig, targetDay, true);
+                BigDecimal amount = appRoleConfig.getCourseRedPacket();
                 reward.setRewardAmount(amount);
             } else if (appRoleConfig.getCourseRewardType() == 2) { // 积分
-                Long points = calculateRewardValue(appRoleConfig, targetDay, false);
+                //Long points = calculateRewardValue(appRoleConfig, targetDay, false);
+                Long points = appRoleConfig.getCourseIntegral().longValue();
                 reward.setRewardPoints(points);
             } else if (appRoleConfig.getCourseRewardType() == 3) { // 实物商品
                 reward.setProductType(appRoleConfig.getCourseProductType());

+ 23 - 8
fs-service/src/main/java/com/fs/his/strategy/RewardResult.java

@@ -8,46 +8,61 @@ import lombok.Data;
 @Data
 public class RewardResult {
     /**
-     * 是否成功
+     * 状态码(200=成功,其他为错误码)
+     */
+    private Integer code;
+
+    /**
+     * 是否成功(兼容旧逻辑)
      */
     private boolean success;
-    
+
     /**
      * 订单号(商品类型使用)
      */
     private String orderCode;
-    
+
     /**
      * 发放金额/数量(红包/积分使用)
      */
     private Long amount;
-    
+
     /**
      * 结果消息
      */
     private String message;
-    
+
     /**
      * 成功静态工厂方法
      */
     public static RewardResult success() {
         RewardResult result = new RewardResult();
+        result.setCode(200);
         result.setSuccess(true);
         return result;
     }
-    
+
     public static RewardResult success(String orderCode) {
         RewardResult result = new RewardResult();
+        result.setCode(200);
         result.setSuccess(true);
         result.setOrderCode(orderCode);
         return result;
     }
-    
+
     /**
-     * 失败静态工厂方法
+     * 失败静态工厂方法(默认错误码400)
      */
     public static RewardResult fail(String message) {
+        return fail(400, message);
+    }
+
+    /**
+     * 失败静态工厂方法(带错误码)
+     */
+    public static RewardResult fail(Integer code, String message) {
         RewardResult result = new RewardResult();
+        result.setCode(code);
         result.setSuccess(false);
         result.setMessage(message);
         return result;

+ 14 - 7
fs-service/src/main/java/com/fs/his/strategy/impl/FirstLoginProductStrategy.java

@@ -12,8 +12,10 @@ import com.fs.his.service.IFsPackageOrderService;
 import com.fs.his.strategy.RewardResult;
 import com.fs.his.strategy.RewardStrategy;
 import com.fs.hisStore.domain.FsStoreOrderScrm;
+import com.fs.hisStore.domain.FsStoreProductScrm;
 import com.fs.hisStore.param.FsStoreOrderCreateParamAppReward;
 import com.fs.hisStore.service.IFsStoreOrderScrmService;
+import com.fs.hisStore.service.IFsStoreProductScrmService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -30,6 +32,9 @@ public class FirstLoginProductStrategy implements RewardStrategy {
 
     @Autowired
     private IFsStoreOrderScrmService storeOrderScrmService;
+
+    @Autowired
+    private IFsStoreProductScrmService storeProductScrmService;
     @Override
     public RewardResult process(FsUserRewards reward) {
         log.info("处理首次登录商品发放: rewardId={}", reward.getId());
@@ -105,19 +110,21 @@ public class FirstLoginProductStrategy implements RewardStrategy {
     }
 
     private FsStoreOrderCreateParamAppReward buildStoreOrderCreateParam(FsUserRewards reward, FsUser fsUser) {
+        FsStoreProductScrm fsStoreProductScrm = storeProductScrmService.selectFsStoreProductById(reward.getGoodsId());
+        if (fsStoreProductScrm == null){
+            log.error("商城商品不存在: {}", reward.getGoodsId());
+            throw new CustomException("商城商品不存在");
+        }
         FsStoreOrderCreateParamAppReward param = new FsStoreOrderCreateParamAppReward();
+        param.setPayPrice(fsStoreProductScrm.getPrice());
+        param.setErpType(fsStoreProductScrm.getErpType());
+        param.setAppRewardFlag(1);//首次注册奖品订单标识
+        param.setPayType("1");//全款
         param.setCompanyId(reward.getCompanyId());
         param.setCompanyUserId(reward.getCompanyUserId());
         param.setUserId(fsUser.getUserId());
         param.setAddressId(reward.getAddressId());
         param.setGoodsId(reward.getGoodsId());
-        FsStoreOrderScrm fsStoreOrderScrm = storeOrderScrmService.selectFsStoreOrderById(param.getGoodsId());
-        if (fsStoreOrderScrm == null){
-            log.error("商城商品不存在: {}", param.getGoodsId());
-            throw new CustomException("商城商品不存在");
-        }
-        param.setErpType(fsStoreOrderScrm.getErpType());
-        param.setAppRewardFlag(1);//首次注册奖品订单标识
         return param;
     }
 

+ 1 - 1
fs-service/src/main/java/com/fs/his/strategy/impl/FirstLoginRedPacketStrategy.java

@@ -66,7 +66,7 @@ public class FirstLoginRedPacketStrategy implements RewardStrategy {
             FsUser fsUser=fsUserMapper.selectFsUserById(reward.getFsUserId());
             if (fsUser!=null){
                 if (fsUser.getAppOpenId()==null) {
-                    return RewardResult.fail("请绑定微信后再领取");
+                    return RewardResult.fail(900,"请绑定微信后再领取");
                 }
                 WxSendRedPacketParam param=buildRedPacketParam(reward, fsUser);
                 //调用发送红包接口逻辑

+ 14 - 8
fs-service/src/main/java/com/fs/his/strategy/impl/WatchCourseProductStrategy.java

@@ -12,8 +12,10 @@ import com.fs.his.service.IFsPackageOrderService;
 import com.fs.his.strategy.RewardResult;
 import com.fs.his.strategy.RewardStrategy;
 import com.fs.hisStore.domain.FsStoreOrderScrm;
+import com.fs.hisStore.domain.FsStoreProductScrm;
 import com.fs.hisStore.param.FsStoreOrderCreateParamAppReward;
 import com.fs.hisStore.service.IFsStoreOrderScrmService;
+import com.fs.hisStore.service.IFsStoreProductScrmService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -28,6 +30,9 @@ public class WatchCourseProductStrategy  implements RewardStrategy {
     @Autowired
     private IFsPackageOrderService packageOrderService;
 
+    @Autowired
+    private IFsStoreProductScrmService storeProductScrmService;
+
     @Autowired
     private IFsStoreOrderScrmService storeOrderScrmService;
     @Override
@@ -103,21 +108,22 @@ public class WatchCourseProductStrategy  implements RewardStrategy {
         param.setAppRewardFlag(2);//2:看课奖品订单
         return param;
     }
-
     private FsStoreOrderCreateParamAppReward buildStoreOrderCreateParam(FsUserRewards reward, FsUser fsUser) {
+        FsStoreProductScrm fsStoreProductScrm = storeProductScrmService.selectFsStoreProductById(reward.getGoodsId());
+        if (fsStoreProductScrm == null){
+            log.error("商城商品不存在: {}", reward.getGoodsId());
+            throw new CustomException("商城商品不存在");
+        }
         FsStoreOrderCreateParamAppReward param = new FsStoreOrderCreateParamAppReward();
+        param.setPayPrice(fsStoreProductScrm.getPrice());
+        param.setErpType(fsStoreProductScrm.getErpType());
+        param.setAppRewardFlag(2);//2:看课奖品订单
+        param.setPayType("1");//全款
         param.setCompanyId(reward.getCompanyId());
         param.setCompanyUserId(reward.getCompanyUserId());
         param.setUserId(fsUser.getUserId());
         param.setAddressId(reward.getAddressId());
         param.setGoodsId(reward.getGoodsId());
-        FsStoreOrderScrm fsStoreOrderScrm = storeOrderScrmService.selectFsStoreOrderById(param.getGoodsId());
-        if (fsStoreOrderScrm == null){
-            log.error("商城商品不存在: {}", param.getGoodsId());
-            throw new CustomException("商城商品不存在");
-        }
-        param.setErpType(fsStoreOrderScrm.getErpType());
-        param.setAppRewardFlag(2);//2:看课奖品订单
         return param;
     }
 

+ 1 - 1
fs-service/src/main/java/com/fs/his/strategy/impl/WatchCourseRedPacketStrategy.java

@@ -42,7 +42,7 @@ public class WatchCourseRedPacketStrategy implements RewardStrategy {
             FsUser fsUser=fsUserMapper.selectFsUserById(reward.getFsUserId());
             if (fsUser!=null){
                 if (fsUser.getAppOpenId()==null) {
-                    return RewardResult.fail("请绑定微信后再领取");
+                    return RewardResult.fail(900,"请绑定微信后再领取");
                 }
                 WxSendRedPacketParam param=buildRedPacketParam(reward, fsUser);
                 //调用发送红包接口逻辑

+ 9 - 15
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -1024,7 +1024,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         FsStoreOrderComputedParam computedParam = new FsStoreOrderComputedParam();
         BeanUtils.copyProperties(param, computedParam);
         //计算金额
-        FsStoreOrderComputeDTO dto = this.computedOrder(userId, computedParam);
+        //FsStoreOrderComputeDTO dto = this.computedOrder(userId, computedParam);
         //获取地址
         FsUserAddressScrm address = userAddressMapper.selectFsUserAddressById(param.getAddressId());
         //生成分布式唯一值
@@ -1040,14 +1040,14 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         storeOrder.setUserPhone(address.getPhone());
         storeOrder.setUserAddress(address.getProvince() + " " + address.getCity() +
                 " " + address.getDistrict() + " " + address.getDetail().trim());
-        storeOrder.setTotalPrice(dto.getTotalPrice());
-        storeOrder.setTotalPostage(dto.getPayPostage());
+        storeOrder.setTotalPrice(param.getPayPrice());
+        storeOrder.setTotalPostage(BigDecimal.ZERO);
 
-        storeOrder.setPayPostage(dto.getPayPostage());
-        storeOrder.setDeductionPrice(dto.getDeductionPrice());
+        storeOrder.setPayPostage(BigDecimal.ZERO);
+        storeOrder.setDeductionPrice(BigDecimal.ZERO);
         storeOrder.setPaid(0);
         storeOrder.setPayType(param.getPayType());
-        storeOrder.setUseIntegral(BigDecimal.valueOf(dto.getUsedIntegral()));
+        storeOrder.setUseIntegral(BigDecimal.ZERO);
         storeOrder.setBackIntegral(BigDecimal.ZERO);
         storeOrder.setGainIntegral(BigDecimal.ZERO);
         storeOrder.setMark(param.getMark());
@@ -1063,15 +1063,9 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
             storeOrder.setServiceFee(config.getServiceFee());
         }
 
-        //后台制单处理
-        if (param.getPayPrice() != null && param.getPayPrice().compareTo(BigDecimal.ZERO) > 0) {
-            if (param.getPayPrice().compareTo(dto.getTotalPrice()) > 0) {
-                return R.error("改价价格不能大于商品总价");
-            }
-            storeOrder.setPayPrice(param.getPayPrice());
-        } else {
-            storeOrder.setPayPrice(dto.getPayPrice());
-        }
+        //实际支付金额
+         storeOrder.setPayPrice(param.getPayPrice());
+
         storeOrder.setStatus(1); //待发货
         storeOrder.setOrderCreateType(param.getOrderCreateType());
         storeOrder.setIsPrescribe(0);

+ 14 - 2
fs-user-app/src/main/java/com/fs/app/controller/AppUserRewardController.java

@@ -4,6 +4,7 @@ import com.fs.app.annotation.Login;
 import com.fs.app.domain.FsAppRole;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.exception.CustomException;
 import com.fs.common.utils.StringUtils;
 import com.fs.his.domain.FsUserRewards;
 import com.fs.his.dto.ClaimRewardsAddDTO;
@@ -102,8 +103,19 @@ public class AppUserRewardController  extends AppBaseController{
             return R.error("请登录");
         }
         claimRewardsAddDTO.setFsUserId(Long.valueOf(loginUserId));
-        appUserRewardService.claimRewards(claimRewardsAddDTO);
-        return R.ok();
+        try {
+            appUserRewardService.claimRewards(claimRewardsAddDTO);
+            return R.ok();
+        } catch (CustomException e) {
+            log.error("领取奖品失败: {}", e.getMessage());
+            if (e.getCode() != null) {
+                return R.error(e.getCode(), e.getMessage());
+            }
+            return R.error(e.getMessage());
+        } catch (Exception e) {
+            log.error("领取奖品系统异常", e);
+            return R.error("系统异常");
+        }
     }
 
     /**

+ 3 - 4
fs-user-app/src/main/java/com/fs/app/controller/UserController.java

@@ -61,8 +61,7 @@ import java.util.List;
 import java.util.Map;
 
 import static com.fs.common.utils.SecurityUtils.getUserId;
-import static com.fs.his.utils.PhoneUtil.decryptPhoneMk;
-import static com.fs.his.utils.PhoneUtil.encryptPhone;
+import static com.fs.his.utils.PhoneUtil.*;
 
 
 @Api("个人中心")
@@ -125,8 +124,8 @@ public class UserController extends  AppBaseController {
         try {
             FsUser user=userService.selectFsUserByUserId(Long.parseLong(getUserId()));
             if (user.getPhone()!=null&&user.getPhone().length()>11&&!user.getPhone().matches("\\d+")){
-                //user.setPhone(decryptPhoneMk(user.getPhone()));
-                user.setPhone(user.getPhone());//绑定微信需要,所以放开了加密
+                user.setPhone(decryptPhone(user.getPhone()));//绑定微信需要,所以放开了加密
+                //user.setPhone(user.getPhone());
             }
             Map<String,Object> map=new HashMap<>();
             map.put("user",user);