Browse Source

套餐链接唯一性校验

yuhongqi 1 day ago
parent
commit
e772384bcf

+ 17 - 0
fs-admin/src/main/java/com/fs/store/controller/FsStoreProductPackageController.java

@@ -14,6 +14,7 @@ import com.fs.store.domain.FsStoreProductAttrValue;
 import com.fs.store.dto.StoreOrderProductDTO;
 import com.fs.store.dto.StorePackageProductDTO;
 
+import com.fs.store.param.FsStoreProductPackageCloseSingleLinkModifyParam;
 import com.fs.store.param.FsStoreProductPackageModifyParam;
 import com.fs.store.service.IFsShippingTemplatesService;
 import com.fs.store.service.IFsStoreProductAttrValueService;
@@ -177,6 +178,22 @@ public class FsStoreProductPackageController extends BaseController
         return toAjax(fsStoreProductPackageService.updateFsStoreProductPackages(param.getPackageIds(),param.getStatus()));
     }
 
+    /**
+     * 批量修改关闭单人链接
+     */
+    @PreAuthorize("@ss.hasPermi('store:storeProductPackage:edit')")
+    @Log(title = "商品组合套餐", businessType = BusinessType.UPDATE)
+    @PostMapping("/modifyCloseSingleLinkMore")
+    public AjaxResult modifyCloseSingleLinkMore(@RequestBody FsStoreProductPackageCloseSingleLinkModifyParam param) {
+        if (param.getPackageIds() == null || param.getPackageIds().length == 0) {
+            return AjaxResult.error("请选择套餐");
+        }
+        if (param.getCloseSingleLink() == null) {
+            return AjaxResult.error("请选择是否关闭单人链接");
+        }
+        return toAjax(fsStoreProductPackageService.updateCloseSingleLinkBatch(param.getPackageIds(), param.getCloseSingleLink()));
+    }
+
     /**
      * 新增商品组合套餐
      */

+ 5 - 0
fs-service-system/src/main/java/com/fs/store/domain/FsStoreProductPackage.java

@@ -144,5 +144,10 @@ public class FsStoreProductPackage extends BaseEntity
      */
     private Long templateId;
 
+    /**
+     * 是否关闭单人链接 false否 true是
+     */
+    private Boolean closeSingleLink;
+
 
 }

+ 2 - 0
fs-service-system/src/main/java/com/fs/store/mapper/FsStoreProductPackageMapper.java

@@ -116,4 +116,6 @@ public interface FsStoreProductPackageMapper
      * @return 结果
      */
     public int updateFsStoreProductPackages(@Param("packageIds")Long[] orderIds,@Param("status")Long status);
+
+    int updateCloseSingleLinkBatch(@Param("packageIds") Long[] packageIds, @Param("closeSingleLink") Boolean closeSingleLink);
 }

+ 15 - 0
fs-service-system/src/main/java/com/fs/store/param/FsStoreProductPackageCloseSingleLinkModifyParam.java

@@ -0,0 +1,15 @@
+package com.fs.store.param;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel
+public class FsStoreProductPackageCloseSingleLinkModifyParam implements Serializable {
+
+    private Long[] packageIds;
+
+    private Boolean closeSingleLink;
+}

+ 2 - 0
fs-service-system/src/main/java/com/fs/store/service/IFsStoreProductPackageService.java

@@ -75,4 +75,6 @@ public interface IFsStoreProductPackageService
      */
     public int updateFsStoreProductPackages(Long[] orderIds,Long status);
 
+    int updateCloseSingleLinkBatch(Long[] packageIds, Boolean closeSingleLink);
+
 }

+ 27 - 18
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderServiceImpl.java

@@ -1806,16 +1806,23 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         if (uniqueCodeRecord == null) {
             return R.error("分享码不存在");
         }
-        if (uniqueCodeRecord.getIsUsed() != null && uniqueCodeRecord.getIsUsed() == 1) {
-            return R.error("此链接只能唯一使用")
-                    .put("isUsed", true)
-                    .put("uniqueCode", uniqueCodeRecord.getUniqueCode());
-        }
-        if (param.getPackageId() != null && !param.getPackageId().equals(uniqueCodeRecord.getPackageId())) {
-            return R.error("分享码与套餐不匹配");
-        }
-        if (param.getCompanyUserId() != null && !param.getCompanyUserId().equals(uniqueCodeRecord.getCompanyUserId())) {
-            return R.error("分享码信息不匹配");
+
+        Long packageId = param.getPackageId() != null ? param.getPackageId() : uniqueCodeRecord.getPackageId();
+        FsStoreProductPackage productPackage = productPackageService.selectFsStoreProductPackageById(packageId);
+        boolean skipUniqueCodeCheck = productPackage != null && Boolean.TRUE.equals(productPackage.getCloseSingleLink());
+
+        if (!skipUniqueCodeCheck) {
+            if (uniqueCodeRecord.getIsUsed() != null && uniqueCodeRecord.getIsUsed() == 1) {
+                return R.error("此链接只能唯一使用")
+                        .put("isUsed", true)
+                        .put("uniqueCode", uniqueCodeRecord.getUniqueCode());
+            }
+            if (param.getPackageId() != null && !param.getPackageId().equals(uniqueCodeRecord.getPackageId())) {
+                return R.error("分享码与套餐不匹配");
+            }
+            if (param.getCompanyUserId() != null && !param.getCompanyUserId().equals(uniqueCodeRecord.getCompanyUserId())) {
+                return R.error("分享码信息不匹配");
+            }
         }
 
         IFsStoreOrderService orderServiceProxy = (IFsStoreOrderService) AopContext.currentProxy();
@@ -1824,14 +1831,16 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             return result;
         }
 
-        Object orderObj = result.get("order");
-        if (!(orderObj instanceof FsStoreOrder)) {
-            throw new CustomException("订单创建异常");
-        }
-        FsStoreOrder order = (FsStoreOrder) orderObj;
-        int updated = productPackageUniqueCodeService.markUniqueCodeUsed(uniqueCode, order.getId());
-        if (updated == 0) {
-            throw new CustomException("此链接只能唯一使用");
+        if (!skipUniqueCodeCheck) {
+            Object orderObj = result.get("order");
+            if (!(orderObj instanceof FsStoreOrder)) {
+                throw new CustomException("订单创建异常");
+            }
+            FsStoreOrder order = (FsStoreOrder) orderObj;
+            int updated = productPackageUniqueCodeService.markUniqueCodeUsed(uniqueCode, order.getId());
+            if (updated == 0) {
+                throw new CustomException("此链接只能唯一使用");
+            }
         }
         return result;
     }

+ 5 - 0
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreProductPackageServiceImpl.java

@@ -152,4 +152,9 @@ public class FsStoreProductPackageServiceImpl implements IFsStoreProductPackageS
         return fsStoreProductPackageMapper.updateFsStoreProductPackages(orderIds,status);
     }
 
+    @Override
+    public int updateCloseSingleLinkBatch(Long[] packageIds, Boolean closeSingleLink) {
+        return fsStoreProductPackageMapper.updateCloseSingleLinkBatch(packageIds, closeSingleLink);
+    }
+
 }

+ 11 - 0
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreProductPackageUniqueCodeServiceImpl.java

@@ -3,6 +3,7 @@ package com.fs.store.service.impl;
 import com.fs.common.core.domain.R;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
+import com.fs.store.domain.FsStoreProductPackage;
 import com.fs.store.domain.FsStoreProductPackageUniqueCode;
 import com.fs.store.mapper.FsStoreProductPackageUniqueCodeMapper;
 import com.fs.store.service.IFsStoreProductPackageUniqueCodeService;
@@ -68,6 +69,16 @@ public class FsStoreProductPackageUniqueCodeServiceImpl implements IFsStoreProdu
         if (record == null) {
             return R.error("分享码不存在");
         }
+        FsStoreProductPackage productPackage = productPackageService.selectFsStoreProductPackageById(record.getPackageId());
+        if (productPackage != null && Boolean.TRUE.equals(productPackage.getCloseSingleLink())) {
+            return R.ok("分享码可用")
+                    .put("isUsed", false)
+                    .put("id", record.getId())
+                    .put("packageId", record.getPackageId())
+                    .put("companyId", record.getCompanyId())
+                    .put("companyUserId", record.getCompanyUserId())
+                    .put("uniqueCode", record.getUniqueCode());
+        }
         if (record.getIsUsed() != null && record.getIsUsed() == 1) {
             return R.error("该分享码已被使用")
                     .put("isUsed", true)

+ 13 - 1
fs-service-system/src/main/resources/mapper/store/FsStoreProductPackageMapper.xml

@@ -25,10 +25,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="icgCoupons"    column="icg_coupons"    />
         <result property="icgUrl"    column="icg_url"    />
         <result property="icgMark"    column="icg_mark"    />
+        <result property="templateId"    column="template_id"    />
+        <result property="closeSingleLink"    column="close_single_link"    />
     </resultMap>
 
     <sql id="selectFsStoreProductPackageVo">
-        select package_id, title, descs, content, img_url,images, products, money, pay_money, company_id, dept_id,pay_type,limit_count,cate_id,sort,status,icg_enable,icg_month,icg_coupons,icg_url,icg_mark,template_id from fs_store_product_package
+        select package_id, title, descs, content, img_url,images, products, money, pay_money, company_id, dept_id,pay_type,limit_count,cate_id,sort,status,icg_enable,icg_month,icg_coupons,icg_url,icg_mark,template_id,close_single_link from fs_store_product_package
     </sql>
 
     <select id="selectFsStoreProductPackageList" parameterType="FsStoreProductPackage" resultMap="FsStoreProductPackageResult">
@@ -86,6 +88,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="icgUrl != null">icg_url,</if>
             <if test="icgMark != null">icg_mark,</if>
             <if test="templateId != null">template_id,</if>
+            <if test="closeSingleLink != null">close_single_link,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="packageId != null">#{packageId},</if>
@@ -110,6 +113,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="icgUrl != null">#{icgUrl},</if>
             <if test="icgMark != null">#{icgMark},</if>
             <if test="templateId != null">#{templateId},</if>
+            <if test="closeSingleLink != null">#{closeSingleLink},</if>
          </trim>
     </insert>
 
@@ -137,6 +141,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="icgUrl != null">icg_url = #{icgUrl},</if>
             <if test="icgMark != null">icg_mark = #{icgMark},</if>
             <if test="templateId != null">template_id = #{templateId},</if>
+            <if test="closeSingleLink != null">close_single_link = #{closeSingleLink},</if>
         </trim>
         where package_id = #{packageId}
     </update>
@@ -159,5 +164,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </update>
 
+    <update id="updateCloseSingleLinkBatch">
+        update fs_store_product_package set close_single_link = #{closeSingleLink} where package_id in
+        <foreach item="packageId" collection="packageIds" open="(" separator="," close=")">
+            #{packageId}
+        </foreach>
+    </update>
+
 </mapper>