Jelajahi Sumber

Merge remote-tracking branch 'origin/康年堂' into 康年堂

# Conflicts:
#	fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java
yh 4 hari lalu
induk
melakukan
b91a1fcd7d

+ 16 - 0
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponScrmController.java

@@ -6,6 +6,7 @@ import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.hisStore.domain.FsStoreCouponScrm;
 import com.fs.hisStore.domain.FsStoreCouponIssueScrm;
@@ -107,6 +108,11 @@ public class FsStoreCouponScrmController extends BaseController
     public AjaxResult publish(@RequestBody FsStoreCouponPublishParam publishParam)
     {
         FsStoreCouponScrm coupon=fsStoreCouponService.selectFsStoreCouponById(publishParam.getCouponId());
+        Long count = fsStoreCouponIssueService.countFsStoreCouponIssueByCouponId(publishParam.getCouponId(),
+                DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,publishParam.getStartTime()));
+        if (count>0){
+            return AjaxResult.error("已发布该优惠券,可以去修改优惠券使用时间和数量");
+        }
         FsStoreCouponIssueScrm issue=new FsStoreCouponIssueScrm();
         issue.setCouponId(publishParam.getCouponId());
         issue.setCouponName(coupon.getTitle());
@@ -127,7 +133,14 @@ public class FsStoreCouponScrmController extends BaseController
     {
 
         List<FsStoreCouponScrm> list=fsStoreCouponService.selectFsStoreCouponByIds(publishParam.getIds());
+        StringBuilder msg=new StringBuilder();
         for (FsStoreCouponScrm coupon :list ){
+            Long count = fsStoreCouponIssueService.countFsStoreCouponIssueByCouponId(coupon.getCouponId(),
+                    DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,publishParam.getStartTime()));
+            if (count>0){
+                msg.append(coupon.getTitle()).append("发布失败 已发布该优惠券,可以去修改优惠券使用时间和数量").append("\n");
+                continue;
+            }
             FsStoreCouponIssueScrm issue=new FsStoreCouponIssueScrm();
             issue.setCouponId(coupon.getCouponId());
             issue.setCouponName(coupon.getTitle());
@@ -141,6 +154,9 @@ public class FsStoreCouponScrmController extends BaseController
             issue.setCreateTime(new Date());
             fsStoreCouponIssueService.insertFsStoreCouponIssue(issue);
         }
+        if (msg.length()>0){
+            return R.error(msg.toString());
+        }
         return R.ok();
     }
 }

+ 17 - 1
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductPackageScrmController.java

@@ -161,7 +161,12 @@ public class FsStoreProductPackageScrmController extends BaseController
     @Log(title = "商品组合套餐", businessType = BusinessType.UPDATE)
     @PostMapping("/modifyMore")
     public AjaxResult modifyMore(@RequestBody FsStoreProductPackageModifyParam param) {
-        return toAjax(fsStoreProductPackageService.updateFsStoreProductPackages(param.getPackageIds(),param.getStatus(),param.getCompanyId()));
+        if (param != null && param.getCompanyId() != null) {
+            return toAjax(fsStoreProductPackageService.updateFsStoreProductPackages(param.getPackageIds(),param.getStatus(),param.getCompanyId()));
+        }
+
+        return toAjax(fsStoreProductPackageService.updateFsStoreProductPackagesByCompany(param.getPackageIds(),param.getStatus(),param.getCompanyIds()));
+
     }
 
     /**
@@ -219,4 +224,15 @@ public class FsStoreProductPackageScrmController extends BaseController
         }
         return R.ok().put("data",products);
     }
+
+    /**
+     * 批量复制套餐包
+     */
+    @PreAuthorize("@ss.hasPermi('store:storeProductPackage:add')")
+    @Log(title = "套餐包", businessType = BusinessType.INSERT)
+    @GetMapping("/bulkCopy/{packageIds}")
+    public AjaxResult bulkCopy(@PathVariable Long[] packageIds)
+    {
+        return toAjax(fsStoreProductPackageService.bulkCopyFsPackageByPackage(packageIds));
+    }
 }

+ 3 - 1
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreCouponIssueScrmMapper.java

@@ -85,7 +85,7 @@ public interface FsStoreCouponIssueScrmMapper
     void updateFsStoreCouponIssueCount(Long id);
     @Select({"<script> " +
             "select i.*,c.coupon_price,c.use_min_price,c.coupon_time   from fs_store_coupon_issue_scrm i left join fs_store_coupon_scrm c on c.coupon_id=i.coupon_id  " +
-            "where i.limit_time &gt; now() and i.is_del=0 and i.status=1   " +
+            "where i.limit_time &gt; now() and i.is_del=0 and i.status=1  and (i.is_permanent = 1 or (i.is_permanent = 0 and i.remain_count &lt; i.total_count)) and c.coupon_id is not null " +
             "<if test = 'maps.cateId != null and maps.cateId!=0     '> " +
             "and find_in_set(#{maps.cateId},c.package_cate_ids) " +
             "</if>" +
@@ -133,4 +133,6 @@ public interface FsStoreCouponIssueScrmMapper
             " order by c.coupon_price "+
             "</script>"})
     List<FsStoreCouponIssueVO> selectFsStoreCouponIssueListVO(@Param("maps") FsStoreCouponIssueScrm fsStoreCouponIssue);
+
+    Long countFsStoreCouponIssueByCouponId(@Param("couponId")Long couponId,@Param("startTime")  String startTime);
 }

+ 5 - 1
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreProductPackageScrmMapper.java

@@ -2,6 +2,7 @@ package com.fs.hisStore.mapper;
 
 import java.util.List;
 import com.fs.hisStore.domain.FsStoreProductPackageScrm;
+import com.fs.hisStore.domain.FsUserCompanyPackageScrm;
 import com.fs.hisStore.param.FsStoreProductPackageQueryParam;
 import com.fs.hisStore.vo.FsStoreProductPacketVO;
 import org.apache.ibatis.annotations.Param;
@@ -94,9 +95,12 @@ public interface FsStoreProductPackageScrmMapper
     /**
      * 批量修改商品组合套餐
      *
-     * @param packageIds 需要修改的数据ID
      * @param companyId
      * @return 结果
      */
     public int updateFsStoreProductPackages(@Param("packageIds")Long[] orderIds, @Param("status")Long status, @Param("companyId") Long companyId);
+
+    List<FsStoreProductPackageScrm> selectFsPackageListByIds(@Param("packageIds")Long[] packageIds);
+
+    int updateFsStoreProductPackagesByCompany(@Param("packageIds")Long[] packageIds, @Param("status")Long status, @Param("companyIds")String companyIds);
 }

+ 1 - 0
fs-service/src/main/java/com/fs/hisStore/param/FsStoreProductPackageModifyParam.java

@@ -11,4 +11,5 @@ public class FsStoreProductPackageModifyParam  implements Serializable {
     private Long[] packageIds;
     private Long status;
     private Long companyId;
+    private Long[] companyIds;
 }

+ 2 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreCouponIssueScrmService.java

@@ -76,4 +76,6 @@ public interface IFsStoreCouponIssueScrmService
     List<FsStoreCouponIssueVO> selectFsStoreCouponIssueListVO(FsStoreCouponIssueScrm fsStoreCouponIssue);
 
     R sendFsUserCoupon(FsUserCouponScrmSendParam param);
+
+    Long countFsStoreCouponIssueByCouponId(Long couponId,String startTime);
 }

+ 4 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreProductPackageScrmService.java

@@ -77,4 +77,8 @@ public interface IFsStoreProductPackageScrmService
     public int updateFsStoreProductPackages(Long[] orderIds,Long status,Long companyId);
 
     R sendPackage(FsUsePackageScrmSendParam param);
+
+    int bulkCopyFsPackageByPackage(Long[] packageIds);
+
+    int updateFsStoreProductPackagesByCompany(Long[] packageIds, Long status, Long[] companyIds);
 }

+ 5 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreCouponIssueScrmServiceImpl.java

@@ -234,5 +234,10 @@ public class FsStoreCouponIssueScrmServiceImpl implements IFsStoreCouponIssueScr
         return R.ok("领取成功");
     }
 
+    @Override
+    public Long countFsStoreCouponIssueByCouponId(Long couponId,String startTime) {
+        return fsStoreCouponIssueMapper.countFsStoreCouponIssueByCouponId(couponId,startTime);
+    }
+
 
 }

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

@@ -577,15 +577,15 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         }
         dbOrder.setUserAddress(partialOrder.getUserAddress());
         try {
-            // 4. 构建 ERP 订单对象
-            ErpOrder erpOrder = getErpOrder(dbOrder);
-
-            // 5. 调用对应 ERP 服务(当前是聚水潭ERP)
-            IErpOrderService erpService = erpServiceMap.get(erpType);
-            //执行商城订单推送逻辑
-            ErpOrderResponse response = erpService.addOrderScrm(erpOrder);
-            log.info("ERP地址推送结果 - 商城订单: {}, ERP类型: {}, 成功: {}, 外部单号: {}",
-                    dbOrder.getOrderCode(), erpType, response.getSuccess(), response.getCode());
+        // 4. 构建 ERP 订单对象
+        ErpOrder erpOrder = getErpOrder(dbOrder);
+
+        // 5. 调用对应 ERP 服务(当前是聚水潭ERP)
+        IErpOrderService erpService = erpServiceMap.get(erpType);
+        //执行商城订单推送逻辑
+        ErpOrderResponse response = erpService.addOrderScrm(erpOrder);
+        log.info("ERP地址推送结果 - 商城订单: {}, ERP类型: {}, 成功: {}, 外部单号: {}",
+                dbOrder.getOrderCode(), erpType, response.getSuccess(), response.getCode());
         } catch (Exception e) {
             log.error("修改商城订单地址推送到ERP失败,orderId: {}", partialOrder.getId(), e);
         }
@@ -1383,6 +1383,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
             order.setStatus(OrderInfoEnum.STATUS_2.getValue());
             order.setDeliveryId(deliveryId);
             order.setDeliverySendTime(new Date());
+            order.setUpdateTime(new Date());
 
             fsStoreOrderMapper.updateFsStoreOrder(order);
             orderStatusService.create(order.getId(), OrderLogEnum.DELIVERY_GOODS.getValue(),
@@ -2013,7 +2014,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         }
 
 
-        return "SUCCESS";
+    return "SUCCESS";
 
 
         //非处方直接提交OMS
@@ -5353,6 +5354,16 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         return R.ok().put("orderKey", uuid);
     }
 
+    @Override
+    public void cancelOrderByCode(String outerPayId) {
+        fsStoreOrderMapper.cancelOrderByCode(outerPayId);
+    }
+
+    @Override
+    public void updateFsStoreOrderDb(FsStoreOrderScrm order) {
+        fsStoreOrderMapper.updateFsStoreOrder(order);
+    }
+
     @Override
     public com.fs.his.dto.ExpressInfoDTO getDfExpressInfoDTO(FsStoreOrderScrm order) {
         com.fs.his.dto.ExpressInfoDTO expressInfoDTO = new com.fs.his.dto.ExpressInfoDTO();
@@ -5404,16 +5415,6 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         return expressInfoDTO;
     }
 
-    @Override
-    public void cancelOrderByCode(String outerPayId) {
-        fsStoreOrderMapper.cancelOrderByCode(outerPayId);
-    }
-
-    @Override
-    public void updateFsStoreOrderDb(FsStoreOrderScrm order) {
-        fsStoreOrderMapper.updateFsStoreOrder(order);
-    }
-
     private static final DateTimeFormatter CST_FORMATTER = DateTimeFormatter
             .ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US)
             .withZone(ZoneId.of("Asia/Shanghai"));

+ 80 - 3
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductPackageScrmServiceImpl.java

@@ -1,14 +1,15 @@
 package com.fs.hisStore.service.impl;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
 import com.fs.common.core.domain.R;
+import com.fs.common.utils.StringUtils;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyUserMapper;
+import com.fs.his.domain.FsPackage;
 import com.fs.hisStore.domain.FsStoreProductScrm;
 import com.fs.hisStore.domain.FsStoreProductAttrValueScrm;
 import com.fs.hisStore.domain.FsUserCompanyPackageScrm;
@@ -25,6 +26,7 @@ import org.springframework.stereotype.Service;
 import com.fs.hisStore.mapper.FsStoreProductPackageScrmMapper;
 import com.fs.hisStore.domain.FsStoreProductPackageScrm;
 import com.fs.hisStore.service.IFsStoreProductPackageScrmService;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 商品组合套餐Service业务层处理
@@ -184,4 +186,79 @@ public class FsStoreProductPackageScrmServiceImpl implements IFsStoreProductPack
 
     }
 
+    @Override
+    @Transactional
+    public int bulkCopyFsPackageByPackage(Long[] packageIds) {
+        if (packageIds.length>0){
+            List<FsStoreProductPackageScrm> list = fsStoreProductPackageMapper.selectFsPackageListByIds(packageIds);
+            if(list != null && !list.isEmpty()){
+                try {
+                    for (FsStoreProductPackageScrm fsPackage : list) {
+                        //重命名
+                        fsPackage.setPackageId(null);
+                        fsPackage.setTitle(fsPackage.getTitle() + " - 副本");
+                        fsPackage.setCreateTime(new Date());
+                        fsPackage.setUpdateTime(new Date());
+                        fsStoreProductPackageMapper.insertFsStoreProductPackage(fsPackage);
+                    }
+                } catch (Exception e) {
+                    return 0;
+                }
+            }
+        }
+        return 1;
+    }
+
+    @Override
+    public int updateFsStoreProductPackagesByCompany(Long[] packageIds, Long status, Long[] companyIds) {
+        //判断套餐商品所属公司
+        Set<String> companySet = new LinkedHashSet<>();
+        List<FsStoreProductPackageScrm> list = fsStoreProductPackageMapper.selectFsPackageListByIds(packageIds);
+        if (list != null && !list.isEmpty()) {
+            List<Long> productIds = new ArrayList<>();
+            for (FsStoreProductPackageScrm fsStoreProductPackageScrm : list) {
+                String products = fsStoreProductPackageScrm.getProducts();
+                if (StringUtils.isNotBlank(products)) {
+                    List<StorePackageProductDTO> dtos = JSON.parseArray(products, StorePackageProductDTO.class);
+                    if (dtos != null && !dtos.isEmpty()) {
+                        dtos.forEach(dto -> {
+                            productIds.add(dto.getId());
+                        });
+                    }
+                }
+
+            }
+            if (!productIds.isEmpty()) {
+                List<FsStoreProductScrm> productScrmList = fsStoreProductMapper.getStoreProductInProductIds(productIds);
+                if(productScrmList!=null&& !productScrmList.isEmpty()) {
+                    productScrmList.forEach(fsStoreProductScrm -> {
+                        String companyIdsTemp = fsStoreProductScrm.getCompanyIds();
+                        if (StringUtils.isNotBlank(companyIdsTemp)) {
+                            List<String> companyIdList = Arrays.asList(companyIdsTemp.split(","));
+                            if (!companyIdList.isEmpty()) {
+                                companySet.addAll(companyIdList);
+                            }
+                        }
+                    });
+                }
+            }
+        }
+        StringBuilder companyIdsStr = new StringBuilder();
+        if (companyIds != null && companyIds.length>0){
+            for (Long companyId : companyIds) {
+                if (!companySet.contains(companyId.toString())) {
+                    return 0;
+                }
+                companyIdsStr.append(companyId).append(",");
+            }
+
+        }
+        String companyParam = "";
+        if (companyIdsStr.length()>0){
+            companyIdsStr.deleteCharAt(companyIdsStr.length()-1);
+            companyParam =  companyIdsStr.toString();
+        }
+        return fsStoreProductPackageMapper.updateFsStoreProductPackagesByCompany(packageIds,status,companyParam);
+    }
+
 }

+ 2 - 1
fs-service/src/main/resources/application-config-druid-knt.yml

@@ -88,7 +88,8 @@ tmp_secret_config:
 cloud_host:
   company_name: 康年堂
   projectCode: KNT
-  spaceName:
+  spaceName: cdjnmy-2114522511
+  volcengineUrl: https://cdjnmyvolcengine.ylrztop.com
 headerImg:
   imgUrl: https
 ipad:

+ 4 - 1
fs-service/src/main/resources/mapper/hisStore/FsStoreCouponIssueScrmMapper.xml

@@ -45,7 +45,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectFsStoreCouponIssueVo"/>
         where id = #{id}
     </select>
-        
+    <select id="countFsStoreCouponIssueByCouponId" resultType="java.lang.Long">
+        SELECT count(1) FROM fs_store_coupon_issue_scrm WHERE coupon_id = #{couponId} AND start_time = #{startTime}
+    </select>
+
     <insert id="insertFsStoreCouponIssue" parameterType="FsStoreCouponIssueScrm" useGeneratedKeys="true" keyProperty="id">
         insert into fs_store_coupon_issue_scrm
         <trim prefix="(" suffix=")" suffixOverrides=",">

+ 21 - 2
fs-service/src/main/resources/mapper/hisStore/FsStoreProductPackageScrmMapper.xml

@@ -72,11 +72,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ${maps.params.dataScope}
         order by p.sort desc
     </select>
+    <select id="selectFsPackageListByIds" resultType="com.fs.hisStore.domain.FsStoreProductPackageScrm">
+        <include refid="selectFsStoreProductPackageVo"/>
+        where package_id in
+        <foreach item="packageId" collection="packageIds" open="(" separator="," close=")">
+            #{packageId}
+        </foreach>
+    </select>
 
     <insert id="insertFsStoreProductPackage" parameterType="FsStoreProductPackageScrm">
         insert into fs_store_product_package_scrm
         <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="packageId != null">package_id,</if>
             <if test="title != null">title,</if>
             <if test="descs != null">descs,</if>
             <if test="content != null">content,</if>
@@ -96,7 +102,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="integral != null">integral,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="packageId != null">#{packageId},</if>
             <if test="title != null">#{title},</if>
             <if test="descs != null">#{descs},</if>
             <if test="content != null">#{content},</if>
@@ -166,6 +171,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{packageId}
         </foreach>
     </update>
+    <update id="updateFsStoreProductPackagesByCompany">
+        update  fs_store_product_package_scrm set
+        <if test="status != null">
+            status = #{status},
+        </if>
+
+        <if test="companyIds !=null">
+            company_ids = #{companyIds},
+        </if>
+        where package_id in
+        <foreach item="packageId" collection="packageIds" open="(" separator="," close=")">
+            #{packageId}
+        </foreach>
+    </update>
 
 </mapper>