Parcourir la source

益寿缘app-优化App看课奖励创建订单逻辑

cgp il y a 1 semaine
Parent
commit
76d111a11d

+ 5 - 6
fs-service/src/main/java/com/fs/his/service/impl/FsPackageOrderServiceImpl.java

@@ -2142,7 +2142,6 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
     @Override
     @Transactional
     public R addPackageOrderForAppRewards(FsPackageOrderAddRewardsParam param) {
-        Long doctorId = null;
         FsPackage fsPackage=fsPackageMapper.selectFsPackageByPackageId(param.getPackageId());
         if(fsPackage.getStatus().equals(0)){
             return R.error("套餐包已下架");
@@ -2170,7 +2169,7 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
         order.setTotalPrice(fsPackage.getTotalPrice());
         order.setIcdCode(fsPackage.getIcdCode());
         order.setPayPrice(fsPackage.getTotalPrice());
-        order.setPayMoney(new BigDecimal(0));//0元订单
+        order.setPayMoney(new BigDecimal(0));//这里要是全款订单 但实际没有实付金额
         order.setIsPay(0);
         order.setSource(param.getOrderResource());//订单来源
         order.setPackageSecondName(fsPackage.getSecondName());
@@ -2188,8 +2187,8 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
         order.setDays(fsPackage.getCycle());
         order.setStatus(1);
         order.setStartTime(new Date());
-        order.setCompanyUserId(param.getCompanyUserId());
-        order.setCompanyId(param.getCompanyId());
+        //order.setCompanyUserId(param.getCompanyUserId());
+        //order.setCompanyId(param.getCompanyId());
         Calendar c = Calendar.getInstance();
         c.setTime(order.getStartTime());
         c.add(Calendar.DAY_OF_MONTH, fsPackage.getCycle());
@@ -2217,8 +2216,8 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
 
 
         FsPackageOrderComputeParam computeParam=new FsPackageOrderComputeParam();
-        computeParam.setCompanyUserId(param.getCompanyUserId());
-        computeParam.setCompanyId(param.getCompanyId());
+        //computeParam.setCompanyUserId(param.getCompanyUserId());
+        //computeParam.setCompanyId(param.getCompanyId());
         computeParam.setPayType(param.getPayType());
         computeParam.setSalesType(1);
         if(order.getStoreId() != null){

+ 54 - 27
fs-service/src/main/java/com/fs/his/strategy/impl/FirstLoginProductStrategy.java

@@ -1,6 +1,7 @@
 package com.fs.his.strategy.impl;
 
 import com.fs.common.core.domain.R;
+import com.fs.common.exception.CustomException;
 import com.fs.his.domain.FsPackageOrder;
 import com.fs.his.domain.FsUser;
 import com.fs.his.domain.FsUserRewards;
@@ -10,6 +11,7 @@ import com.fs.his.param.FsPackageOrderAddRewardsParam;
 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.param.FsStoreOrderCreateParamAppReward;
 import com.fs.hisStore.service.IFsStoreOrderScrmService;
 import lombok.extern.slf4j.Slf4j;
@@ -36,41 +38,49 @@ public class FirstLoginProductStrategy implements RewardStrategy {
             if (fsUser == null) {
                 return RewardResult.fail("用户不存在");
             }
-            if (reward.getAddressId()==null){
+            if (reward.getAddressId() == null) {
                 return RewardResult.fail("请选择收货地址");
             }
-            // 调用创建0元订单接口
-            FsPackageOrderAddRewardsParam param = buildOrderCreateParam(reward, fsUser);
             //互联网医院和商城要调用不同的订单创建逻辑
             R result;
+            String orderCode; // 统一在此处定义 orderCode
             if (reward.getProductType() == 1) {
-                //套餐包订单
+                FsPackageOrderAddRewardsParam param = buildOrderCreateParam(reward, fsUser);
+                //创建套餐包订单
                 result = packageOrderService.addPackageOrderForAppRewards(param);
+                if (result.isSuccess()) {
+                    Object orderObj = result.get("order");
+                    if (orderObj instanceof FsPackageOrder) { // 安全检查
+                        FsPackageOrder order = (FsPackageOrder) orderObj;
+                        orderCode = order.getOrderSn();
+                        log.info("套餐包订单创建成功: orderId={}, orderCode={}", order.getOrderId(), orderCode);
+                    } else {
+                        log.error("套餐包订单创建失败: 返回数据类型错误");
+                        return RewardResult.fail("订单创建失败:返回数据类型错误");
+                    }
+                } else {
+                    log.error("套餐包订单创建失败: {}", result.getMsg());
+                    return RewardResult.fail("订单创建失败:" + result.getMsg());
+                }
             } else {
-                //商城订单
-                FsStoreOrderCreateParamAppReward storeAppReward=new FsStoreOrderCreateParamAppReward();
-                result = storeOrderScrmService.createOrderScrmForAppRewards(reward.getFsUserId(),storeAppReward);
+                //创建商城订单
+                FsStoreOrderCreateParamAppReward storeAppReward = buildStoreOrderCreateParam(reward, fsUser);
+                result = storeOrderScrmService.createOrderScrmForAppRewards(reward.getFsUserId(), storeAppReward);
+                if (result.isSuccess()) {
+                    Object orderObj = result.get("order");
+                    if (orderObj instanceof FsStoreOrderScrm) {
+                        FsStoreOrderScrm order = (FsStoreOrderScrm) orderObj; //类型转换
+                        orderCode = order.getOrderCode();
+                        log.info("商城订单创建成功: orderId={}, orderCode={}", order.getId(), orderCode);
+                    } else {
+                        log.error("商城订单创建失败: 返回数据类型错误");
+                        return RewardResult.fail("订单创建失败:返回数据类型错误");
+                    }
+                } else {
+                    log.error("商城订单创建失败: {}", result.getMsg());
+                    return RewardResult.fail("订单创建失败:" + result.getMsg());
+                }
             }
-
-            // 检查订单创建是否成功
-            if (!result.isSuccess()) {
-                log.error("商品订单创建失败: {}", result.getMsg());
-                return RewardResult.fail("订单创建失败:" + result.getMsg());
-            }
-
-            // 获取订单对象
-            Object orderObj = result.get("order");
-            if (orderObj == null) {
-                return RewardResult.fail("订单创建失败:返回数据为空");
-            }
-
-            // 转换为订单实体
-            FsPackageOrder order = (FsPackageOrder) orderObj;
-            String orderCode = order.getOrderSn();
-
-            log.info("商品订单创建成功: orderId={}, orderCode={}", order.getOrderId(), orderCode);
-
-            // 返回成功,带上订单号
             return RewardResult.success(orderCode);
 
         } catch (Exception e) {
@@ -88,6 +98,23 @@ public class FirstLoginProductStrategy implements RewardStrategy {
         param.setCompanyUserId(reward.getCompanyUserId());
         param.setUserId(fsUser.getUserId());
         param.setAddressId(reward.getAddressId());
+        param.setPackageId(reward.getGoodsId());
+        return param;
+    }
+
+    private FsStoreOrderCreateParamAppReward buildStoreOrderCreateParam(FsUserRewards reward, FsUser fsUser) {
+        FsStoreOrderCreateParamAppReward param = new FsStoreOrderCreateParamAppReward();
+        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());
         return param;
     }
 

+ 54 - 27
fs-service/src/main/java/com/fs/his/strategy/impl/WatchCourseProductStrategy.java

@@ -1,6 +1,7 @@
 package com.fs.his.strategy.impl;
 
 import com.fs.common.core.domain.R;
+import com.fs.common.exception.CustomException;
 import com.fs.his.domain.FsPackageOrder;
 import com.fs.his.domain.FsUser;
 import com.fs.his.domain.FsUserRewards;
@@ -10,6 +11,7 @@ import com.fs.his.param.FsPackageOrderAddRewardsParam;
 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.param.FsStoreOrderCreateParamAppReward;
 import com.fs.hisStore.service.IFsStoreOrderScrmService;
 import lombok.extern.slf4j.Slf4j;
@@ -36,41 +38,49 @@ public class WatchCourseProductStrategy  implements RewardStrategy {
             if (fsUser == null) {
                 return RewardResult.fail("用户不存在");
             }
-            if (reward.getAddressId()==null){
+            if (reward.getAddressId() == null) {
                 return RewardResult.fail("请选择收货地址");
             }
-            // 调用创建0元订单接口
-            FsPackageOrderAddRewardsParam param = buildOrderCreateParam(reward, fsUser);
             //互联网医院和商城要调用不同的订单创建逻辑
             R result;
+            String orderCode; // 统一在此处定义 orderCode
             if (reward.getProductType() == 1) {
-                //套餐包订单
+                FsPackageOrderAddRewardsParam param = buildOrderCreateParam(reward, fsUser);
+                //创建套餐包订单
                 result = packageOrderService.addPackageOrderForAppRewards(param);
+                if (result.isSuccess()) {
+                    Object orderObj = result.get("order");
+                    if (orderObj instanceof FsPackageOrder) { // 安全检查
+                        FsPackageOrder order = (FsPackageOrder) orderObj;
+                        orderCode = order.getOrderSn();
+                        log.info("套餐包订单创建成功: orderId={}, orderCode={}", order.getOrderId(), orderCode);
+                    } else {
+                        log.error("套餐包订单创建失败: 返回数据类型错误");
+                        return RewardResult.fail("订单创建失败:返回数据类型错误");
+                    }
+                } else {
+                    log.error("套餐包订单创建失败: {}", result.getMsg());
+                    return RewardResult.fail("订单创建失败:" + result.getMsg());
+                }
             } else {
-                //商城订单
-                FsStoreOrderCreateParamAppReward storeAppReward=new FsStoreOrderCreateParamAppReward();
-                result = storeOrderScrmService.createOrderScrmForAppRewards(reward.getFsUserId(),storeAppReward);
+                //创建商城订单
+                FsStoreOrderCreateParamAppReward storeAppReward = buildStoreOrderCreateParam(reward, fsUser);
+                result = storeOrderScrmService.createOrderScrmForAppRewards(reward.getFsUserId(), storeAppReward);
+                if (result.isSuccess()) {
+                    Object orderObj = result.get("order");
+                    if (orderObj instanceof FsStoreOrderScrm) {
+                        FsStoreOrderScrm order = (FsStoreOrderScrm) orderObj; //类型转换
+                        orderCode = order.getOrderCode();
+                        log.info("商城订单创建成功: orderId={}, orderCode={}", order.getId(), orderCode);
+                    } else {
+                        log.error("商城订单创建失败: 返回数据类型错误");
+                        return RewardResult.fail("订单创建失败:返回数据类型错误");
+                    }
+                } else {
+                    log.error("商城订单创建失败: {}", result.getMsg());
+                    return RewardResult.fail("订单创建失败:" + result.getMsg());
+                }
             }
-
-            // 检查订单创建是否成功
-            if (!result.isSuccess()) {
-                log.error("商品订单创建失败: {}", result.getMsg());
-                return RewardResult.fail("订单创建失败:" + result.getMsg());
-            }
-
-            // 获取订单对象
-            Object orderObj = result.get("order");
-            if (orderObj == null) {
-                return RewardResult.fail("订单创建失败:返回数据为空");
-            }
-
-            // 转换为订单实体
-            FsPackageOrder order = (FsPackageOrder) orderObj;
-            String orderCode = order.getOrderSn();
-
-            log.info("商品订单创建成功: orderId={}, orderCode={}", order.getOrderId(), orderCode);
-
-            // 返回成功,带上订单号
             return RewardResult.success(orderCode);
 
         } catch (Exception e) {
@@ -88,6 +98,23 @@ public class WatchCourseProductStrategy  implements RewardStrategy {
         param.setCompanyUserId(reward.getCompanyUserId());
         param.setUserId(fsUser.getUserId());
         param.setAddressId(reward.getAddressId());
+        param.setPackageId(reward.getGoodsId());
+        return param;
+    }
+
+    private FsStoreOrderCreateParamAppReward buildStoreOrderCreateParam(FsUserRewards reward, FsUser fsUser) {
+        FsStoreOrderCreateParamAppReward param = new FsStoreOrderCreateParamAppReward();
+        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());
         return param;
     }
 

+ 5 - 0
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreProductAttrValueScrmMapper.java

@@ -147,4 +147,9 @@ public interface FsStoreProductAttrValueScrmMapper
     void updateFsStoreProductAttrValuePrice(List<Long> ids, double v);
 
     List<FsStoreProductAttrValueScrm> getFsStoreProductAttrValueListInProductId(List<Long> productIds);
+
+    /**
+     * 根据商品ID查询商品属性SKU值ID
+     * */
+    Long selectProductAttrValueIdByProductId(Long goodsId);
 }

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

@@ -1076,7 +1076,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         storeOrder.setOrderCreateType(param.getOrderCreateType());
         storeOrder.setIsPrescribe(0);
         if (storeOrder.getCustomerId() == null) {
-            storeOrder.setCustomerId(param.getCustomerId());//6.13 添加客户id
+            storeOrder.setCustomerId(param.getCustomerId());
         }
 
         storeOrder.setOrderType(param.getOrderType());
@@ -1094,15 +1094,15 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         fsOrderSopLog.setCreateTime(DateUtils.getNowDate());
         fsOrderSopLogService.insertFsOrderSopLog(fsOrderSopLog);
 
-        List<FsStoreCartQueryVO> carts = new ArrayList<>();
         FsStoreCartQueryVO vo = new FsStoreCartQueryVO();
         vo.setProductId(param.getGoodsId());
         vo.setCartNum(1);//数量
-        carts.add(vo);
-        //减库存加销量
-        //fsStoreProductAttrValueMapper.decProductAttrStock(productAttrValueId,1);
+        //扣减库存
         fsStoreProductMapper.decProductAttrStock(param.getGoodsId(),1);
-        //this.deStockIncSale(carts);
+        Long productAttrValueId=fsStoreProductAttrValueMapper.selectProductAttrValueIdByProductId(param.getGoodsId());
+        if (productAttrValueId!=null){
+            fsStoreProductAttrValueMapper.decProductAttrStock(productAttrValueId,1);
+        }
         //保存OrderItem
         List<FsStoreOrderItemScrm> listOrderItem = new ArrayList<>();
         //保存购物车商品信息

+ 3 - 0
fs-service/src/main/resources/mapper/hisStore/FsStoreProductAttrValueScrmMapper.xml

@@ -58,6 +58,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="getFsStoreProductAttrValueListInProductId" resultType="com.fs.hisStore.domain.FsStoreProductAttrValueScrm">
         select *,cost_price AS cost from fs_store_product_attr_value_scrm where product_id IN <foreach collection="productIds" index="index" item="item" open="(" separator="," close=")">#{item}</foreach>
     </select>
+    <select id="selectProductAttrValueIdByProductId" resultType="java.lang.Long">
+        select id from fs_store_product_attr_value_scrm where product_id = #{productId}
+    </select>
 
     <insert id="insertFsStoreProductAttrValue" parameterType="FsStoreProductAttrValueScrm" useGeneratedKeys="true" keyProperty="id">
         insert into fs_store_product_attr_value_scrm