Kaynağa Gözat

1.个微采集--绑定套餐包业务 2.商品新增最低价和最低价开关

wjj 3 gün önce
ebeveyn
işleme
f6ad2a346f

+ 10 - 0
fs-service/src/main/java/com/fs/his/domain/FsStoreProduct.java

@@ -239,4 +239,14 @@ public class FsStoreProduct extends BaseEntity {
     @Excel(name = "运费模板")
     private Long tempId;
     private Integer isDrug;
+
+    /**
+     * 最低价
+     */
+    private BigDecimal minPrice;
+
+    /**
+     * 最低价开关 0-关闭 1-打开
+     */
+    private Integer minOpen;
 }

+ 4 - 2
fs-service/src/main/java/com/fs/his/domain/FsStoreProductAttrValue.java

@@ -93,6 +93,8 @@ public class FsStoreProductAttrValue extends BaseEntity
 
     private Map<String, String> detail;
 
-
-
+    /**
+     * 最低价
+     */
+    private BigDecimal minPrice;
 }

+ 10 - 0
fs-service/src/main/java/com/fs/his/dto/FsPackagePruductDTO.java

@@ -55,6 +55,16 @@ public class FsPackagePruductDTO {
     /** 是否为药品 */
     private Integer isDrug;
 
+    /**
+     * 最低价
+     */
+    private BigDecimal minPrice;
+
+    /**
+     * 最低价开关 0-关闭 1-打开
+     */
+    private Integer minOpen;
+
     public FsPackagePruductDTO() {
     }
 }

+ 5 - 0
fs-service/src/main/java/com/fs/his/dto/ProductAttrCountDTO.java

@@ -19,4 +19,9 @@ public class ProductAttrCountDTO {
     private Integer stock;
 
     private Integer minIntegral;
+
+    /**
+     * 最低价
+     */
+    private BigDecimal minProductPrice;
 }

+ 1 - 1
fs-service/src/main/java/com/fs/his/mapper/FsStoreProductMapper.java

@@ -192,7 +192,7 @@ public interface FsStoreProductMapper {
     List<FsStoreProductExcelVO> selectFsStoreProductExcelVO(@Param("maps") FsStoreProduct fsStoreProduct);
 
     @Select({"<script> " +
-            "select v.*,p.product_name,p.product_type,p.is_drug,c.cate_name,store.store_name,p.prescribe_spec  from fs_store_product_attr_value v inner join fs_store_product p on p.product_id=v.product_id left join fs_store_product_category c on c.cate_id=p.cate_id LEFT JOIN fs_store store ON store.store_id=p.store_id      " +
+            "select v.*,p.product_name,p.product_type,p.is_drug,c.cate_name,store.store_name,p.prescribe_spec,p.min_open  from fs_store_product_attr_value v inner join fs_store_product p on p.product_id=v.product_id left join fs_store_product_category c on c.cate_id=p.cate_id LEFT JOIN fs_store store ON store.store_id=p.store_id      " +
             "where 1=1 and v.bar_code is not null " +
             "<if test = 'maps.productName != null and  maps.productName !=\"\"    '> " +
             "and p.product_name like CONCAT('%',#{maps.productName},'%') " +

+ 5 - 0
fs-service/src/main/java/com/fs/his/param/FsStoreProductAddEditParam.java

@@ -165,4 +165,9 @@ public class FsStoreProductAddEditParam implements Serializable {
     //sku结果集
     private List<FsStoreProductAttrValue> values;
 
+    /**
+     * 最低价开关 0-关闭 1-打开
+     */
+    private Integer minOpen;
+
 }

+ 5 - 0
fs-service/src/main/java/com/fs/his/service/IFsPackageService.java

@@ -105,4 +105,9 @@ public interface IFsPackageService
      * @return 合并的套餐包id
      */
     Long mergePackage(List<Long> packageIds);
+
+    /**
+     * 生成套餐包
+     */
+    Long generatePackage(FsPackage fsPackage,String giftProductJson);
 }

+ 58 - 11
fs-service/src/main/java/com/fs/his/service/impl/FsPackageServiceImpl.java

@@ -413,17 +413,6 @@ public class FsPackageServiceImpl implements IFsPackageService {
             mergePackage.setNum(0);
             mergePackage.setCycle(0);
             mergePackage.setTotalPrice(totalPrice);//合并套餐包价格
-//            BigDecimal toal = new BigDecimal(0);
-//            for (FsPackagePruductDTO product : allProducts) {
-//                toal = toal.add(product.getCostPrice().multiply(new BigDecimal(product.getCount())));
-//            }
-//            mergePackage.setProductCostPrice(toal);
-//            SysConfig sysConfig = sysConfigService.selectConfigByConfigKey("his.store");
-//            Map<String, Object> config = (Map<String, Object>) JSON.parse(sysConfig.getConfigValue());
-//            Integer followRate = (Integer) config.get("followRate");
-//            BigDecimal in = new BigDecimal((mergePackage.getCycle() / followRate) * 300);
-//            mergePackage.setInquiryCostPrice(in);
-//            mergePackage.setTotalCostPrice(toal.add(in));
             mergePackage.setTotalCostPrice(totalPrice);
 
             fsPackageMapper.insertFsPackage(mergePackage);
@@ -432,6 +421,64 @@ public class FsPackageServiceImpl implements IFsPackageService {
         return 0L;
     }
 
+    @Override
+    public Long generatePackage(FsPackage fsPackage,String giftProductJson) {
+        BigDecimal totalPrice = BigDecimal.ZERO;
+        fsPackage.setCreateTime(DateUtils.getNowDate());
+        fsPackage.setPackageName("合成套餐包");
+        fsPackage.setIsMerge(1);
+        fsPackage.setStatus(0);
+        if (fsPackage.getProductJson() == null) {
+            throw new CustomException("商品数据为空,绑定套餐包失败");
+        }
+        JSONArray objects = JSONUtil.parseArray(fsPackage.getProductJson());
+        List<FsPackagePruductDTO> products = JSONUtil.toList(objects, FsPackagePruductDTO.class);
+        if (CollectionUtils.isEmpty( products)) {
+            throw new CustomException("商品数据为空,绑定套餐包失败");
+        }
+        StringBuilder packageName = new StringBuilder();
+        for (FsPackagePruductDTO product : products) {
+            if (product.getMinOpen() == 1) {
+                //是否使用最低价
+                if (product.getMinPrice() != null && product.getMinPrice().compareTo(BigDecimal.ZERO) > 0) {
+                    totalPrice = totalPrice.add(product.getMinPrice().multiply(BigDecimal.valueOf(product.getCount())));
+                } else {
+                    totalPrice = totalPrice.add(product.getPrice().multiply(BigDecimal.valueOf(product.getCount())));
+                }
+            } else {
+                totalPrice = totalPrice.add(product.getPrice().multiply(BigDecimal.valueOf(product.getCount())));
+            }
+            packageName.append(product.getProductName()).append("+");
+        }
+        if (totalPrice.compareTo(fsPackage.getTotalPrice()) > 0) {
+            throw new CustomException("套餐包价格错误,最低应为:"+ totalPrice);
+        }
+        //添加赠品
+        if (giftProductJson != null) {
+            JSONArray jsonArray = JSONUtil.parseArray(giftProductJson);
+            List<FsPackagePruductDTO> giftProducts = JSONUtil.toList(jsonArray, FsPackagePruductDTO.class);
+            if (CollectionUtils.isEmpty(giftProducts)) {
+                products.addAll(giftProducts);
+                fsPackage.setProductJson(JSONUtil.toJsonStr(products));
+            }
+        }
+        fsPackage.setPackageName(StringUtils.removeEnd(packageName.toString(), "+"));
+        fsPackage.setUpdateTime(new Date());
+        fsPackage.setPackageType(1);
+        fsPackage.setPackageSubType(2);
+        fsPackage.setPayType("1,2,3");//全部支付类型
+        fsPackage.setProductType(1);//默认中药类型
+        fsPackage.setIsShow(0);
+        fsPackage.setDiseaseType(-1);
+        fsPackage.setFollowTempId(10L);
+        fsPackage.setPrivateType(1);
+        fsPackage.setNum(0);
+        fsPackage.setCycle(0);
+        fsPackage.setTotalCostPrice(fsPackage.getTotalPrice());
+        fsPackageMapper.insertFsPackage(fsPackage);
+
+        return fsPackage.getPackageId();
+    }
 
 
     // 1. 判断所有对象字段是否相同

+ 14 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsStoreProductServiceImpl.java

@@ -234,6 +234,7 @@ public class FsStoreProductServiceImpl implements IFsStoreProductService {
 //            valueMap.put("brokerageTwo", 0);
 //            valueMap.put("brokerageThree", 0);
             valueMap.put("giveIntegral", 0);
+            valueMap.put("minPrice",0);
             if (productId > 0) {
                 FsStoreProductAttrValue attrValueMap = new FsStoreProductAttrValue();
                 attrValueMap.setProductId(productId);
@@ -259,6 +260,7 @@ public class FsStoreProductServiceImpl implements IFsStoreProductService {
 //                    valueMap.put("brokerageThree", values.get(0).getBrokerageThree());
                     System.out.println("积分 :" + values.get(0).getGiveIntegral());
                     valueMap.put("giveIntegral", values.get(0).getGiveIntegral());
+                    valueMap.put("minPrice", values.get(0).getMinPrice());
                 }
             }
             valueMapList.add(ObjectUtil.clone(valueMap));
@@ -470,6 +472,7 @@ public class FsStoreProductServiceImpl implements IFsStoreProductService {
             product.setBarCode(param.getValues().get(0).getBarCode());
             product.setGiveIntegral(new BigDecimal(countDto.getMinIntegral()));
             product.setStock(countDto.getStock());
+            product.setMinPrice(countDto.getMinProductPrice());
             fsStoreProductMapper.updateFsStoreProduct(product);
             if (param.getSpecType().equals(0)) {
                 ProductArrtDTO fromatDetailDto = ProductArrtDTO.builder()
@@ -507,6 +510,8 @@ public class FsStoreProductServiceImpl implements IFsStoreProductService {
                             fsPackagePruductDTO.setMoney(vo.getPrice().multiply(new BigDecimal(fsPackagePruductDTO.getCount())));
                             fsPackagePruductDTO.setCostPrice(vo.getCostPrice());
                             fsPackagePruductDTO.setIsDrug(1);
+                            fsPackagePruductDTO.setMinPrice(vo.getMinPrice());
+                            fsPackagePruductDTO.setMinOpen(vo.getMinOpen());
                         }
                     }
 
@@ -540,6 +545,7 @@ public class FsStoreProductServiceImpl implements IFsStoreProductService {
             product.setBarCode(param.getValues().get(0).getBarCode());
             product.setGiveIntegral(new BigDecimal(countDto.getMinIntegral()));
             product.setStock(countDto.getStock());
+            product.setMinPrice(countDto.getMinProductPrice());
             fsStoreProductMapper.insertFsStoreProduct(product);
             if (param.getSpecType().equals(0)) {
                 ProductArrtDTO fromatDetailDto = ProductArrtDTO.builder()
@@ -621,6 +627,13 @@ public class FsStoreProductServiceImpl implements IFsStoreProductService {
                 .min(Comparator.naturalOrder())
                 .orElse(val);
 
+        //取最低价
+        BigDecimal minProductPrice = values
+                .stream()
+                .map(FsStoreProductAttrValue::getMinPrice)
+                .min(Comparator.naturalOrder())
+                .orElse(val);
+
         //取最小积分
         Integer minIntegral = values
                 .stream()
@@ -653,6 +666,7 @@ public class FsStoreProductServiceImpl implements IFsStoreProductService {
                 .minCost(minCost)
                 .stock(stock)
                 .minIntegral(minIntegral)
+                .minProductPrice(minProductPrice)
                 .build();
     }
 

+ 10 - 0
fs-service/src/main/java/com/fs/his/vo/FsStoreProductAttrValueVO.java

@@ -44,4 +44,14 @@ public class FsStoreProductAttrValueVO implements Serializable {
     private String cateName;
 
     private Integer isDrug;
+
+    /**
+     * 最低价
+     */
+    private BigDecimal minPrice;
+
+    /**
+     * 最低价开关 0-关闭 1-打开
+     */
+    private Integer minOpen;
 }

+ 10 - 0
fs-service/src/main/java/com/fs/hisStore/param/bindCollectionPackageParam.java

@@ -22,4 +22,14 @@ public class bindCollectionPackageParam {
 
     //合并套餐包id
     private List<Long> packageIds;
+
+    private String productJson;
+
+    private String giftProductJson;
+
+    private Integer erpType;
+
+    private Long storeId;
+
+    private BigDecimal totalPrice;
 }

+ 24 - 17
fs-service/src/main/java/com/fs/hisStore/service/impl/FsUserInformationCollectionServiceImpl.java

@@ -1865,21 +1865,28 @@ public class FsUserInformationCollectionServiceImpl extends ServiceImpl<FsUserIn
         if (companyUser == null) {
             throw new CustomException("未查询到绑定销售人员");
         }
-        Long packageId = null;
-        if (param.getPackageIds().size() > 1) {
-            Long mergePackageId = packageService.mergePackage(param.getPackageIds());
-            if (mergePackageId > 0L ) {
-                packageId = mergePackageId;
-            } else {
-                if (mergePackageId == -1L) {
-                    throw new CustomException("套餐包数据错误");
-                } else if (mergePackageId == -2L){
-                    throw new CustomException("ERP类型不相同");
-                }
-            }
-        } else {
-            packageId = param.getPackageIds().get(0);
-        }
+        FsPackage packageParam = new FsPackage();
+        packageParam.setProductJson(param.getProductJson());
+        packageParam.setErpType(param.getErpType());
+        packageParam.setStoreId(param.getStoreId());
+        packageParam.setTotalPrice(param.getTotalPrice());
+        //生成套餐包
+        Long packageId = packageService.generatePackage(packageParam, param.getGiftProductJson());
+//        Long packageId = null;
+//        if (param.getPackageIds().size() > 1) {
+//            Long mergePackageId = packageService.mergePackage(param.getPackageIds());
+//            if (mergePackageId > 0L ) {
+//                packageId = mergePackageId;
+//            } else {
+//                if (mergePackageId == -1L) {
+//                    throw new CustomException("套餐包数据错误");
+//                } else if (mergePackageId == -2L){
+//                    throw new CustomException("ERP类型不相同");
+//                }
+//            }
+//        } else {
+//            packageId = param.getPackageIds().get(0);
+//        }
         FsPackage fsPackage = packageMapper.selectFsPackageByPackageId(packageId);
         if (fsPackage == null){
             throw new CustomException("套餐包不存在");
@@ -1894,8 +1901,8 @@ public class FsUserInformationCollectionServiceImpl extends ServiceImpl<FsUserIn
             informationCollection.setPayType(param.getPayType());
             informationCollection.setAmount(param.getAmount());
             informationCollection.setPersonalCollectStatus(PostPayPrescStatusEnum.PENDING_SHARE.getCode());
-            String ids = param.getPackageIds().stream().map(String::valueOf).collect(Collectors.joining(","));
-            informationCollection.setPackageIds(ids);
+//            String ids = param.getPackageIds().stream().map(String::valueOf).collect(Collectors.joining(","));
+//            informationCollection.setPackageIds(ids);
             int result = fsUserInformationCollectionMapper.updateFsUserInformationCollection(informationCollection);
             if (result > 0){
                 return informationCollection.getId();

+ 5 - 1
fs-service/src/main/resources/mapper/his/FsStoreProductAttrValueMapper.xml

@@ -24,11 +24,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="brokerageThree"    column="brokerage_three"    />
         <result property="giveIntegral"    column="give_integral"    />
         <result property="doctorBrokerage"    column="doctor_brokerage"    />
+        <result property="minPrice"    column="min_price"    />
 
     </resultMap>
 
     <sql id="selectFsStoreProductAttrValueVo">
-        select id,doctor_brokerage, product_id, sku, stock, sales, price, image, cost_price cost, bar_code, ot_price, weight, volume, brokerage, brokerage_two,brokerage_three,give_integral  from fs_store_product_attr_value
+        select id,doctor_brokerage, product_id, sku, stock, sales, price, image, cost_price cost, bar_code, ot_price, weight, volume, brokerage, brokerage_two,brokerage_three,give_integral,doctor_brokerage,min_price from fs_store_product_attr_value
     </sql>
 
     <select id="selectFsStoreProductAttrValueList" parameterType="FsStoreProductAttrValue" resultMap="FsStoreProductAttrValueResult">
@@ -76,6 +77,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="brokerageThree != null">brokerage_three,</if>
             <if test="giveIntegral != null">give_integral,</if>
             <if test="doctorBrokerage != null">doctor_brokerage,</if>
+            <if test="minPrice != null">min_price,</if>
 
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
@@ -95,6 +97,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="brokerageThree != null">#{brokerageThree},</if>
             <if test="giveIntegral != null">#{giveIntegral},</if>
             <if test="doctorBrokerage != null">#{doctorBrokerage},</if>
+            <if test="minPrice != null">#{minPrice},</if>
          </trim>
     </insert>
 
@@ -119,6 +122,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="brokerageThree != null">brokerage_three = #{brokerageThree},</if>
             <if test="giveIntegral != null">give_integral = #{giveIntegral},</if>
             <if test="doctorBrokerage != null">doctor_brokerage = #{doctorBrokerage},</if>
+            <if test="minPrice != null">min_price = #{minPrice},</if>
         </trim>
         where id = #{id}
     </update>

+ 9 - 1
fs-service/src/main/resources/mapper/his/FsStoreProductMapper.xml

@@ -44,10 +44,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="tempId"    column="temp_id"    />
         <result property="isPrescribe"    column="is_prescribe"    />
         <result property="isDrug"    column="is_drug"    />
+        <result property="minPrice"    column="min_price"    />
+        <result property="minOpen"    column="min_open"    />
     </resultMap>
 
     <sql id="selectFsStoreProductVo">
-        select product_id,is_prescribe,is_drug, store_id, img_url, images, product_name, product_introduce, keyword, bar_code, cate_id, price, ot_price, unit_name, sort, sales, stock, is_show, is_hot, is_benefit, is_best, is_new, `desc`, create_time, update_time, is_postage, is_del, give_integral, cost_price, views, code_url, spec_type, product_type, prescribe_code, prescribe_spec, prescribe_factory, prescribe_name, is_display, temp_id,brand from fs_store_product
+        select product_id,is_prescribe,is_drug, store_id, img_url, images, product_name, product_introduce, keyword, bar_code, cate_id, price, ot_price, unit_name, sort, sales, stock, is_show, is_hot, is_benefit, is_best, is_new, `desc`, create_time, update_time, is_postage, is_del, give_integral, cost_price, views, code_url, spec_type, product_type, prescribe_code, prescribe_spec, prescribe_factory, prescribe_name, is_display, temp_id,brand,min_price,min_open  from fs_store_product
     </sql>
 
     <select id="selectFsStoreProductList" parameterType="FsStoreProduct" resultMap="FsStoreProductResult">
@@ -141,6 +143,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="isPrescribe != null">is_prescribe,</if>
             <if test="isDrug != null">is_drug,</if>
             <if test="brand != null">brand,</if>
+            <if test="minPrice != null">min_price,</if>
+            <if test="minOpen != null">min_open,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="storeId != null">#{storeId},</if>
@@ -182,6 +186,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="isPrescribe != null">#{isPrescribe},</if>
             <if test="isDrug != null">#{isDrug},</if>
             <if test="brand != null">#{brand},</if>
+            <if test="minPrice != null">#{minPrice},</if>
+            <if test="minOpen != null">#{minOpen},</if>
          </trim>
     </insert>
 
@@ -226,6 +232,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="isDisplay != null">is_display = #{isDisplay},</if>
             <if test="tempId != null">temp_id = #{tempId},</if>
             <if test="isDrug != null">is_drug = #{isDrug},</if>
+            <if test="minPrice != null">min_price = #{minPrice},</if>
+            <if test="minOpen != null">min_open = #{minOpen},</if>
         </trim>
         where product_id = #{productId}
     </update>