Browse Source

20250704 窍笔支付记录

lrj 1 month ago
parent
commit
f7d4031337
46 changed files with 1002 additions and 226 deletions
  1. 8 8
      PCS/src/main/java/cn/cslg/permission/common/core/business/SmsService.java
  2. 2 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/PersonVipMessVO.java
  3. 4 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/goods/GoodsAddDTO.java
  4. 3 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/goods/GoodsQueryVO.java
  5. 9 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/label/AddLabelDTO.java
  6. 9 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/label/AddLabelVO.java
  7. 11 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/label/DeleteLabelDTO.java
  8. 12 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/label/DeleteLabelVO.java
  9. 17 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/label/QueryLabelDTO.java
  10. 12 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/label/UpdateLabelDTO.java
  11. 10 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/label/UpdateLabelVO.java
  12. 4 6
      PCS/src/main/java/cn/cslg/permission/common/utils/CacheUtils.java
  13. 23 15
      PCS/src/main/java/cn/cslg/permission/common/utils/LoginUtils.java
  14. 43 0
      PCS/src/main/java/cn/cslg/permission/controller/qiaobi/LabelController.java
  15. 1 0
      PCS/src/main/java/cn/cslg/permission/controller/qiaobi/QiaoBiPersonController.java
  16. 22 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoGoodsLabel.java
  17. 1 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoPersonVipType.java
  18. 1 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/Goods.java
  19. 25 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/QiaobiLabel.java
  20. 35 0
      PCS/src/main/java/cn/cslg/permission/factory/goodLimit/PlusVipCanByGoodLimit.java
  21. 1 0
      PCS/src/main/java/cn/cslg/permission/factory/goodLimit/VipCanByGoodLimit.java
  22. 1 1
      PCS/src/main/java/cn/cslg/permission/factory/strategy/EightCountStrategy.java
  23. 18 0
      PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/AssoGoodsLabelMapper.java
  24. 19 0
      PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/QiaobiLabelMapper.java
  25. 42 0
      PCS/src/main/java/cn/cslg/permission/service/FunctionService.java
  26. 12 33
      PCS/src/main/java/cn/cslg/permission/service/LoginService.java
  27. 6 0
      PCS/src/main/java/cn/cslg/permission/service/impl/TenantVipTypeService.java
  28. 12 4
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/AppVipTypeService.java
  29. 19 10
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoFunctionModuleService.java
  30. 64 0
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoGoodsLabelService.java
  31. 37 14
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoPersonFunctionService.java
  32. 49 23
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoPersonVipTypeService.java
  33. 19 21
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/FunctionUseRecordService.java
  34. 78 10
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/GoodByLimitService.java
  35. 75 3
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/GoodsService.java
  36. 5 5
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/PayOrderService.java
  37. 3 1
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/QiaoBiPersonService.java
  38. 144 0
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/QiaobiLabelService.java
  39. 10 4
      PCS/src/main/java/cn/cslg/permission/service/weixinpay/AuthorizationService.java
  40. 37 19
      PCS/src/main/java/cn/cslg/permission/service/weixinpay/WeixinPayService.java
  41. 9 2
      PCS/src/main/resources/application-dev.yml
  42. 12 3
      PCS/src/main/resources/application-prodNetIn.yml
  43. 4 1
      PCS/src/main/resources/application-prodNetOut.yml
  44. 1 1
      PCS/src/main/resources/application.yml
  45. 46 28
      PCS/src/main/resources/mapper/PayOrderMapper.xml
  46. 27 14
      PCS/src/main/resources/mapper/PersonnelMapper.xml

+ 8 - 8
PCS/src/main/java/cn/cslg/permission/common/core/business/SmsService.java

@@ -33,8 +33,8 @@ public class SmsService {
 //        String templateParam = "{\"code\":\"" + random + "\",\"message\":\"" + "为您的登陆验证码" + "\",\"validTime\":\"" + "5分钟" + "\"}";
         String templateParam = "{\"code\":\"" + random + "\"}";
         request.setPhoneNumbers(phoneNum);//接收短信的手机号码
-        request.setSignName("小世数字科技");//短信签名名称
-        request.setTemplateCode("SMS_296725687");//短信模板CODE
+        request.setSignName("窍笔");//短信签名名称
+        request.setTemplateCode("SMS_496055893");//短信模板CODE
         request.setTemplateParam(templateParam);//短信模板变量对应的实际值
         try {
             SendSmsResponse response = client.getAcsResponse(request);
@@ -57,8 +57,8 @@ public class SmsService {
 //        String templateParam = "{\"code\":\"" + random + "\",\"message\":\"" + "为您的登陆验证码" + "\",\"validTime\":\"" + "5分钟" + "\"}";
         String templateParam = "{\"password\":\"" + password + "\"}";
         request.setPhoneNumbers(phoneNum);//接收短信的手机号码
-        request.setSignName("小世数字科技");//短信签名名称
-        request.setTemplateCode("SMS_474865949");//短信模板CODE
+        request.setSignName("窍笔");//短信签名名称
+        request.setTemplateCode("SMS_495965922");//短信模板CODE
         request.setTemplateParam(templateParam);//短信模板变量对应的实际值
         try {
             SendSmsResponse response = client.getAcsResponse(request);
@@ -77,8 +77,8 @@ public class SmsService {
         IAcsClient client = new DefaultAcsClient(profile);
         SendSmsRequest request = new SendSmsRequest();
         request.setPhoneNumbers(phoneNum);//接收短信的手机号码
-        request.setSignName("小世数字科技");//短信签名名称
-        request.setTemplateCode("SMS_476375293 ");//短信模板CODE
+        request.setSignName("窍笔");//短信签名名称
+        request.setTemplateCode("SMS_495990919 ");//短信模板CODE
         try {
             SendSmsResponse response = client.getAcsResponse(request);
             if (!StringUtils.equals(response.getCode(), "OK")) {
@@ -97,8 +97,8 @@ public class SmsService {
         IAcsClient client = new DefaultAcsClient(profile);
         SendSmsRequest request = new SendSmsRequest();
         request.setPhoneNumbers(phoneNum);//接收短信的手机号码
-        request.setSignName("小世数字科技");//短信签名名称
-        request.setTemplateCode("SMS_476490344 ");//短信模板CODE
+        request.setSignName("窍笔");//短信签名名称
+        request.setTemplateCode("SMS_496060856 ");//短信模板CODE
         String templateParam = "{\"password\":\"" + password + "\"}";
         request.setTemplateParam(templateParam);//短信模板变量对应的实际值
         try {

+ 2 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/PersonVipMessVO.java

@@ -2,6 +2,7 @@ package cn.cslg.permission.common.model.qiaobi;
 
 import cn.cslg.permission.common.model.qiaobi.vipType.QueryPersonVipVO;
 import cn.cslg.permission.common.model.vo.AppVipTypeVO;
+import cn.cslg.permission.common.model.vo.FunctionCodeTreeVO;
 import lombok.Data;
 
 import java.util.Date;
@@ -14,4 +15,5 @@ public class PersonVipMessVO {
     private String vipTypeName;
     private Date expitrTime;
     private Boolean ifInVip;
+    private List<FunctionCodeTreeVO> functionCodeTreeVos;
 }

+ 4 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/goods/GoodsAddDTO.java

@@ -1,5 +1,7 @@
 package cn.cslg.permission.common.model.qiaobi.goods;
 
+import cn.cslg.permission.common.model.qiaobi.label.AddLabelDTO;
+import cn.cslg.permission.common.model.qiaobi.label.AddLabelVO;
 import lombok.Data;
 
 import java.util.Date;
@@ -10,6 +12,7 @@ public class GoodsAddDTO {
     private Integer id;
     private Integer goodId;
     private Double price;
+    private Double orgPrice;
     private String goodName;
 
     private Date startSaleTime;
@@ -28,5 +31,6 @@ public class GoodsAddDTO {
 
     private List<Integer> goodLimits;
     private List<Integer> goodStrategies;
+    private List<AddLabelDTO> labels;
     private Integer status;
 }

+ 3 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/goods/GoodsQueryVO.java

@@ -1,6 +1,7 @@
 package cn.cslg.permission.common.model.qiaobi.goods;
 
 import cn.cslg.permission.common.model.common.CommonVO;
+import cn.cslg.permission.common.model.qiaobi.label.AddLabelVO;
 import cn.cslg.permission.common.model.vo.AppVipTypeVO;
 import cn.cslg.permission.common.model.vo.FunctionCodeTreeVO;
 import lombok.Data;
@@ -39,4 +40,6 @@ public class GoodsQueryVO extends CommonVO {
     private AppVipTypeVO vipMessage;
     private FunctionCodeTreeVO functionMessage;
     private String remark;
+    private List<AddLabelVO> labels;
+    private Double orgPrice;
 }

+ 9 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/label/AddLabelDTO.java

@@ -0,0 +1,9 @@
+package cn.cslg.permission.common.model.qiaobi.label;
+
+import lombok.Data;
+
+@Data
+public class AddLabelDTO {
+    Integer id;
+    String content;
+}

+ 9 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/label/AddLabelVO.java

@@ -0,0 +1,9 @@
+package cn.cslg.permission.common.model.qiaobi.label;
+
+import lombok.Data;
+
+@Data
+public class AddLabelVO {
+    Integer id;
+    String content;
+}

+ 11 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/label/DeleteLabelDTO.java

@@ -0,0 +1,11 @@
+package cn.cslg.permission.common.model.qiaobi.label;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DeleteLabelDTO {
+    private List<Integer> ids;
+    private Boolean ifForced;
+}

+ 12 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/label/DeleteLabelVO.java

@@ -0,0 +1,12 @@
+package cn.cslg.permission.common.model.qiaobi.label;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DeleteLabelVO {
+    private List<Integer> ids;
+    private Boolean ifDelete;
+    private String message;
+}

+ 17 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/label/QueryLabelDTO.java

@@ -0,0 +1,17 @@
+package cn.cslg.permission.common.model.qiaobi.label;
+
+import lombok.Data;
+
+@Data
+public class QueryLabelDTO {
+    /**
+     * 每页条数
+     */
+    private Long current;
+
+    /**
+     * 当前页数
+     */
+    private Long size;
+    private String content;
+}

+ 12 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/label/UpdateLabelDTO.java

@@ -0,0 +1,12 @@
+package cn.cslg.permission.common.model.qiaobi.label;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UpdateLabelDTO {
+    private Integer id;
+    private Boolean ifForced;
+    private String content;
+}

+ 10 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/label/UpdateLabelVO.java

@@ -0,0 +1,10 @@
+package cn.cslg.permission.common.model.qiaobi.label;
+
+import lombok.Data;
+
+@Data
+public class UpdateLabelVO {
+    private Integer id;
+    private Boolean ifUpdate;
+    private String message;
+}

+ 4 - 6
PCS/src/main/java/cn/cslg/permission/common/utils/CacheUtils.java

@@ -22,13 +22,11 @@ public class CacheUtils {
     public PersonnelVO getLoginUser(Object userId) {
         String json = redisUtil.get(RedisConf.LOGIN_USER + RedisConf.SYMBOL_COLON + userId);
         if (StringUtils.isEmpty(json)) {
-//            throw new XiaoShiException(ExceptionEnum.LOGIN_NO_LOGIN,ExceptionEnum.LOGIN_NO_LOGIN.getMessage());
-            PersonnelVO personnelVO = new PersonnelVO();
-            personnelVO.setTenantId(39);
-            personnelVO.setId("463");
-            return personnelVO;
+          throw new XiaoShiException(ExceptionEnum.LOGIN_NO_LOGIN,ExceptionEnum.LOGIN_NO_LOGIN.getMessage());
+
         } else {
-            return JSONObject.parseObject(json, PersonnelVO.class);
+            PersonnelVO personnelVO=JSONObject.parseObject(json, PersonnelVO.class);
+            return personnelVO;
         }
     }
 }

+ 23 - 15
PCS/src/main/java/cn/cslg/permission/common/utils/LoginUtils.java

@@ -2,6 +2,7 @@ package cn.cslg.permission.common.utils;
 
 import cn.cslg.permission.exception.ExceptionEnum;
 import cn.cslg.permission.exception.XiaoShiException;
+import nonapi.io.github.classgraph.json.Id;
 import org.springframework.stereotype.Component;
 import org.springframework.web.context.request.RequestAttributes;
 import org.springframework.web.context.request.RequestContextHolder;
@@ -17,35 +18,42 @@ public class LoginUtils {
     private RedisUtil redisUtil;
 
     public static String getToken() {
+        final String[] token = {null};
         RequestAttributes ra = RequestContextHolder.getRequestAttributes();
         ServletRequestAttributes sra = (ServletRequestAttributes) ra;
         HttpServletRequest httpRequest = sra.getRequest();
         String tem = httpRequest.getHeader("Cookie");
-        System.out.println(tem);
-        List<String> lst = StringUtils.changeStringToString(tem, ";");
-        final String[] token = {null};
-        lst.forEach(item -> {
-            if (item.contains("token")) {
-                token[0] = item;
-            }
-        });
+        if (tem == null) {
+            tem = httpRequest.getHeader("token");
+            token[0] = "token:" + tem;
+
+            System.out.println(tem);
+        } else {
+            System.out.println(tem);
+            List<String> lst = StringUtils.changeStringToString(tem, ";");
+            lst.forEach(item -> {
+                if (item.contains("token")) {
+                    token[0] = item;
+                }
+            });
+        }
         return token[0].replaceAll(" ", "");
     }
 
     public Integer getId() {
-        String oriToken=null;
+        String oriToken = null;
         try {
-             oriToken = LoginUtils.getToken();
+            oriToken = LoginUtils.getToken();
+        } catch (Exception e) {
+
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "未登录");
         }
-       catch (Exception e){
-           throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "未登录");
-       }
         System.out.println("请求头" + oriToken);
         String q = "token:login:" + oriToken.replace("=", ":");
         String IdS = redisUtil.get(q);
         if (IdS == null || IdS.trim().equals("")) {
-            IdS="103";
-            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "令牌过期,请重新登录");
+
+          throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "令牌过期,请重新登录");
         }
         return Integer.parseInt(IdS);
     }

+ 43 - 0
PCS/src/main/java/cn/cslg/permission/controller/qiaobi/LabelController.java

@@ -0,0 +1,43 @@
+package cn.cslg.permission.controller.qiaobi;
+
+import cn.cslg.permission.common.core.base.Constants;
+import cn.cslg.permission.common.model.Records;
+import cn.cslg.permission.common.model.qiaobi.label.*;
+import cn.cslg.permission.common.utils.Response;
+import cn.cslg.permission.common.utils.auth.checkAuth;
+import cn.cslg.permission.service.qiaobi.QiaobiLabelService;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping(Constants.PERMISSION_API + "/label")
+public class LabelController {
+    @Autowired
+private QiaobiLabelService qiaobiLabelService;
+
+    @PostMapping("/deleteLabel")
+    @Operation(summary = "删除标签")
+    public String deleteLabel(@RequestBody DeleteLabelDTO deleteLabelDTO){
+        DeleteLabelVO deleteLabelVO = qiaobiLabelService.deleteLabel(deleteLabelDTO);
+         return Response.success(deleteLabelVO);
+    }
+
+    @PostMapping("/queryLabel")
+    @Operation(summary = "查询标签")
+    public String queryLabel(@RequestBody QueryLabelDTO queryLabelDTO){
+        Records records =qiaobiLabelService.queryLabels(queryLabelDTO);
+        return Response.success(records);
+    }
+
+    @PostMapping("/updateLabel")
+    @Operation(summary = "修改标签")
+    public String updateLabel(@RequestBody UpdateLabelDTO updateLabelDTO){
+     UpdateLabelVO updateLabelVO= qiaobiLabelService.updateLabel(updateLabelDTO);
+        return Response.success(updateLabelVO);
+    }
+}

+ 1 - 0
PCS/src/main/java/cn/cslg/permission/controller/qiaobi/QiaoBiPersonController.java

@@ -79,4 +79,5 @@ public class QiaoBiPersonController {
     public String getAIApiKey() {
         return qiaoBiPersonService.getAiApiKey();
     }
+
 }

+ 22 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoGoodsLabel.java

@@ -0,0 +1,22 @@
+package cn.cslg.permission.domain.qiaobi;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @TableName ASSO_GOODS_LABEL
+ */
+@TableName(value ="ASSO_GOODS_LABEL")
+@Data
+public class AssoGoodsLabel extends Model {
+    private Integer id;
+
+    private Integer goodId;
+
+    private Integer labelId;
+
+    private static final long serialVersionUID = 1L;
+}

+ 1 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoPersonVipType.java

@@ -30,4 +30,5 @@ public class AssoPersonVipType extends Model {
      * 1商品 2邀请
      */
    private Integer fromType;
+   private Integer tenantId;
 }

+ 1 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/Goods.java

@@ -20,6 +20,7 @@ public class Goods extends Model {
     private Integer id;
     private String goodName;
     private Double price;
+    private Double orgPrice;
     private Integer goodId;
     /**
      * 商品类型 1会员 2功能

+ 25 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/QiaobiLabel.java

@@ -0,0 +1,25 @@
+package cn.cslg.permission.domain.qiaobi;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @TableName QIAOBI_LABEL
+ */
+@TableName(value ="QIAOBI_LABEL")
+@Data
+public class QiaobiLabel extends Model {
+    private Integer id;
+
+    private String content;
+
+    private Date createTime;
+
+    private Integer createId;
+
+    private static final long serialVersionUID = 1L;
+}

+ 35 - 0
PCS/src/main/java/cn/cslg/permission/factory/goodLimit/PlusVipCanByGoodLimit.java

@@ -0,0 +1,35 @@
+package cn.cslg.permission.factory.goodLimit;
+
+import cn.cslg.permission.common.model.qiaobi.PersonVipMessVO;
+import cn.cslg.permission.common.model.qiaobi.payOrder.OrderGoodDTO;
+import cn.cslg.permission.common.utils.LoginUtils;
+import cn.cslg.permission.exception.ExceptionEnum;
+import cn.cslg.permission.exception.XiaoShiException;
+import cn.cslg.permission.service.qiaobi.AssoPersonVipTypeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class PlusVipCanByGoodLimit implements GoodLimitFactoryImp {
+    @Autowired
+    private AssoPersonVipTypeService assoPersonVipTypeService;
+    @Autowired
+    private LoginUtils loginUtils;
+
+    @Override
+    public OrderGoodDTO DoGoodLimit(OrderGoodDTO orderGoodDTO) {
+        PersonVipMessVO personVipMessVO = assoPersonVipTypeService.getPersonVipMessage(loginUtils.getId());
+        Boolean ifInVip = personVipMessVO.getIfInVip();
+        if (!ifInVip) {
+
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "只有个人plus会员才能购买");
+        }
+       Integer id = personVipMessVO.getId();
+        if(id==null||id!=41){
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "只有个人plus会员才能购买");
+
+        }
+         return null;
+    }
+
+}

+ 1 - 0
PCS/src/main/java/cn/cslg/permission/factory/goodLimit/VipCanByGoodLimit.java

@@ -28,4 +28,5 @@ public class VipCanByGoodLimit implements GoodLimitFactoryImp {
         }
          return null;
     }
+
 }

+ 1 - 1
PCS/src/main/java/cn/cslg/permission/factory/strategy/EightCountStrategy.java

@@ -17,7 +17,7 @@ public class EightCountStrategy implements StrategyImp {
             Double value1 = BigDecimalUtil.multiplication(a, 10);
             Double value2 = BigDecimalUtil.multiplication(price, 0.2);
             Double value3 = BigDecimalUtil.multiplication(value1, value2);
-            totalPrice = BigDecimalUtil.subtraction(totalPrice, value3, 2);
+            totalPrice = BigDecimalUtil.subtraction(totalPrice, value3, 8);
             orderGoodDTO.setTotalPrice(totalPrice);
         }
         return orderGoodDTO;

+ 18 - 0
PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/AssoGoodsLabelMapper.java

@@ -0,0 +1,18 @@
+package cn.cslg.permission.mapper.qiaobi;
+
+import cn.cslg.permission.domain.qiaobi.AssoGoodsLabel;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author admin
+* @description 针对表【ASSO_GOODS_LABEL(商品和标签关联表)】的数据库操作Mapper
+* @createDate 2025-09-04 11:00:13
+* @Entity generator.domain.AssoGoodsLabel
+*/
+public interface AssoGoodsLabelMapper extends BaseMapper<AssoGoodsLabel> {
+
+}
+
+
+
+

+ 19 - 0
PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/QiaobiLabelMapper.java

@@ -0,0 +1,19 @@
+package cn.cslg.permission.mapper.qiaobi;
+
+
+import cn.cslg.permission.domain.qiaobi.QiaobiLabel;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author admin
+* @description 针对表【QIAOBI_LABEL(窍笔标签)】的数据库操作Mapper
+* @createDate 2025-09-04 11:00:24
+* @Entity generator.domain.QiaobiLabel
+*/
+public interface QiaobiLabelMapper extends BaseMapper<QiaobiLabel> {
+
+}
+
+
+
+

+ 42 - 0
PCS/src/main/java/cn/cslg/permission/service/FunctionService.java

@@ -547,9 +547,11 @@ public class FunctionService extends ServiceImpl<FunctionMapper, Function> {
             FunctionCodeTreeVO functionCodeTreeVO = functionCodeTreeVOS1.remove(0);
             List<Function> childFunctions = functionList.stream().filter(item -> item.getFunctionUp().equals(functionCodeTreeVO.getId())).collect(Collectors.toList());
             List<FunctionCodeTreeVO> childVos = new ArrayList<>();
+
             if (childFunctions != null & childFunctions.size() > 0) {
                 childFunctions.forEach(item -> {
                     FunctionCodeTreeVO childVo = AssoFunctionModuleService.loadFunctionCodeTreeVO2(item, null,assoTenantVipTypeAndFunctions);
+
                     if (functionIds.contains(childVo.getId())) {
                         childVo.setIsSelect(1);
                     } else {
@@ -596,4 +598,44 @@ public class FunctionService extends ServiceImpl<FunctionMapper, Function> {
 
         return functionCodeTreeVOS2;
     }
+
+
+
+    public List<FunctionCodeTreeVO> queryVipTypeFunctionTree(Integer vipTypeId) {
+
+        List<AssoTenantVipTypeAndFunction> assoTenantVipTypeAndFunctions = assoTenantVipTypeFunctionService.getAssoFunctions(vipTypeId);
+        List<Integer>  functionIds= assoTenantVipTypeAndFunctions.stream().map(AssoTenantVipTypeAndFunction::getFunctionId).collect(Collectors.toList());
+        List<FunctionCodeTreeVO> functionCodeTreeVOS = new ArrayList<>();
+        //根据versionId查询功能
+        List<Function> functionList = new ArrayList<>();
+            functionList = this.getFuncListByIds(functionIds);
+
+        if (functionList == null || functionList.size() == 0) {
+            return functionCodeTreeVOS;
+        }
+        List<Function> rootFunctionList = functionList.stream().filter(item -> item.getFunctionUp() != null && item.getFunctionUp().equals(0)).collect(Collectors.toList());
+
+        List<FunctionCodeTreeVO> functionCodeTreeVOS1 = new ArrayList<>();
+        rootFunctionList.forEach(item -> {
+
+            FunctionCodeTreeVO functionCodeTreeVO = AssoFunctionModuleService.loadFunctionCodeTreeVO2(item, null,null);
+            functionCodeTreeVOS1.add(functionCodeTreeVO);
+        });
+        List<FunctionCodeTreeVO> functionCodeTreeVOS2 = new ArrayList<>();
+        functionCodeTreeVOS2.addAll(functionCodeTreeVOS1);
+         while (functionCodeTreeVOS1.size() > 0) {
+            FunctionCodeTreeVO functionCodeTreeVO = functionCodeTreeVOS1.remove(0);
+            List<Function> childFunctions = functionList.stream().filter(item -> item.getFunctionUp().equals(functionCodeTreeVO.getId())).collect(Collectors.toList());
+            List<FunctionCodeTreeVO> childVos = new ArrayList<>();
+            if (childFunctions != null & childFunctions.size() > 0) {
+                childFunctions.forEach(item -> {
+                    FunctionCodeTreeVO childVo = AssoFunctionModuleService.loadFunctionCodeTreeVO2(item, null,null);
+                    childVos.add(childVo);
+                });
+            }
+            functionCodeTreeVOS1.addAll(childVos);
+            functionCodeTreeVO.setChildren(childVos);
+        }
+        return functionCodeTreeVOS2;
+    }
 }

+ 12 - 33
PCS/src/main/java/cn/cslg/permission/service/LoginService.java

@@ -100,7 +100,8 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
     private FunctionUseRecordService functionUseRecordService;
     @Autowired
     private LoginUtils loginUtils;
-
+@Autowired
+private PersonnelService personnelService;
     /**
      * @param loginVO 登录参数类
      * @return 登录成功的信息
@@ -415,8 +416,13 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
         //Sa-token 登录方法 登录后 生成Token 如果集成了Redis的话 会自动存入Redis
         StpUtil.login(personnel.getId());
         loginVO.setToken(StpUtil.getTokenValue());
+
+        PersonnelVO personnelVO = personnelService.pushData(personnel);
+        //将用户信息数据存入Redis
+        cacheUtils.setLoginUser(personnelVO);
         PersonVipMessVO personVipMessVO = new PersonVipMessVO();
-        QueryPersonVipVO queryPersonVipVO = assoPersonVipTypeService.getPersonVIpMessage2(personnel.getId());
+
+        QueryPersonVipVO queryPersonVipVO = assoPersonVipTypeService.getPersonVIpMessage2(personnel.getId(), personnel.getTenantId());
         personVipMessVO.setVip(queryPersonVipVO);
         if (queryPersonVipVO != null) {
             personVipMessVO.setExpitrTime(queryPersonVipVO.getExpitrTime());
@@ -566,7 +572,7 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
             version = "1.0.0.0";
         }
         this.checkedRational(sign, appKey, vo.getCurrentTimeMillis());
-        Integer userId = StpUtil.getLoginIdAsInt();
+        Integer userId = loginUtils.getId();
 //        Integer userId = 3;
         Personnel personnel = this.getById(userId);
         if (ObjectUtils.isEmpty(personnel)) {
@@ -615,7 +621,7 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
         permissions1.removeAll(permissions);
         List<EncryptionFunctionVO> list1 = this.loadFunctionVOS(permissions1, 1, symmetryKey, version);
         functionVOS.addAll(list1);
-        this.loadFunctionVOUseCount(functionVOS);
+//        this.loadFunctionVOUseCount(functionVOS);
         finalVO.setFunctionVOS(functionVOS);
         String key = RSAUtils.encryptByPublicKey(symmetryKey, publicKey);
         finalVO.setKey(key);
@@ -632,10 +638,11 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
         for (Function function : functions) {
             Integer functionId = function.getId();
             String functionPath = function.getFunctionPath();
+
             AssoFunctionModule functionModule = assoFunctionModuleMapper.selectOne(new LambdaQueryWrapper<AssoFunctionModule>()
                     .eq(AssoFunctionModule::getFunctionId, functionId)
                     .eq(AssoFunctionModule::getAuthType, type)
-                    .eq(AssoFunctionModule::getVersion, version));
+                    .eq(AssoFunctionModule::getVersion, version).last("limit 1"));
             if (ObjectUtils.isNotEmpty(functionModule) && StringUtils.isNotEmpty(functionModule.getCode())) {
                 String moduleCode = functionModule.getCode();
                 String encryptInfo = AESUtils.encrypt(moduleCode, symmetryKey);
@@ -787,33 +794,5 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
         return res;
     }
 
-    private List<EncryptionFunctionVO> loadFunctionVOUseCount(List<EncryptionFunctionVO> encryptionFunctionVOS) throws Exception {
-        if (encryptionFunctionVOS == null || encryptionFunctionVOS.size() == 0) {
-            return encryptionFunctionVOS;
-        }
-        List<AssoPersonFunction> assoPersonFunctionList = assoPersonFunctionService.getPersonFunction();
-        List<FunctionRecordGroupVO> functionRecordGroupVOS = functionUseRecordService.getPersonFunctionRecord(null);
-        for (EncryptionFunctionVO encryptionFunctionVO : encryptionFunctionVOS) {
-            Integer type = encryptionFunctionVO.getType();
-            Integer canUseCount = encryptionFunctionVO.getCanUseCount();
-            if (type == 2 && canUseCount != null) {
-                Integer functionId = encryptionFunctionVO.getFunctionId();
-                AssoPersonFunction assoPersonFunction = assoPersonFunctionList.stream().filter(item -> item.getFunctionId().equals(functionId)).findFirst().orElse(null);
-                FunctionRecordGroupVO functionRecordGroupVO = functionRecordGroupVOS.stream().filter(item -> item.getFunctionId().equals(functionId)).findFirst().orElse(null);
-                if (assoPersonFunction != null) {
-                    if (assoPersonFunction.getCanUseCount() != null) {
-                        canUseCount = canUseCount + assoPersonFunction.getCanUseCount();
-                    }
-                }
-                if (functionRecordGroupVO != null) {
-                    if (functionRecordGroupVO.getUseCount() != null) {
-                        canUseCount = canUseCount - functionRecordGroupVO.getUseCount();
-                    }
-                }
-                encryptionFunctionVO.setCanUseCount(canUseCount);
-            }
-        }
-        return encryptionFunctionVOS;
-    }
 
 }

+ 6 - 0
PCS/src/main/java/cn/cslg/permission/service/impl/TenantVipTypeService.java

@@ -300,5 +300,11 @@ public class TenantVipTypeService extends ServiceImpl<TenantVipTypeMapper, Tenan
 
 
     }
+   public List<TenantVipType> getByIds(List<Integer> ids){
+        LambdaQueryWrapper<TenantVipType> queryWrapper =new LambdaQueryWrapper<>();
+        queryWrapper.in(TenantVipType::getId,ids);
+        List<TenantVipType> tenantVipTypes =this.list(queryWrapper);
+        return tenantVipTypes;
 
+   }
 }

+ 12 - 4
PCS/src/main/java/cn/cslg/permission/service/qiaobi/AppVipTypeService.java

@@ -62,7 +62,8 @@ public class AppVipTypeService extends ServiceImpl<AppVipTypeMapper, AppVipType>
     private final FunctionService functionService;
     @Lazy
     private final GoodsService goodsService;
-    public final static Integer freeVipTypeId=1;
+    public final static Integer freeVipTypeId = 40;
+
     public List<QiaoBiVIPTypeVO> qiaoBiVIPTypeVOList(QiaoBiVipTypeDTO qiaoBiVipTypeDTO) {
         qiaoBiVipTypeDTO.setAppCode("4e95e3d926a2a4befa5d913acc0aa9f5");
         List<QiaoBiVIPTypeVO> qiaoBiVIPTypeVOList = this.getBaseMapper().queryQiaobiVipTypeVOs(qiaoBiVipTypeDTO);
@@ -264,16 +265,21 @@ public class AppVipTypeService extends ServiceImpl<AppVipTypeMapper, AppVipType>
         loginRecordVO.setLoginResult("获取会员信息");
         loginRecordService.addLoginRecord(loginRecordVO);
         PersonVipMessVO personVipMessVO = new PersonVipMessVO();
-        QueryPersonVipVO queryPersonVipVO = assoPersonVipTypeService.getPersonVIpMessage();
+        QueryPersonVipVO queryPersonVipVO = assoPersonVipTypeService.getPersonActiveVip();
         personVipMessVO.setVip(queryPersonVipVO);
-        personVipMessVO.setIfInVip(queryPersonVipVO.getIfInVip());
+        Integer vipTypeId = queryPersonVipVO.getVipTypeId();
+        List<FunctionCodeTreeVO> functionCodeTreeVOS = functionService.queryVipTypeFunctionTree(vipTypeId);
+        personVipMessVO.setFunctionCodeTreeVos(functionCodeTreeVOS);
         return personVipMessVO;
     }
 
     @Transactional(rollbackFor = Exception.class)
     public void deleteGoods(List<Integer> ids) {
         this.checkGoodDelete(ids);
-        this.removeByIds(ids);
+        LambdaQueryWrapper<AppVipType> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(AppVipType::getTenantVipTypeId,ids);
+        this.remove(queryWrapper);
+        tenantVipTypeService.removeByIds(ids);
     }
 
     public void checkGoodDelete(List<Integer> ids) {
@@ -283,6 +289,8 @@ public class AppVipTypeService extends ServiceImpl<AppVipTypeMapper, AppVipType>
             throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "该会员正在作为商品,禁止删除");
         }
     }
+
+
 }
 
 

+ 19 - 10
PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoFunctionModuleService.java

@@ -224,16 +224,22 @@ public class AssoFunctionModuleService extends ServiceImpl<AssoFunctionModuleMap
         }
         List<FunctionCodeTreeVO> functionCodeTreeVOS = new ArrayList<>();
         //根据versionId查询功能
-        List<AssoVersionFunction> assoVersionFunctions = assoVersionFunctionService.getByVersionId(versionId);
-        if (assoVersionFunctions == null || assoVersionFunctions.size() == 0) {
-            return functionCodeTreeVOS;
-        }
+//        List<AssoVersionFunction> assoVersionFunctions = assoVersionFunctionService.getByVersionId(versionId);
+//        if (assoVersionFunctions == null || assoVersionFunctions.size() == 0) {
+//            return functionCodeTreeVOS;
+//        }
         //根据versionId 查询功能代码
         List<AssoFunctionModule> assoFunctionModules = this.getByVersionId(versionId);
 
-        List<Integer> functionIds = assoVersionFunctions.stream().map(AssoVersionFunction::getFunctionId).collect(Collectors.toList());
+//        List<Integer> functionIds = assoVersionFunctions.stream().map(AssoVersionFunction::getFunctionId).collect(Collectors.toList());
 
-        List<Function> functionList = functionService.getFuncListByIds(functionIds);
+        LambdaQueryWrapper<Function> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Function::getApplicationId, 14);
+        List<Function> functionList = functionService.list(queryWrapper);
+        if (functionList == null || functionList.size() == 0) {
+            return functionCodeTreeVOS;
+        }
+//        List<Function> functionList = functionService.getFuncListByIds(functionIds);
         List<Function> rootFunctionList = functionList.stream().filter(item -> item.getFunctionUp() != null && item.getFunctionUp().equals(0)).collect(Collectors.toList());
 
         List<FunctionCodeTreeVO> functionCodeTreeVOS1 = new ArrayList<>();
@@ -270,14 +276,17 @@ public class AssoFunctionModuleService extends ServiceImpl<AssoFunctionModuleMap
     }
 
 
-    public static FunctionCodeTreeVO loadFunctionCodeTreeVO2(Function function, List<AssoFunctionModule> assoFunctionModules,List<AssoTenantVipTypeAndFunction> assoTenantVipTypeAndFunctions) {
-        Integer id =function.getId();
-        AssoTenantVipTypeAndFunction assoTenantVipTypeAndFunction= assoTenantVipTypeAndFunctions.stream().filter(item->item.getFunctionId().equals(id)).findFirst().orElse(null);
+    public static FunctionCodeTreeVO loadFunctionCodeTreeVO2(Function function, List<AssoFunctionModule> assoFunctionModules, List<AssoTenantVipTypeAndFunction> assoTenantVipTypeAndFunctions) {
+        Integer id = function.getId();
+        AssoTenantVipTypeAndFunction assoTenantVipTypeAndFunction = null;
+        if (assoTenantVipTypeAndFunctions != null) {
+            assoTenantVipTypeAndFunction = assoTenantVipTypeAndFunctions.stream().filter(item -> item.getFunctionId().equals(id)).findFirst().orElse(null);
+        }
         FunctionCodeTreeVO functionCodeTreeVO = new FunctionCodeTreeVO();
         FunctionVO functionVO = FunctionService.transformToVo(function);
         BeanUtils.copyProperties(functionVO, functionCodeTreeVO);
         functionCodeTreeVO.setFunctionCodes(assoFunctionModules);
-        if(assoTenantVipTypeAndFunction!=null){
+        if (assoTenantVipTypeAndFunction != null) {
             functionCodeTreeVO.setCanUseCount(assoTenantVipTypeAndFunction.getCanUseCount());
         }
 

+ 64 - 0
PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoGoodsLabelService.java

@@ -0,0 +1,64 @@
+package cn.cslg.permission.service.qiaobi;
+
+import cn.cslg.permission.domain.qiaobi.AssoGoodsLabel;
+import cn.cslg.permission.mapper.qiaobi.AssoGoodsLabelMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author admin
+ * @description 针对表【ASSO_GOODS_LABEL(商品和标签关联表)】的数据库操作Service实现
+ * @createDate 2025-09-04 11:00:13
+ */
+@Service
+public class AssoGoodsLabelService extends ServiceImpl<AssoGoodsLabelMapper, AssoGoodsLabel> {
+    public List<AssoGoodsLabel> getAssoGoodsLabels(List<Integer> ids) {
+        List<AssoGoodsLabel> assoGoodsLabels = new ArrayList<>();
+        LambdaQueryWrapper<AssoGoodsLabel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(AssoGoodsLabel::getLabelId, ids);
+        assoGoodsLabels = this.list(queryWrapper);
+        return assoGoodsLabels;
+    }
+    public List<AssoGoodsLabel> getAssoGoodsLabelsByGood(List<Integer> ids) {
+        List<AssoGoodsLabel> assoGoodsLabels = new ArrayList<>();
+        LambdaQueryWrapper<AssoGoodsLabel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(AssoGoodsLabel::getGoodId, ids);
+        assoGoodsLabels = this.list(queryWrapper);
+        return assoGoodsLabels;
+    }
+    public void deleteByLabelIds(List<Integer> labelIds){
+        LambdaQueryWrapper<AssoGoodsLabel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(AssoGoodsLabel::getLabelId, labelIds);
+        this.remove(queryWrapper);
+    }
+    public void deleteByGoodIds(List<Integer> goodIds){
+        LambdaQueryWrapper<AssoGoodsLabel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(AssoGoodsLabel::getGoodId, goodIds);
+        this.remove(queryWrapper);
+    }
+    public void addAssoGoodsLabels(Integer goodId,List<Integer> labelIds){
+        List<AssoGoodsLabel> assoGoodsLabels =new ArrayList<>();
+         for (Integer labelId:labelIds){
+             AssoGoodsLabel assoGoodsLabel =new AssoGoodsLabel();
+             assoGoodsLabel.setLabelId(labelId);
+             assoGoodsLabel.setGoodId(goodId);
+             assoGoodsLabels.add(assoGoodsLabel);
+         }
+         this.saveBatch(assoGoodsLabels);
+    }
+    public void deleteAssoGoodsLabels(Integer goodId){
+        LambdaQueryWrapper<AssoGoodsLabel> queryWrapper =new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoGoodsLabel::getGoodId,goodId);
+        this.remove(queryWrapper);
+    }
+
+}
+
+
+
+

+ 37 - 14
PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoPersonFunctionService.java

@@ -1,36 +1,59 @@
 package cn.cslg.permission.service.qiaobi;
 
+import cn.cslg.permission.common.model.vo.PersonnelVO;
+import cn.cslg.permission.common.utils.CacheUtils;
 import cn.cslg.permission.common.utils.LoginUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import cn.cslg.permission.domain.qiaobi.AssoPersonFunction;
 import cn.cslg.permission.mapper.qiaobi.AssoPersonFunctionMapper;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
 
 /**
-* @author admin
-* @description 针对表【ASSO_PERSON_FUNCTION(人员和功能关联表)】的数据库操作Service实现
-* @createDate 2025-07-06 19:31:20
-*/
+ * @author admin
+ * @description 针对表【ASSO_PERSON_FUNCTION(人员和功能关联表)】的数据库操作Service实现
+ * @createDate 2025-07-06 19:31:20
+ */
 @Service
 public class AssoPersonFunctionService extends ServiceImpl<AssoPersonFunctionMapper, AssoPersonFunction> {
     @Autowired
     private LoginUtils loginUtils;
-    public List<AssoPersonFunction>  getPersonFunction(){
-      Integer personId =loginUtils.getId();
-        LambdaQueryWrapper<AssoPersonFunction> queryWrapper =new LambdaQueryWrapper<>();
-        queryWrapper.eq(AssoPersonFunction::getPersonId,personId);
-        List<AssoPersonFunction> assoPersonFunctionList =this.list(queryWrapper);
+    @Autowired
+    private CacheUtils cacheUtils;
+    @Value("${retailTenantId}")
+    private Integer retailTenantId;
+
+    public List<AssoPersonFunction> getPersonFunction() {
+        Integer personId = loginUtils.getId();
+        LambdaQueryWrapper<AssoPersonFunction> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoPersonFunction::getPersonId, personId);
+        List<AssoPersonFunction> assoPersonFunctionList = this.list(queryWrapper);
         return assoPersonFunctionList;
     }
-    public AssoPersonFunction  getPersonFunction(Integer personId,Integer functionId){
-    LambdaQueryWrapper<AssoPersonFunction> queryWrapper =new LambdaQueryWrapper<>();
-    queryWrapper.eq(AssoPersonFunction::getFunctionId,functionId)
-                .eq(AssoPersonFunction::getPersonId,personId);
-    AssoPersonFunction assoPersonFunction =this.getOne(queryWrapper,false);
+
+    public AssoPersonFunction getPersonFunction(Integer functionId) {
+        Integer personId = loginUtils.getId();
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(personId);
+        Integer tenantId = personnelVO.getTenantId();
+        AssoPersonFunction assoPersonFunction = this.getPersonFunction(personId, tenantId, functionId);
+        return assoPersonFunction;
+    }
+
+    public AssoPersonFunction getPersonFunction(Integer personId, Integer tenantId, Integer functionId) {
+
+        LambdaQueryWrapper<AssoPersonFunction> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoPersonFunction::getFunctionId, functionId);
+        if (tenantId != retailTenantId) {
+            queryWrapper.eq(AssoPersonFunction::getTenantId, tenantId);
+        } else {
+            queryWrapper.eq(AssoPersonFunction::getPersonId, personId);
+
+        }
+        AssoPersonFunction assoPersonFunction = this.getOne(queryWrapper, false);
         return assoPersonFunction;
     }
 }

+ 49 - 23
PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoPersonVipTypeService.java

@@ -9,10 +9,12 @@ import cn.cslg.permission.common.model.vo.PersonnelVO;
 import cn.cslg.permission.common.utils.CacheUtils;
 import cn.cslg.permission.common.utils.DateUtils;
 import cn.cslg.permission.common.utils.LoginUtils;
+import cn.cslg.permission.domain.Personnel;
 import cn.cslg.permission.domain.TenantVipType;
 import cn.cslg.permission.domain.qiaobi.AppVipType;
 import cn.cslg.permission.domain.qiaobi.Goods;
 import cn.cslg.permission.mapper.qiaobi.AppVipTypeMapper;
+import cn.cslg.permission.service.PersonnelService;
 import cn.cslg.permission.service.impl.TenantVipTypeService;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
@@ -50,6 +52,8 @@ public class AssoPersonVipTypeService extends ServiceImpl<AssoPersonVipTypeMappe
     private Integer retailTenantId;
     @Autowired
     private CacheUtils cacheUtils;
+    @Autowired
+    private PersonnelService personnelService;
 
     public AssoPersonVipType addVip(Integer personId, Integer vipTypeId, Integer lastTime) {
         AssoPersonVipType assoPersonVip = new AssoPersonVipType();
@@ -145,7 +149,7 @@ public class AssoPersonVipTypeService extends ServiceImpl<AssoPersonVipTypeMappe
             personVipMessVO.setIfInVip(false);
             vipId = AppVipTypeService.freeVipTypeId;
         }
-
+        personVipMessVO.setId(vipId);
         return personVipMessVO;
     }
 
@@ -180,11 +184,26 @@ public class AssoPersonVipTypeService extends ServiceImpl<AssoPersonVipTypeMappe
         Integer flag = 0;
         QueryPersonVipDTO queryPersonVipDTO = new QueryPersonVipDTO();
         queryPersonVipDTO.setPersonId(personId);
+        Personnel personnel = personnelService.getById(personId);
+        Integer tenantId = null;
+        if (personnel != null) {
+            tenantId = personnel.getTenantId();
+        }
         LambdaQueryWrapper<AssoPersonVipType> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(AssoPersonVipType::getPersonId, personId);
+        if (!retailTenantId.equals(tenantId) && tenantId != null) {
+            queryWrapper.eq(AssoPersonVipType::getTenantId, tenantId);
+        } else {
+            queryWrapper.eq(AssoPersonVipType::getPersonId, personId);
+        }
+
         AssoPersonVipType assoPersonVipType = this.getOne(queryWrapper, false);
 
         if (assoPersonVipType == null) {
+            assoPersonVipType = new AssoPersonVipType();
+
+            if (personnel != null) {
+                assoPersonVipType.setTenantId(personnel.getTenantId());
+            }
             assoPersonVipType.setCreateTime(now);
             assoPersonVipType.setExpitrTime(DateUtils.getPlusMonthDate(assoPersonVipType.getCreateTime(), lastMonth));
             assoPersonVipType.setPersonId(personId);
@@ -249,9 +268,9 @@ public class AssoPersonVipTypeService extends ServiceImpl<AssoPersonVipTypeMappe
         return assoPersonVip;
     }
 
-    public AssoPersonVipType addSignUpVip(Integer personId, Integer timUnit) {
+    public AssoPersonVipType addSignUpVip(Integer personId, Integer timUnit,Integer vipTypeId) {
+
 
-        Integer vipTypeId = 39;
         AssoPersonVipType assoPersonVip = new AssoPersonVipType();
         LambdaQueryWrapper<AssoPersonVipType> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(AssoPersonVipType::getPersonId, personId)
@@ -272,32 +291,25 @@ public class AssoPersonVipTypeService extends ServiceImpl<AssoPersonVipTypeMappe
     }
 
     public QueryPersonVipVO getPersonActiveVip() {
-        QueryPersonVipVO queryPersonVipVO = null;
+        QueryPersonVipVO queryPersonVipVO = new QueryPersonVipVO();
+        queryPersonVipVO.setIfInVip(false);
+        queryPersonVipVO.setVipTypeId(AppVipTypeService.freeVipTypeId);
         Integer personId = loginUtils.getId();
         PersonnelVO personnelVO = cacheUtils.getLoginUser(personId);
-        Integer tenantId = personnelVO.getTenantId();
-        QueryPersonVipDTO queryPersonVipDTO = new QueryPersonVipDTO();
-        queryPersonVipDTO.setPersonId(personId);
-        queryPersonVipDTO.setPersonId(personId);
 
-        List<QueryPersonVipVO> queryPersonVipVOList = this.getBaseMapper().getPersonActiveVip(queryPersonVipDTO);
-        if (queryPersonVipVOList != null && queryPersonVipVOList.size() > 0) {
-            queryPersonVipVO = queryPersonVipVOList.get(0);
-            queryPersonVipVO.setIfInVip(true);
-        }
+        Integer tenantId = personnelVO.getTenantId();
 
-        return queryPersonVipVO;
+        return this.getPersonActiveVip(personId, tenantId);
     }
 
-    public QueryPersonVipVO getPersonVIpMessage2(Integer personId) {
-        QueryPersonVipVO queryPersonVipVO = this.getPersonActiveVip(personId);
+    public QueryPersonVipVO getPersonVIpMessage2(Integer personId, Integer tenantId) {
+        QueryPersonVipVO queryPersonVipVO = this.getPersonActiveVip(personId, tenantId);
         Integer vipId = null;
         if (queryPersonVipVO == null) {
             queryPersonVipVO = new QueryPersonVipVO();
             queryPersonVipVO.setIfInVip(false);
-            queryPersonVipVO.setVipTypeId(vipId);
             vipId = AppVipTypeService.freeVipTypeId;
-
+            queryPersonVipVO.setVipTypeId(vipId);
         }
         TenantVipType tenantVipType = tenantVipTypeService.getById(vipId);
         if (tenantVipType != null) {
@@ -306,19 +318,33 @@ public class AssoPersonVipTypeService extends ServiceImpl<AssoPersonVipTypeMappe
         return queryPersonVipVO;
     }
 
-    public QueryPersonVipVO getPersonActiveVip(Integer personId) {
-        QueryPersonVipVO queryPersonVipVO = null;
+    public QueryPersonVipVO getPersonActiveVip(Integer personId, Integer tenantId) {
+        Integer vipId=AppVipTypeService.freeVipTypeId;
+        QueryPersonVipVO queryPersonVipVO = new QueryPersonVipVO();
+        queryPersonVipVO.setVipTypeId(AppVipTypeService.freeVipTypeId);
+        queryPersonVipVO.setIfInVip(false);
+        queryPersonVipVO.setVipLevel(1);
         QueryPersonVipDTO queryPersonVipDTO = new QueryPersonVipDTO();
-        queryPersonVipDTO.setPersonId(personId);
-
+        if (tenantId != retailTenantId) {
+            queryPersonVipDTO.setTenantId(tenantId);
+        } else {
+            queryPersonVipDTO.setPersonId(personId);
+        }
         List<QueryPersonVipVO> queryPersonVipVOList = this.getBaseMapper().getPersonActiveVip(queryPersonVipDTO);
         if (queryPersonVipVOList != null && queryPersonVipVOList.size() > 0) {
             queryPersonVipVO = queryPersonVipVOList.get(0);
+            vipId=queryPersonVipVO.getVipTypeId();
             queryPersonVipVO.setIfInVip(true);
         }
+        TenantVipType tenantVipType = tenantVipTypeService.getById(vipId);
+        if (tenantVipType != null) {
+            queryPersonVipVO.setVipName(tenantVipType.getTenantVipName());
+        }
+        
 
         return queryPersonVipVO;
     }
+
 }
 
 

+ 19 - 21
PCS/src/main/java/cn/cslg/permission/service/qiaobi/FunctionUseRecordService.java

@@ -72,27 +72,30 @@ public class FunctionUseRecordService extends ServiceImpl<FunctionUseRecordMappe
 
         Integer personId = loginUtils.getId();
         PersonnelVO personnelVO = cacheUtils.getLoginUser(personId);
-        FunctionUseRecord functionUseRecord = new FunctionUseRecord();
-        functionUseRecord.setFunctionId(functionId);
-        functionUseRecord.setPersonId(personId);
-        functionUseRecord.setParameters(functionRecordAddDTO.getParameters());
-        functionUseRecord.setTenantId(personnelVO.getTenantId());
-        functionUseRecord.insert();
 
         FunctionUserRecordVO functionUserRecordVO = this.getPersonFunctionUseMess(functionRecordAddDTO);
         Integer haveUseCount = functionUserRecordVO.getHaveUseCount();
         Integer vipCanUseCount = functionUserRecordVO.getVipCanUseCount();
-        AssoPersonFunction assoPersonFunction = assoPersonFunctionService.getPersonFunction(personId, functionId);
-        if (vipCanUseCount != null && haveUseCount > vipCanUseCount) {
+        AssoPersonFunction assoPersonFunction = assoPersonFunctionService.getPersonFunction(functionId);
+        if (vipCanUseCount != null && haveUseCount >= vipCanUseCount) {
             if (assoPersonFunction != null) {
                 Integer byUseCount = assoPersonFunction.getCanUseCount();
-                if (byUseCount == null || byUseCount < 0) {
+                if (byUseCount == null || byUseCount == 0) {
                     throw new XiaoShiException("超出可使用次数");
                 }
                 assoPersonFunction.setCanUseCount(byUseCount - 1);
                 assoPersonFunction.updateById();
             }
+            else {
+                throw new XiaoShiException("超出可使用次数");
+            }
         }
+        FunctionUseRecord functionUseRecord = new FunctionUseRecord();
+        functionUseRecord.setFunctionId(functionId);
+        functionUseRecord.setPersonId(personId);
+        functionUseRecord.setParameters(functionRecordAddDTO.getParameters());
+        functionUseRecord.setTenantId(personnelVO.getTenantId());
+        functionUseRecord.insert();
         return functionUseRecord;
     }
 
@@ -102,7 +105,7 @@ public class FunctionUseRecordService extends ServiceImpl<FunctionUseRecordMappe
         Integer tenantId = personnelVO.getTenantId();
         List<FunctionRecordGroupVO> functionRecordGroupVOS = new ArrayList<>();
         QueryPersonVipVO queryPersonVipVO = assoPersonVipTypeService.getPersonActiveVip();
-        if (queryPersonVipVO == null) {
+        if (queryPersonVipVO == null || !queryPersonVipVO.getIfInVip()) {
             return functionRecordGroupVOS;
         }
 
@@ -114,7 +117,6 @@ public class FunctionUseRecordService extends ServiceImpl<FunctionUseRecordMappe
             startTime = DateUtils.getPlusMonthDate(createTime, diffMonth - 1);
         }
         FunctionRecordGroupDTO functionRecordGroupDTO = new FunctionRecordGroupDTO();
-        functionRecordGroupDTO.setPersonId(personId);
         functionRecordGroupDTO.setCreateTime(startTime);
         functionRecordGroupDTO.setFunctionId(functionId);
         if (tenantId != retailTenantId) {
@@ -139,17 +141,13 @@ public class FunctionUseRecordService extends ServiceImpl<FunctionUseRecordMappe
         Integer functionId = function.getId();
         FunctionUserRecordVO functionUserRecordVO = new FunctionUserRecordVO();
         Integer personId = loginUtils.getId();
-        PersonnelVO personnelVO = cacheUtils.getLoginUser(personId);
-        Integer tenantId = personnelVO.getTenantId();
         List<FunctionRecordGroupVO> functionRecordGroupVOS = this.getPersonFunctionRecord(functionId);
-        QueryPersonVipDTO queryPersonVipDTO = new QueryPersonVipDTO();
-        queryPersonVipDTO.setPersonId(personId);
+//        QueryPersonVipDTO queryPersonVipDTO = new QueryPersonVipDTO();
+//        queryPersonVipDTO.setPersonId(personId);
 
-        Integer vipId = AppVipTypeService.freeVipTypeId;
         QueryPersonVipVO queryPersonVipVO = assoPersonVipTypeService.getPersonActiveVip();
-        if (queryPersonVipVO != null) {
-            vipId = queryPersonVipVO.getVipTypeId();
-        }
+        Integer vipId = queryPersonVipVO.getVipTypeId();
+
         List<AssoTenantVipTypeAndFunctionVO> vos = assoTenantVipTypeFunctionMapper.selectByTenantVipTypeId(vipId);
         AssoTenantVipTypeAndFunctionVO assoTenantVipTypeAndFunctionVO = vos.stream().filter(item -> item.getFunctionId().equals(functionId)).findFirst().orElse(null);
         if (assoTenantVipTypeAndFunctionVO == null) {
@@ -162,14 +160,14 @@ public class FunctionUseRecordService extends ServiceImpl<FunctionUseRecordMappe
             FunctionRecordGroupVO functionRecordGroupVO = functionRecordGroupVOS.get(0);
             haveUseCount = functionRecordGroupVO.getUseCount();
         }
-        AssoPersonFunction assoPersonFunction = assoPersonFunctionService.getPersonFunction(personId, functionId);
+        AssoPersonFunction assoPersonFunction = assoPersonFunctionService.getPersonFunction(functionId);
         if (assoPersonFunction != null) {
             buyUseCount = assoPersonFunction.getCanUseCount();
             functionUserRecordVO.setAssPersonFunctionId(assoPersonFunction.getId());
         }
         Integer canUseCount = null;
         if (vipCanUseCount != null) {
-            if (vipCanUseCount > haveUseCount) {
+            if (vipCanUseCount >= haveUseCount) {
                 canUseCount = vipCanUseCount + buyUseCount - haveUseCount;
             } else {
                 canUseCount = buyUseCount;

+ 78 - 10
PCS/src/main/java/cn/cslg/permission/service/qiaobi/GoodByLimitService.java

@@ -1,14 +1,31 @@
 package cn.cslg.permission.service.qiaobi;
 
+import cn.cslg.permission.common.model.dto.QueryVipDTO;
 import cn.cslg.permission.common.model.qiaobi.goods.GoodByLimitVO;
+import cn.cslg.permission.common.model.qiaobi.vipType.QueryPersonVipDTO;
+import cn.cslg.permission.common.model.qiaobi.vipType.QueryPersonVipVO;
+import cn.cslg.permission.common.model.vo.AppVipTypeVO;
+import cn.cslg.permission.common.model.vo.PersonnelVO;
+import cn.cslg.permission.common.utils.CacheUtils;
+import cn.cslg.permission.common.utils.LoginUtils;
+import cn.cslg.permission.common.utils.StringUtils;
+import cn.cslg.permission.domain.Personnel;
+import cn.cslg.permission.domain.TenantVipType;
+import cn.cslg.permission.domain.qiaobi.Goods;
+import cn.cslg.permission.exception.ExceptionEnum;
+import cn.cslg.permission.exception.XiaoShiException;
+import cn.cslg.permission.service.impl.TenantVipTypeService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import cn.cslg.permission.domain.qiaobi.GoodByLimit;
 import cn.cslg.permission.mapper.qiaobi.GoodByLimitMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author admin
@@ -17,21 +34,30 @@ import java.util.List;
  */
 @Service
 public class GoodByLimitService extends ServiceImpl<GoodByLimitMapper, GoodByLimit> {
+    @Autowired
+    @Lazy
+    private AppVipTypeService appVipTypeService;
+    @Autowired
+    private LoginUtils loginUtils;
+    @Autowired
+    private CacheUtils cacheUtils;
+    @Autowired
+    @Lazy
+    private AssoPersonVipTypeService assoPersonVipTypeService;
+    @Autowired
+    private TenantVipTypeService tenantVipTypeService;
 
     public List<GoodByLimitVO> queryAllGoodLimit(List<Integer> ids) {
         List<GoodByLimitVO> goodByLimitVOS = new ArrayList<>();
-        LambdaQueryWrapper<GoodByLimit> queryWrapper = new LambdaQueryWrapper<>();
-        if (ids != null && ids.size() > 0) {
-            queryWrapper.in(GoodByLimit::getId, ids);
-        }
-        List<GoodByLimit> goodByLimits = this.list(queryWrapper);
-        for (GoodByLimit goodByLimit : goodByLimits) {
+        QueryVipDTO queryVipDTO = new QueryVipDTO();
+        List<AppVipTypeVO> appVipTypeVOS = appVipTypeService.getBaseMapper().queryAppVipType(queryVipDTO);
+        appVipTypeVOS.forEach(item -> {
             GoodByLimitVO goodByLimitVO = new GoodByLimitVO();
-            goodByLimitVO.setLimitName(goodByLimit.getName());
-            goodByLimitVO.setId(goodByLimit.getId());
-            goodByLimitVO.setRemark(goodByLimit.getRemark());
+            goodByLimitVO.setLimitName(item.getVipTypeName());
+            goodByLimitVO.setId(item.getId());
+            goodByLimitVO.setRemark(item.getRemark());
             goodByLimitVOS.add(goodByLimitVO);
-        }
+        });
         return goodByLimitVOS;
     }
 
@@ -45,6 +71,48 @@ public class GoodByLimitService extends ServiceImpl<GoodByLimitMapper, GoodByLim
 
         return goodByLimits;
     }
+
+    /**
+     * 校验商品限制
+     *
+     * @param vipGoods
+     * @param temGoods
+     */
+    public void checkGoodsLimits(Goods vipGoods, Goods temGoods, List<Integer> goodLimitsIds) {
+        if (goodLimitsIds == null || goodLimitsIds.size() == 0) {
+            return;
+        }
+        Integer temGoodsType = temGoods.getGoodType();
+        Integer vipId=null;
+
+        if (temGoodsType != null && temGoodsType.equals(2)) {
+            if (vipGoods != null) {
+                vipId = vipGoods.getGoodId();
+            } else {
+                QueryPersonVipVO queryPersonVipVO = assoPersonVipTypeService.getPersonActiveVip();
+                vipId = queryPersonVipVO.getVipTypeId();
+            }
+            if (!goodLimitsIds.contains(vipId)) {
+                this.throwGoodLimitEx(goodLimitsIds);
+            }
+        } else {
+            QueryPersonVipVO queryPersonVipVO = assoPersonVipTypeService.getPersonActiveVip();
+            vipId = queryPersonVipVO.getVipTypeId();
+            if (!goodLimitsIds.contains(vipId)) {
+               this.throwGoodLimitEx(goodLimitsIds);
+            }
+        }
+    }
+
+    public void throwGoodLimitEx(List<Integer> goodLimitsIds){
+        List<TenantVipType> tenantVipTypes = tenantVipTypeService.getByIds(goodLimitsIds);
+        String name = "";
+        if (tenantVipTypes.size() > 0) {
+            List<String> vipNames = tenantVipTypes.stream().map(TenantVipType::getTenantVipName).collect(Collectors.toList());
+            name = StringUtils.join(vipNames, ",");
+        }
+        throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR,"仅" + name + "才能购买");
+    }
 }
 
 

+ 75 - 3
PCS/src/main/java/cn/cslg/permission/service/qiaobi/GoodsService.java

@@ -4,6 +4,9 @@ import cn.cslg.permission.common.model.Records;
 import cn.cslg.permission.common.model.common.CommonVO;
 import cn.cslg.permission.common.model.dto.QueryVipDTO;
 import cn.cslg.permission.common.model.qiaobi.goods.*;
+import cn.cslg.permission.common.model.qiaobi.label.AddLabelDTO;
+import cn.cslg.permission.common.model.qiaobi.label.AddLabelVO;
+import cn.cslg.permission.common.model.qiaobi.label.QueryLabelDTO;
 import cn.cslg.permission.common.model.qiaobi.version.QiaoBiVersionVO;
 import cn.cslg.permission.common.model.vo.AppVipTypeVO;
 import cn.cslg.permission.common.model.vo.FunctionCodeTreeVO;
@@ -13,7 +16,9 @@ import cn.cslg.permission.domain.Function;
 import cn.cslg.permission.domain.Personnel;
 import cn.cslg.permission.domain.Version;
 import cn.cslg.permission.domain.qiaobi.AppVipType;
+import cn.cslg.permission.domain.qiaobi.AssoGoodsLabel;
 import cn.cslg.permission.domain.qiaobi.Goods;
+import cn.cslg.permission.domain.qiaobi.QiaobiLabel;
 import cn.cslg.permission.domain.sys.SysDictItem;
 import cn.cslg.permission.exception.ExceptionEnum;
 import cn.cslg.permission.exception.XiaoShiException;
@@ -67,13 +72,19 @@ public class GoodsService extends ServiceImpl<GoodsMapper, Goods> {
     private static String GOOD_STATUS_KEY = "GOOD_STATUS";
     @Autowired
     private LoginUtils loginUtils;
+    @Autowired
+    private QiaobiLabelService qiaobiLabelService;
+    @Autowired
+    private AssoGoodsLabelService assoGoodsLabelService;
 
     @Transactional(rollbackFor = Exception.class)
     public Integer addGoods(GoodsAddDTO goodsAddDTO) {
         Integer id = goodsAddDTO.getId();
         Double price = goodsAddDTO.getPrice();
+        Double orgPrice = goodsAddDTO.getOrgPrice();
         Integer goodCount = goodsAddDTO.getGoodCount();
         Date startSaleTime = goodsAddDTO.getStartSaleTime();
+        List<AddLabelDTO> addLabelDTOS = goodsAddDTO.getLabels();
         if (startSaleTime == null) {
             goodsAddDTO.setStartSaleTime(new Date());
         }
@@ -99,11 +110,13 @@ public class GoodsService extends ServiceImpl<GoodsMapper, Goods> {
             updateWrapper.set(Goods::getGoodCount, goodCount);
             updateWrapper.set(Goods::getGoodStrategy, goodStrategy);
             updateWrapper.set(Goods::getPrice, price);
+            updateWrapper.set(Goods::getOrgPrice, orgPrice);
             updateWrapper.set(Goods::getRemark, goodsAddDTO.getRemark());
             updateWrapper.set(Goods::getGoodId, goodsAddDTO.getGoodId());
             updateWrapper.set(Goods::getGoodUnit, goodUnit);
             updateWrapper.eq(Goods::getId, id);
             this.update(updateWrapper);
+            this.updateGoodLabel(id, addLabelDTOS);
         } else {
             Goods goods = new Goods();
             BeanUtils.copyProperties(goodsAddDTO, goods);
@@ -112,6 +125,8 @@ public class GoodsService extends ServiceImpl<GoodsMapper, Goods> {
             goods.setCreateId(loginUtils.getId());
             goods.insert();
             id = goods.getId();
+            //添加商品和标签关联
+            this.addGoodLabel(id, addLabelDTOS);
         }
         return id;
     }
@@ -262,6 +277,7 @@ public class GoodsService extends ServiceImpl<GoodsMapper, Goods> {
         this.loadGoodsQueryVOLimits(goodsQueryVOS);
         this.loadGoodsQueryVOStatus(goodsQueryVOS);
         loadService.loadCommonVO(goodsQueryVOS);
+        this.loadGoodsQueryVOLabel(goodsQueryVOS);
         return goodsQueryVOS;
     }
 
@@ -311,9 +327,20 @@ public class GoodsService extends ServiceImpl<GoodsMapper, Goods> {
         List<GoodByLimitVO> goodByLimitVOS = new ArrayList<>();
         List<MarketStrategyVO> marketStrategyVOS = new ArrayList<>();
         if (limitIds != null && limitIds.size() > 0) {
-            goodByLimitVOS = goodByLimitService.queryAllGoodLimit(limitIds);
+            QueryVipDTO queryVipDTO = new QueryVipDTO();
+            queryVipDTO.setIds(limitIds);
+            List<AppVipTypeVO> appVipTypeVOS = appVipTypeService.getBaseMapper().queryAppVipType(queryVipDTO);
+            appVipTypeVOS.forEach(item -> {
+                GoodByLimitVO goodByLimitVO = new GoodByLimitVO();
+                goodByLimitVO.setLimitName(item.getVipTypeName());
+                goodByLimitVO.setId(item.getId());
+                goodByLimitVO.setRemark(item.getRemark());
+                goodByLimitVOS.add(goodByLimitVO);
+            });
+
         }
         if (strategyIds != null && strategyIds.size() > 0) {
+
             marketStrategyVOS = marketStrategyService.queryMarketStrategy(strategyIds);
         }
 
@@ -325,7 +352,7 @@ public class GoodsService extends ServiceImpl<GoodsMapper, Goods> {
                 goodsQueryVO.setGoodByLimitVos(temLimitVOs);
             }
             if (temStrategyIds != null && temStrategyIds.size() > 0) {
-                List<MarketStrategyVO> temMarketStrategyVOs = marketStrategyVOS.stream().filter(item -> temLimitIds.contains(item.getId())).collect(Collectors.toList());
+                List<MarketStrategyVO> temMarketStrategyVOs = marketStrategyVOS.stream().filter(item -> temStrategyIds.contains(item.getId())).collect(Collectors.toList());
                 goodsQueryVO.setGoodStrategyVos(temMarketStrategyVOs);
             }
 
@@ -387,11 +414,56 @@ public class GoodsService extends ServiceImpl<GoodsMapper, Goods> {
             return new ArrayList<>();
         }
         LambdaQueryWrapper<Goods> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.in(Goods::getId, ids).eq(Goods::getGoodType, type);
+        queryWrapper.in(Goods::getGoodId, ids).eq(Goods::getGoodType, type);
         return this.list(queryWrapper);
 
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    public void addGoodLabel(Integer goodId, List<AddLabelDTO> addLabelDTOs) {
+        List<Integer> labelIds = new ArrayList<>();
+        for (AddLabelDTO addLabelDTO : addLabelDTOs) {
+            Integer id = addLabelDTO.getId();
+            if (id == null) {
+                id = qiaobiLabelService.addLabel(addLabelDTO);
+            }
+            labelIds.add(id);
+        }
+        assoGoodsLabelService.addAssoGoodsLabels(goodId, labelIds);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void updateGoodLabel(Integer goodId, List<AddLabelDTO> addLabelDTOs) {
+        assoGoodsLabelService.deleteAssoGoodsLabels(goodId);
+        this.addGoodLabel(goodId, addLabelDTOs);
+    }
+
+    public List<GoodsQueryVO> loadGoodsQueryVOLabel(List<GoodsQueryVO> goodsQueryVOS) {
+        if (goodsQueryVOS == null || goodsQueryVOS.size() == 0) {
+            return goodsQueryVOS;
+        }
+        List<Integer> goodIds = goodsQueryVOS.stream().map(GoodsQueryVO::getId).collect(Collectors.toList());
+        List<AssoGoodsLabel> assoGoodsLabels = assoGoodsLabelService.getAssoGoodsLabelsByGood(goodIds);
+        List<Integer> labelIds = assoGoodsLabels.stream().map(AssoGoodsLabel::getLabelId).collect(Collectors.toList());
+        List<QiaobiLabel> qiaobiLabels = qiaobiLabelService.getQiaoBiLabelByIds(labelIds);
+        if (qiaobiLabels.size() == 0) {
+            return goodsQueryVOS;
+        }
+        for (GoodsQueryVO goodsQueryVO : goodsQueryVOS) {
+            Integer goodId = goodsQueryVO.getId();
+            List<Integer> temLabelIds = assoGoodsLabels.stream().filter(item -> item.getGoodId().equals(goodId)).map(AssoGoodsLabel::getLabelId).collect(Collectors.toList());
+            List<QiaobiLabel> temQiaobiLabels = qiaobiLabels.stream().filter(item -> temLabelIds.contains(item.getId())).collect(Collectors.toList());
+            List<AddLabelVO> addLabelVOS = new ArrayList<>();
+            temQiaobiLabels.forEach(item -> {
+                AddLabelVO addLabelVO = new AddLabelVO();
+                addLabelVO.setContent(item.getContent());
+                addLabelVO.setId(item.getId());
+                addLabelVOS.add(addLabelVO);
+            });
+            goodsQueryVO.setLabels(addLabelVOS);
+        }
+        return goodsQueryVOS;
+    }
 }
 
 

+ 5 - 5
PCS/src/main/java/cn/cslg/permission/service/qiaobi/PayOrderService.java

@@ -52,9 +52,9 @@ public class PayOrderService extends ServiceImpl<PayOrderMapper, PayOrder> {
         payOrder.setTruePrice(payOrderAddMessageDTO.getTotalPrice());
         payOrder.setOrderType(payOrderAddMessageDTO.getOrderGoodDTOList().get(0).getGoods().getGoodType());
         payOrder.setOrderStatus(0);
-        payOrder.setCreateId(loginUtils.getId());
-        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
-        payOrder.setTenantId(personnelVO.getTenantId());
+//        payOrder.setCreateId(loginUtils.getId());
+//        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+//        payOrder.setTenantId(personnelVO.getTenantId());
         String goodMessage = JSONObject.toJSONString(payOrderAddMessageDTO.getOrderGoodDTOList());
         payOrder.setGoodMessage(goodMessage);
         payOrder.insert();
@@ -78,7 +78,7 @@ public class PayOrderService extends ServiceImpl<PayOrderMapper, PayOrder> {
         if (current != null && size != null) {
             payOrderQueryDTO.setCurrent(((current - 1) * size));
         }
-        PersonnelVO personnelVO1 = cacheUtils.getLoginUser(StpUtil.getLoginIdAsInt());
+        PersonnelVO personnelVO1 = cacheUtils.getLoginUser(loginUtils.getId());
         System.out.println("角色类型" + personnelVO1.getRoleType());
         // 代码控制若不是超级管理员则只能查看本租户的人员列表
         if (personnelVO1.getRoleType() == null || personnelVO1.getRoleType() == 0) {
@@ -163,7 +163,7 @@ public class PayOrderService extends ServiceImpl<PayOrderMapper, PayOrder> {
                 payOrderGroupByDTO.setGroupField("b.PERSON_ID1");
                 break;
         }
-        PersonnelVO personnelVO1 = cacheUtils.getLoginUser(StpUtil.getLoginIdAsInt());
+        PersonnelVO personnelVO1 = cacheUtils.getLoginUser(loginUtils.getId());
 
         // 代码控制若不是超级管理员则只能查看本租户的人员列表
         if (personnelVO1.getRoleType() == null || personnelVO1.getRoleType() == 0) {

+ 3 - 1
PCS/src/main/java/cn/cslg/permission/service/qiaobi/QiaoBiPersonService.java

@@ -75,6 +75,7 @@ public class QiaoBiPersonService {
         qiaoBiPersonSignUpDTO = personnelService.addPhoneSignUpPerson(qiaoBiPersonSignUpDTO);
 
         Integer timUnit = 1;
+        Integer vipTypeId = 39;
         //执行邀请逻辑
         if (inviteCode != null && !inviteCode.trim().equals("")) {
             LambdaQueryWrapper<PersonInvitationCode> queryWrapper = new LambdaQueryWrapper<>();
@@ -86,9 +87,10 @@ public class QiaoBiPersonService {
             assoPersonVipTypeService.lastPersonVip(personId);
             personRelationService.addPersonRelation(personId, qiaoBiPersonSignUpDTO.getId());
             timUnit = 2;
+            vipTypeId=48;
         }
         //绑定版本
-        assoPersonVipTypeService.addSignUpVip(qiaoBiPersonSignUpDTO.getId(), timUnit);
+        assoPersonVipTypeService.addSignUpVip(qiaoBiPersonSignUpDTO.getId(), timUnit,vipTypeId);
         redisUtil.delete(LoginCacheKeyUtil.getLoginCaptcha(phoneNum));
         smsService.sendQiaoBiMessage(qiaoBiPersonSignUpDTO.getPhoneNum(), qiaoBiPersonSignUpDTO.getPassword());
         return qiaoBiPersonSignUpDTO;

+ 144 - 0
PCS/src/main/java/cn/cslg/permission/service/qiaobi/QiaobiLabelService.java

@@ -0,0 +1,144 @@
+package cn.cslg.permission.service.qiaobi;
+
+import cn.cslg.permission.common.model.Records;
+import cn.cslg.permission.common.model.qiaobi.label.*;
+import cn.cslg.permission.domain.qiaobi.AssoGoodsLabel;
+import cn.cslg.permission.domain.qiaobi.Goods;
+import cn.cslg.permission.domain.qiaobi.QiaobiLabel;
+import cn.cslg.permission.exception.XiaoShiException;
+import cn.cslg.permission.mapper.qiaobi.QiaobiLabelMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author admin
+ * @description 针对表【QIAOBI_LABEL(窍笔标签)】的数据库操作Service实现
+ * @createDate 2025-09-04 11:00:24
+ */
+@Service
+public class QiaobiLabelService extends ServiceImpl<QiaobiLabelMapper, QiaobiLabel> {
+    @Autowired
+    private AssoGoodsLabelService assoGoodsLabelService;
+
+    public Integer addLabel(AddLabelDTO addLabelDTO) {
+        String content = addLabelDTO.getContent();
+        Integer id = addLabelDTO.getId();
+        //根据名称查询标签
+
+        QiaobiLabel qiaobiLabel = this.getByContent(content);
+        if (qiaobiLabel == null) {
+            qiaobiLabel = new QiaobiLabel();
+            qiaobiLabel.setContent(content);
+            qiaobiLabel.insert();
+        }
+        return qiaobiLabel.getId();
+    }
+
+    public UpdateLabelVO updateLabel(UpdateLabelDTO updateLabelDTO) {
+
+        String content = updateLabelDTO.getContent();
+        Integer id = updateLabelDTO.getId();
+        Boolean ifForced = updateLabelDTO.getIfForced();
+
+        UpdateLabelVO updateLabelVO = new UpdateLabelVO();
+        updateLabelDTO.setId(id);
+
+        QiaobiLabel qiaobiLabelOrg = this.getByContent(content);
+        if (qiaobiLabelOrg != null) {
+            throw new XiaoShiException("目标修改标签名称已存在");
+        }
+
+        if (ifForced == null || !ifForced) {
+            List<AssoGoodsLabel> assoGoodsLabels = assoGoodsLabelService.getAssoGoodsLabels(Arrays.asList(id));
+            if (assoGoodsLabels != null && assoGoodsLabels.size() > 0) {
+                updateLabelVO.setMessage("有关联的商品,是否确认修改?");
+                updateLabelVO.setIfUpdate(false);
+                return updateLabelVO;
+            }
+        }
+        QiaobiLabel qiaobiLabel = new QiaobiLabel();
+        qiaobiLabel.setId(id);
+        qiaobiLabel.setContent(content);
+        qiaobiLabel.updateById();
+        updateLabelVO.setIfUpdate(true);
+        updateLabelVO.setMessage("修改成功");
+        return updateLabelVO;
+    }
+
+    public QiaobiLabel getByContent(String content) {
+        LambdaQueryWrapper<QiaobiLabel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(QiaobiLabel::getContent, content);
+        QiaobiLabel qiaobiLabel = this.getOne(queryWrapper, false);
+        return qiaobiLabel;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public DeleteLabelVO deleteLabel(DeleteLabelDTO deleteLabelDTO) {
+        Boolean ifForced = deleteLabelDTO.getIfForced();
+        List<Integer> ids = deleteLabelDTO.getIds();
+        DeleteLabelVO deleteLabelVO = new DeleteLabelVO();
+        deleteLabelVO.setIds(ids);
+
+        List<AssoGoodsLabel> assoGoodsLabels = assoGoodsLabelService.getAssoGoodsLabels(ids);
+        if (ifForced == null || !ifForced) {
+            if (assoGoodsLabels != null && assoGoodsLabels.size() > 0) {
+                deleteLabelVO.setMessage("有关联的商品,是否确认删除?");
+                deleteLabelVO.setIfDelete(false);
+                return deleteLabelVO;
+            }
+        }
+        this.removeBatchByIds(ids);
+        assoGoodsLabelService.deleteByLabelIds(ids);
+        deleteLabelVO.setIfDelete(true);
+        deleteLabelVO.setMessage("删除成功");
+        return deleteLabelVO;
+    }
+
+    public Records queryLabels(QueryLabelDTO queryLabelDTO) {
+        String content = queryLabelDTO.getContent();
+        Long current = queryLabelDTO.getCurrent();
+        Long size = queryLabelDTO.getSize();
+        Records records = new Records();
+        List<QiaobiLabel> qiaobiLabels = new ArrayList<>();
+
+        LambdaQueryWrapper<QiaobiLabel> queryWrapper = new LambdaQueryWrapper<>();
+        if(content!=null) {
+            queryWrapper.like(QiaobiLabel::getContent, content);
+        }
+        if (current != null && size != null) {
+            IPage<QiaobiLabel> goodsIPage = this.page(new Page<>(current, size), queryWrapper);
+            qiaobiLabels = goodsIPage.getRecords();
+            records.setCurrent(current);
+            records.setSize(size);
+            records.setTotal(goodsIPage.getTotal());
+        } else {
+            qiaobiLabels = this.list(queryWrapper);
+        }
+        records.setRecords(qiaobiLabels);
+        return records;
+    }
+
+    public List<QiaobiLabel> getQiaoBiLabelByIds(List<Integer> ids) {
+        if(ids==null||ids.size()==0){
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<QiaobiLabel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(QiaobiLabel::getId, ids);
+        List<QiaobiLabel> qiaobiLabels = this.list(queryWrapper);
+        return qiaobiLabels;
+    }
+
+}
+
+
+
+

+ 10 - 4
PCS/src/main/java/cn/cslg/permission/service/weixinpay/AuthorizationService.java

@@ -27,19 +27,25 @@ public class AuthorizationService {
      * 商户号
      */
 
-    public static String merchantId = "1718408246";
-    public static String appId = "wx18ac47eed86e5976";
+    // public static String merchantId = "1718408246";
+    @Value("${WeixinPay.merchantId}")
+    public  String merchantId;
+    //    public static String merchantId = "1730569184";
+    @Value("${WeixinPay.appId}")
+    public  String appId;
+    //public static String appId = "wx18ac47eed86e5976";
     /**
      * 商户API私钥路径
      */
     @Value("${Keypath}")
-    public  String privateKeyPath ;
+    public String privateKeyPath;
 
     /**
      * 商户证书序列号
      */
 
-    public static String merchantSerialNumber = "3BBC0C2DA1D49F62CEAC3C3CC0472C1E2466EB63";
+    @Value("${WeixinPay.merchantSerialNumber}")
+    public  String merchantSerialNumber = "3BBC0C2DA1D49F62CEAC3C3CC0472C1E2466EB63";
 
     /**
      * 商户APIV3密钥

+ 37 - 19
PCS/src/main/java/cn/cslg/permission/service/weixinpay/WeixinPayService.java

@@ -15,6 +15,7 @@ import cn.cslg.permission.common.utils.LoginUtils;
 import cn.cslg.permission.common.utils.SecurityUtils.AesUtil;
 import cn.cslg.permission.common.utils.StringUtils;
 import cn.cslg.permission.common.utils.common.BigDecimalUtil;
+import cn.cslg.permission.domain.Personnel;
 import cn.cslg.permission.domain.qiaobi.*;
 import cn.cslg.permission.exception.ExceptionEnum;
 import cn.cslg.permission.exception.XiaoShiException;
@@ -23,6 +24,7 @@ import cn.cslg.permission.factory.goodLimit.GoodLimitFactoryImp;
 import cn.cslg.permission.factory.strategy.StrategyFatcory;
 import cn.cslg.permission.factory.strategy.StrategyImp;
 import cn.cslg.permission.mapper.qiaobi.MarketStrategyMapper;
+import cn.cslg.permission.service.PersonnelService;
 import cn.cslg.permission.service.qiaobi.*;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -59,15 +61,23 @@ public class WeixinPayService {
     private AssoPersonFunctionService assoPersonFunctionService;
     @Autowired
     private LoginUtils loginUtils;
-    public static String apiV3key = "9Cx7SiQb7il8Zaf8nsBw5QxSCVZkoO7p";
+//    public static String apiV3key = "9Cx7SiQb7il8Zaf8nsBw5QxSCVZkoO7p";
+    public static String apiV3key = "qiaobiruanjianjishushenzhen12345";
+
     @Value("${payCallBack}")
     public String payCallBack;
+    @Value("${WeixinPay.merchantId}")
+    public  String merchantId;
+    @Value("${WeixinPay.appId}")
+    public  String appId ;
     @Autowired
     private GoodByLimitService goodByLimitService;
     @Autowired
     private GoodLimitFactory goodLimitFactory;
     @Autowired
     private AppVipTypeService appVipTypeService;
+    @Autowired
+    private PersonnelService personnelService;
 
     @Transactional(rollbackFor = Exception.class)
     public PayOrderReVO getPayTickets(PayOrderAddMessageDTO payOrderAddMessageDTO) {
@@ -78,8 +88,8 @@ public class WeixinPayService {
         String url = "https://api.mch.weixin.qq.com/v3/pay/transactions/native";
         String tradeNo = payOrder.getTradeNo();
         com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest prepayRequest = new com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest();
-        String appId = "wxe5f9b6e3d532e6c3";
-        String merchantId = "1718408246";
+//        String appId = "wxe5f9b6e3d532e6c3";
+//        String merchantId = "1718408246";
         String notifyUrl = payCallBack;
         prepayRequest.setAppid(appId);
         prepayRequest.setMchid(merchantId);
@@ -126,7 +136,7 @@ public class WeixinPayService {
         } catch (Exception e) {
             e.printStackTrace();
         }
-        PayOrderReVO payOrderReVO =new PayOrderReVO();
+        PayOrderReVO payOrderReVO = new PayOrderReVO();
         payOrderReVO.setCodeUrl(codeUrl);
         payOrderReVO.setTradeNo(tradeNo);
         return payOrderReVO;
@@ -153,8 +163,9 @@ public class WeixinPayService {
         List<Goods> goods = goodsService.queryByIds(goodsIds);
         List<Goods> goodTypes = goods.stream().filter(item -> item.getGoodType().equals(1)).collect(Collectors.toList());
         if (goodTypes.size() > 1) {
-            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "不购买多个不同的会员");
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "不能同时购买多个不同的会员");
         }
+        Goods vipGoods = goods.stream().filter(item -> item.getGoodType().equals(1)).findFirst().orElse(null);
         for (OrderGoodDTO item : orderGoodDTOList) {
             Integer temGoodId = item.getGoodId();
             Goods goods1 = goods.stream().filter(tem -> tem.getId().equals(temGoodId)).findFirst().orElse(null);
@@ -172,27 +183,26 @@ public class WeixinPayService {
             String goodStrategiesStr = goods1.getGoodStrategy();
             List<Integer> goodLimitsIds = new ArrayList<>();
             List<Integer> goodStrategyList = new ArrayList<>();
-            if (goodLimits != null) {
+            if (goodLimits != null && !goodLimits.trim().equals("")) {
                 String[] temStrs = StringUtils.split(goodLimits, ",");
                 for (int i = 0; i < temStrs.length; i++) {
-                    goodLimitsIds.add(Integer.parseInt(temStrs[i]));
+                    if (temStrs[i] != null && !temStrs[i].trim().equals("")) {
+                        goodLimitsIds.add(Integer.parseInt(temStrs[i]));
+                    }
                 }
             }
 
 
             if (goodLimitsIds != null && goodLimitsIds.size() > 0) {
-                List<GoodByLimit> goodByLimits = goodByLimitService.queryGoodLimit(goodLimitsIds);
-                for (GoodByLimit goodByLimit : goodByLimits) {
-                    String methodName = goodByLimit.getLimitMethod();
-                    GoodLimitFactoryImp goodLimitFactoryImp = goodLimitFactory.getClass(methodName);
-                    goodLimitFactoryImp.DoGoodLimit(item);
-                }
+//                goodByLimitService.checkGoodsLimits(vipGoods, goods1, goodLimitsIds);
             }
 
             if (goodStrategiesStr != null) {
                 String[] temStrs = StringUtils.split(goodStrategiesStr, ",");
                 for (int i = 0; i < temStrs.length; i++) {
-                    goodStrategyList.add(Integer.parseInt(temStrs[i]));
+                    if (temStrs[i] != null && !temStrs[i].trim().equals("")) {
+                        goodStrategyList.add(Integer.parseInt(temStrs[i]));
+                    }
                 }
             }
 
@@ -222,7 +232,7 @@ public class WeixinPayService {
     public WeixinSuccessVO decryptMessage(String associatedData, String nonce, String ciphertext) throws Exception {
         Integer q = apiV3key.length();
         System.out.println(q);
-        String key = "9Cx7SiQb7il8Zaf8nsBw5QxSCVZkoO7p";
+        String key = apiV3key;
         AesUtil aesUtil = new AesUtil(key.getBytes(StandardCharsets.UTF_8));
         String d = aesUtil.decryptToString(associatedData.getBytes(StandardCharsets.UTF_8), nonce.getBytes(StandardCharsets.UTF_8), ciphertext);
 
@@ -259,7 +269,12 @@ public class WeixinPayService {
                 assoPersonVipTypeService.addPersonVIP2(goods, personId, vipId, totalNum, goodUnit);
             } else if (type == 2) {
                 Integer functionId = goods.getGoodId();
-                AssoPersonFunction assoPersonFunction = assoPersonFunctionService.getPersonFunction(personId, functionId);
+                Personnel personnel = personnelService.getById(personId);
+                Integer tenantId = null;
+                if (personnel != null) {
+                    tenantId = personnel.getTenantId();
+                }
+                AssoPersonFunction assoPersonFunction = assoPersonFunctionService.getPersonFunction(personId, tenantId, functionId);
                 if (assoPersonFunction != null) {
                     Integer orgNum = assoPersonFunction.getCanUseCount();
                     orgNum = orgNum + totalNum;
@@ -269,6 +284,9 @@ public class WeixinPayService {
                     assoPersonFunction = new AssoPersonFunction();
                     assoPersonFunction.setFunctionId(functionId);
                     assoPersonFunction.setPersonId(personId);
+                    if (personnel != null) {
+                        assoPersonFunction.setTenantId(personnel.getTenantId());
+                    }
                     assoPersonFunction.setCanUseCount(totalNum);
                     assoPersonFunction.insert();
                 }
@@ -283,7 +301,7 @@ public class WeixinPayService {
         QueryPersonVipDTO queryPersonVipDTO = new QueryPersonVipDTO();
         queryPersonVipDTO.setPersonId(personId);
         QueryPersonVipVO queryPersonVipVO = assoPersonVipTypeService.getPersonActiveVip();
-        if (queryPersonVipVO == null ) {
+        if (queryPersonVipVO == null) {
             return;
         }
         Integer levelOrg = queryPersonVipVO.getVipLevel();
@@ -308,7 +326,7 @@ public class WeixinPayService {
             return;
         }
 
-           Goods goods1 = JSONObject.parseObject(fromMessage, Goods.class);
+        Goods goods1 = JSONObject.parseObject(fromMessage, Goods.class);
         Double disPrice = this.calculateDisPrice(goods1, queryPersonVipVO);
         if (disPrice > orderGoodDTO.getTotalPrice()) {
             disPrice = BigDecimalUtil.division(orderGoodDTO.getTotalPrice(), 0.1, 2);
@@ -323,7 +341,7 @@ public class WeixinPayService {
     }
 
     public Double calculateDisPrice(Goods goods, QueryPersonVipVO queryPersonVipVO) {
-        if(goods==null){
+        if (goods == null) {
             throw new XiaoShiException("计算抵消价格错误,请联系管理员进行解决");
         }
         Integer unit = goods.getGoodUnit();

+ 9 - 2
PCS/src/main/resources/application-dev.yml

@@ -50,6 +50,13 @@ SMS:
   secret: Y6Erboh5lEFiRPR4XK8oCPMvUzYGLN
 
 FMSUrl: http://192.168.2.24:8803
-Keypath: E:\账号密码\1718408246_20250606_cert\apiclient_key.pem
+Keypath: E:\账号密码\1730569184_20251028_cert\apiclient_key.pem
 payCallBack: http://sh.frp.one:33164/permission/qiaoBi/pay/success
-retailTenantId: 39
+WeixinPay:
+   apiV3key: qiaobiruanjianjishushenzhen12345
+   merchantId: 1730569184
+   appId: wx021fa6fa457826b3
+#  merchantSerialNumber: 3BBC0C2DA1D49F62CEAC3C3CC0472C1E2466EB63
+   merchantSerialNumber: 3D6B64054376C83F00C1422FA7EF752F9571F38E
+
+retailTenantId: 56

+ 12 - 3
PCS/src/main/resources/application-prodNetIn.yml

@@ -49,6 +49,15 @@ inviteSignInLink: http://47.116.194.135:8078/register
 ##################  短信 ####################
 SMS:
   regionId: cn-shanghai
-  accessKeyId: LTAI5tGyG1Q7fKprgg1nWhXj
-  secret: Y6Erboh5lEFiRPR4XK8oCPMvUzYGLN
-FMSUrl: http://localhost:8803
+  accessKeyId: LTAI5tJZk3S9VnZ8Q1W2hEo4
+  secret: ZI7Hi8ysEkRbk13N4CVDUlpEB5fXNZ
+FMSUrl: http://localhost:8803
+Keypath: apiclient_key.pem
+WeixinPay:
+  apiV3key: qiaobiruanjianjishushenzhen12345
+  merchantId: 1730569184
+  appId: wx021fa6fa457826b3
+  #  merchantSerialNumber: 3BBC0C2DA1D49F62CEAC3C3CC0472C1E2466EB63
+  merchantSerialNumber: 3D6B64054376C83F00C1422FA7EF752F9571F38E
+payCallBack: https://qiaobi-ai.com/api/permission/qiaoBi/pay/success
+retailTenantId: 56

+ 4 - 1
PCS/src/main/resources/application-prodNetOut.yml

@@ -48,4 +48,7 @@ SMS:
   regionId: cn-shanghai
   accessKeyId: LTAI5tGyG1Q7fKprgg1nWhXj
   secret: Y6Erboh5lEFiRPR4XK8oCPMvUzYGLN
-FMSUrl: http://192.168.2.24:8803
+FMSUrl: http://192.168.2.24:8803
+Keypath: apiclient_key.pem
+payCallBack: https://qiaobi-ai.com/api/permission/qiaoBi/pay/success
+retailTenantId: 56

+ 1 - 1
PCS/src/main/resources/application.yml

@@ -23,7 +23,7 @@ spring:
       max-file-size: 1000MB
       max-request-size: 1000MB
   profiles:
-    active: dev
+    active: prodNetIn
   jackson:
     default-property-inclusion: non_null
     serialization:

+ 46 - 28
PCS/src/main/resources/mapper/PayOrderMapper.xml

@@ -5,7 +5,8 @@
 <mapper namespace="cn.cslg.permission.mapper.qiaobi.PayOrderMapper">
 
     <select id="queryPayRecord" resultType="cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderQueryVO">
-        select a.* from PAY_ORDER as a left join PERSON_RELATION as b on a.CREATE_ID=b.PERSON_ID2
+        select a.* , b.PERSON_ID1 as invitePersonId from PAY_ORDER as a left join PERSON_RELATION as b on
+        a.CREATE_ID=b.PERSON_ID2
         <where>
 
             <if test="invitePersonName!=null and !invitePersonName.trim().equals('')">
@@ -17,7 +18,8 @@
             </if>
 
             <if test="personName!=null and !personName.trim().equals('')">
-                and CREATE_ID in (select ID from PERSONNEL where PERSONNEL_NAME like concat('%',#{personName},'%') OR PERSONNEL_PHONE like concat('%',#{personName},'%'))
+                and CREATE_ID in (select ID from PERSONNEL where PERSONNEL_NAME like concat('%',#{personName},'%') OR
+                PERSONNEL_PHONE like concat('%',#{personName},'%'))
             </if>
             <if test="startTime!=null ">
                 and DATE_FORMAT(a.PAY_TIME, '%Y-%m-%d')&gt;=DATE_FORMAT(#{startTime}, '%Y-%m-%d')
@@ -32,20 +34,23 @@
                 and CREATE_ID=#{personId}
             </if>
             <if test="departmentIds!=null and departmentIds.size()>0">
-                and CREATE_ID in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
+                and CREATE_ID in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join
+                ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
                 where DEPARTMENT_ID in <foreach collection="departmentIds" item="item" separator="," open="(" close=")">
-                    #{item}
-                </foreach>)
+                #{item}
+            </foreach>)
             </if>
             <if test="invDepartmentIds!=null and invDepartmentIds.size()>0">
-                and b.PERSON_ID1 in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
-                where DEPARTMENT_ID in <foreach collection="invDepartmentIds" item="item" separator="," open="(" close=")">
+                and b.PERSON_ID1 in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join
+                ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
+                where DEPARTMENT_ID in <foreach collection="invDepartmentIds" item="item" separator="," open="("
+                                                close=")">
                 #{item}
             </foreach>)
             </if>
-                <if test="invPersonId!=null ">
-                    and b.PERSON_ID1 =#{invPersonId}
-                </if>
+            <if test="invPersonId!=null ">
+                and b.PERSON_ID1 =#{invPersonId}
+            </if>
 
         </where>
         order by a.CREATE_TIME desc
@@ -68,7 +73,8 @@
             </if>
 
             <if test="personName!=null and !personName.trim().equals('')">
-                and CREATE_ID in (select ID from PERSONNEL where PERSONNEL_NAME like concat('%',#{personName},'%') OR PERSONNEL_PHONE like concat('%',#{personName},'%'))
+                and CREATE_ID in (select ID from PERSONNEL where PERSONNEL_NAME like concat('%',#{personName},'%') OR
+                PERSONNEL_PHONE like concat('%',#{personName},'%'))
             </if>
             <if test="startTime!=null ">
                 and DATE_FORMAT(a.PAY_TIME, '%Y-%m-%d')&gt;=DATE_FORMAT(#{startTime}, '%Y-%m-%d')
@@ -83,14 +89,17 @@
                 and CREATE_ID=#{personId}
             </if>
             <if test="departmentIds!=null and departmentIds.size()>0">
-                and CREATE_ID in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
+                and CREATE_ID in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join
+                ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
                 where DEPARTMENT_ID in <foreach collection="departmentIds" item="item" separator="," open="(" close=")">
                 #{item}
             </foreach>)
             </if>
             <if test="invDepartmentIds!=null and invDepartmentIds.size()>0">
-                and b.PERSON_ID1 in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
-                where DEPARTMENT_ID in <foreach collection="invDepartmentIds" item="item" separator="," open="(" close=")">
+                and b.PERSON_ID1 in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join
+                ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
+                where DEPARTMENT_ID in <foreach collection="invDepartmentIds" item="item" separator="," open="("
+                                                close=")">
                 #{item}
             </foreach>)
             </if>
@@ -116,7 +125,8 @@
             </if>
 
             <if test="personName!=null and !personName.trim().equals('')">
-                and CREATE_ID in (select ID from PERSONNEL where PERSONNEL_NAME like concat('%',#{personName},'%') OR PERSONNEL_PHONE like concat('%',#{personName},'%'))
+                and CREATE_ID in (select ID from PERSONNEL where PERSONNEL_NAME like concat('%',#{personName},'%') OR
+                PERSONNEL_PHONE like concat('%',#{personName},'%'))
             </if>
             <if test="startTime!=null ">
                 and DATE_FORMAT(a.PAY_TIME, '%Y-%m-%d')&gt;=DATE_FORMAT(#{startTime}, '%Y-%m-%d')
@@ -131,14 +141,17 @@
                 and CREATE_ID=#{personId}
             </if>
             <if test="departmentIds!=null and departmentIds.size()>0">
-                and CREATE_ID in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
+                and CREATE_ID in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join
+                ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
                 where DEPARTMENT_ID in <foreach collection="departmentIds" item="item" separator="," open="(" close=")">
                 #{item}
             </foreach>)
             </if>
             <if test="invDepartmentIds!=null and invDepartmentIds.size()>0">
-                and b.PERSON_ID1 in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
-                where DEPARTMENT_ID in <foreach collection="invDepartmentIds" item="item" separator="," open="(" close=")">
+                and b.PERSON_ID1 in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join
+                ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
+                where DEPARTMENT_ID in <foreach collection="invDepartmentIds" item="item" separator="," open="("
+                                                close=")">
                 #{item}
             </foreach>)
             </if>
@@ -170,7 +183,8 @@
             </if>
 
             <if test="personName!=null and !personName.trim().equals('')">
-                and CREATE_ID in (select ID from PERSONNEL where PERSONNEL_NAME like concat('%',#{personName},'%') OR PERSONNEL_PHONE like concat('%',#{personName},'%'))
+                and CREATE_ID in (select ID from PERSONNEL where PERSONNEL_NAME like concat('%',#{personName},'%') OR
+                PERSONNEL_PHONE like concat('%',#{personName},'%'))
             </if>
             <if test="startTime!=null ">
                 and DATE_FORMAT(a.PAY_TIME, '%Y-%m-%d')&gt;=DATE_FORMAT(#{startTime}, '%Y-%m-%d')
@@ -185,14 +199,17 @@
                 and CREATE_ID=#{personId}
             </if>
             <if test="departmentIds!=null and departmentIds.size()>0">
-                and CREATE_ID in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
+                and CREATE_ID in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join
+                ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
                 where DEPARTMENT_ID in <foreach collection="departmentIds" item="item" separator="," open="(" close=")">
                 #{item}
             </foreach>)
             </if>
             <if test="invDepartmentIds!=null and invDepartmentIds.size()>0">
-                and b.PERSON_ID1 in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
-                where DEPARTMENT_ID in <foreach collection="invDepartmentIds" item="item" separator="," open="(" close=")">
+                and b.PERSON_ID1 in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join
+                ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
+                where DEPARTMENT_ID in <foreach collection="invDepartmentIds" item="item" separator="," open="("
+                                                close=")">
                 #{item}
             </foreach>)
             </if>
@@ -205,11 +222,12 @@
     </select>
 
     <select id="queryPayCount" resultType="cn.cslg.permission.common.model.qiaobi.goods.GoodCountVO">
-        select count(distinct CREATE_ID)  as num from PAY_ORDER
-            <where>
-                <if test="lastMonth!=null and lastMonth ==true">
-                    and DATE_FORMAT(PAY_TIME,'%Y-%m') =DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 MONTH), '%Y-%m')
-                </if>
-            </where>
+        select count(distinct CREATE_ID) as num from PAY_ORDER
+        <where>
+            PAY_TIME is not null
+            <if test="lastMonth!=null and lastMonth ==true">
+                and DATE_FORMAT(PAY_TIME,'%Y-%m') =DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 MONTH), '%Y-%m')
+            </if>
+        </where>
     </select>
 </mapper>

+ 27 - 14
PCS/src/main/resources/mapper/PersonnelMapper.xml

@@ -41,11 +41,12 @@
         as remark,p.PERSONNEL_QQ as qqNumber,p.PERSONNEL_DING as nail,p.TENANT_ID as tenant,
         apvt.EXPITR_TIME as expitrTime, tvt.TENANT_VIP_NAME as vipTypeName from
         PERSONNEL as p left join
-         ASSO_PERSON_VIP_TYPE  as apvt
-        on p.ID = apvt.PERSON_ID left join TENANT_VIP_TYPE tvt on apvt.VIP_TYPE_ID = tvt.ID left join PERSON_RELATION as b on p.ID=b.PERSON_ID2
+        ASSO_PERSON_VIP_TYPE as apvt
+        on p.ID = apvt.PERSON_ID left join TENANT_VIP_TYPE tvt on apvt.VIP_TYPE_ID = tvt.ID left join PERSON_RELATION as
+        b on p.ID=b.PERSON_ID2
 
         <where>
-
+            p.IS_DELETE=0
             <if test="tenant!=null">
                 and p.TENANT_ID=#{tenant}
             </if>
@@ -54,7 +55,10 @@
                 and DATE_FORMAT(apvt.EXPITR_TIME, '%Y-%m-%d')=DATE_FORMAT(#{expitrTime}, '%Y-%m-%d')
             </if>
             <if test="name!=null and !name.trim().equals('')">
-                and p.PERSONNEL_NAME like concat('%', #{name}, '%')
+                and (p.PERSONNEL_NAME like concat('%', #{name}, '%') or p.PERSONNEL_USERNAME like concat('%', #{name},
+                '%') or p.PERSONNEL_PHONE like concat('%', #{name}, '%') or p.PERSONNEL_EMAIL like concat('%', #{name},
+                '%'))
+
 
             </if>
             <if test="endExpitrTime!=null">
@@ -71,14 +75,17 @@
                 and p.id=#{id}
             </if>
             <if test="departmentIds!=null and departmentIds.size()>0">
-                and p.id in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
+                and p.id in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join
+                ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
                 where DEPARTMENT_ID in <foreach collection="departmentIds" item="item" separator="," open="(" close=")">
                 #{item}
             </foreach>)
             </if>
             <if test="invDepartmentIds!=null and invDepartmentIds.size()>0">
-                and b.PERSON_ID1 in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
-                where DEPARTMENT_ID in <foreach collection="invDepartmentIds" item="item" separator="," open="(" close=")">
+                and b.PERSON_ID1 in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join
+                ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
+                where DEPARTMENT_ID in <foreach collection="invDepartmentIds" item="item" separator="," open="("
+                                                close=")">
                 #{item}
             </foreach>)
             </if>
@@ -95,10 +102,11 @@
 
     <select id="getQiaoBiPersonsListTotal" resultType="java.lang.Long">
         select count(*) from PERSONNEL as p left join
-        ASSO_PERSON_VIP_TYPE  as apvt
-        on p.ID = apvt.PERSON_ID left join TENANT_VIP_TYPE tvt on apvt.VIP_TYPE_ID = tvt.ID left join PERSON_RELATION as b on p.ID=b.PERSON_ID2
+        ASSO_PERSON_VIP_TYPE as apvt
+        on p.ID = apvt.PERSON_ID left join TENANT_VIP_TYPE tvt on apvt.VIP_TYPE_ID = tvt.ID left join PERSON_RELATION as
+        b on p.ID=b.PERSON_ID2
         <where>
-
+            p.IS_DELETE=0
             <if test="ifExpited!=null and ifExpited==true">
                 and apvt.EXPITR_TIME is null
             </if>
@@ -109,7 +117,9 @@
                 and DATE_FORMAT(apvt.EXPITR_TIME, '%Y-%m-%d')=DATE_FORMAT(#{expitrTime}, '%Y-%m-%d')
             </if>
             <if test="name!=null and !name.trim().equals('')">
-                and p.PERSONNEL_NAME like concat('%', #{name}, '%')
+                and (p.PERSONNEL_NAME like concat('%', #{name}, '%') or p.PERSONNEL_USERNAME like concat('%', #{name},
+                '%') or p.PERSONNEL_PHONE like concat('%', #{name}, '%') or p.PERSONNEL_EMAIL like concat('%', #{name},
+                '%'))
 
             </if>
             <if test="endExpitrTime!=null">
@@ -126,14 +136,17 @@
                 and p.id=#{id}
             </if>
             <if test="departmentIds!=null and departmentIds.size()>0">
-                and p.id in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
+                and p.id in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join
+                ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
                 where DEPARTMENT_ID in <foreach collection="departmentIds" item="item" separator="," open="(" close=")">
                 #{item}
             </foreach>)
             </if>
             <if test="invDepartmentIds!=null and invDepartmentIds.size()>0">
-                and b.PERSON_ID1 in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
-                where DEPARTMENT_ID in <foreach collection="invDepartmentIds" item="item" separator="," open="(" close=")">
+                and b.PERSON_ID1 in (select pdp.PERSONNEL_ID from ASSOCIATE_PERSONNEL_DP as pdp left join
+                ASSOCIATE_DEPARTMENT_POSITION adp on pdp.DEPARTMENT_AND_POSITION_ID =adp.ID
+                where DEPARTMENT_ID in <foreach collection="invDepartmentIds" item="item" separator="," open="("
+                                                close=")">
                 #{item}
             </foreach>)
             </if>