Преглед на файлове

Merge remote-tracking branch 'origin/test' into prod

# Conflicts:
#	src/main/resources/application.yml
lwhhszx преди 1 година
родител
ревизия
e7fa122b76
променени са 100 файла, в които са добавени 3209 реда и са изтрити 163 реда
  1. 7 1
      pom.xml
  2. 17 0
      src/main/java/com/example/xiaoshiweixinback/business/config/InsertBatchSqlInjector.java
  3. 16 0
      src/main/java/com/example/xiaoshiweixinback/business/config/MybatisPlusConfig.java
  4. 2 2
      src/main/java/com/example/xiaoshiweixinback/business/exception/BusinessException.java
  5. 19 2
      src/main/java/com/example/xiaoshiweixinback/business/exception/ExceptionEnum.java
  6. 18 0
      src/main/java/com/example/xiaoshiweixinback/business/utils/DateUtils.java
  7. 24 11
      src/main/java/com/example/xiaoshiweixinback/business/utils/FormatUtil.java
  8. 12 5
      src/main/java/com/example/xiaoshiweixinback/controller/PatentController.java
  9. 21 0
      src/main/java/com/example/xiaoshiweixinback/controller/PayController.java
  10. 55 0
      src/main/java/com/example/xiaoshiweixinback/controller/UserFeedBackController.java
  11. 48 0
      src/main/java/com/example/xiaoshiweixinback/controller/UserManageController.java
  12. 1 2
      src/main/java/com/example/xiaoshiweixinback/controller/VIPController.java
  13. 100 0
      src/main/java/com/example/xiaoshiweixinback/controller/VoucherManageController.java
  14. 74 0
      src/main/java/com/example/xiaoshiweixinback/domain/Activity.java
  15. 41 0
      src/main/java/com/example/xiaoshiweixinback/domain/AssoActivityVoucher.java
  16. 37 0
      src/main/java/com/example/xiaoshiweixinback/domain/AssoFeedbackFile.java
  17. 45 0
      src/main/java/com/example/xiaoshiweixinback/domain/AssoPayOrderGood.java
  18. 34 0
      src/main/java/com/example/xiaoshiweixinback/domain/AssoPayOrderVoucher.java
  19. 1 0
      src/main/java/com/example/xiaoshiweixinback/domain/AssoPersonVip.java
  20. 75 0
      src/main/java/com/example/xiaoshiweixinback/domain/AssoPersonVoucher.java
  21. 1 0
      src/main/java/com/example/xiaoshiweixinback/domain/AssoVipFunction.java
  22. 37 0
      src/main/java/com/example/xiaoshiweixinback/domain/AssoVipVoucher.java
  23. 41 0
      src/main/java/com/example/xiaoshiweixinback/domain/InviteMessage.java
  24. 43 0
      src/main/java/com/example/xiaoshiweixinback/domain/UseFunctionRecord.java
  25. 49 0
      src/main/java/com/example/xiaoshiweixinback/domain/UserFeedback.java
  26. 2 0
      src/main/java/com/example/xiaoshiweixinback/domain/Vip.java
  27. 86 0
      src/main/java/com/example/xiaoshiweixinback/domain/Voucher.java
  28. 16 0
      src/main/java/com/example/xiaoshiweixinback/entity/assoPersonVoucher/PersonVoucherQueryDTO.java
  29. 18 0
      src/main/java/com/example/xiaoshiweixinback/entity/assoPersonVoucher/SendVoucherToPersonVO.java
  30. 1 0
      src/main/java/com/example/xiaoshiweixinback/entity/dto/person/LoginByWxDTO.java
  31. 1 0
      src/main/java/com/example/xiaoshiweixinback/entity/dto/person/LoginDTO.java
  32. 12 0
      src/main/java/com/example/xiaoshiweixinback/entity/invite/InvitedPersonQueryDTO.java
  33. 21 0
      src/main/java/com/example/xiaoshiweixinback/entity/invite/InvitedPersonVO.java
  34. 14 0
      src/main/java/com/example/xiaoshiweixinback/entity/person/PersonQueryDTO.java
  35. 21 0
      src/main/java/com/example/xiaoshiweixinback/entity/person/PersonQueryVO.java
  36. 20 0
      src/main/java/com/example/xiaoshiweixinback/entity/person/PersonVO.java
  37. 29 0
      src/main/java/com/example/xiaoshiweixinback/entity/userFeedBack/UserFeedbackAddNewDTO.java
  38. 12 0
      src/main/java/com/example/xiaoshiweixinback/entity/userFeedBack/UserFeedbackQueryDTO.java
  39. 22 0
      src/main/java/com/example/xiaoshiweixinback/entity/userFeedBack/UserFeedbackVO.java
  40. 31 0
      src/main/java/com/example/xiaoshiweixinback/entity/vouchar/VoucherAddDTO.java
  41. 14 0
      src/main/java/com/example/xiaoshiweixinback/entity/vouchar/VoucherBatchUpdateDTO.java
  42. 19 0
      src/main/java/com/example/xiaoshiweixinback/entity/vouchar/VoucherQueryDTO.java
  43. 31 0
      src/main/java/com/example/xiaoshiweixinback/entity/vouchar/VoucherUpdateDTO.java
  44. 83 0
      src/main/java/com/example/xiaoshiweixinback/entity/vouchar/VoucherVO.java
  45. 13 0
      src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/GoodVO.java
  46. 1 0
      src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/VipRightsVO.java
  47. 16 1
      src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/WeiXinPayDTO.java
  48. 31 0
      src/main/java/com/example/xiaoshiweixinback/factorys/goodFactory/GoodFactory.java
  49. 17 0
      src/main/java/com/example/xiaoshiweixinback/factorys/goodFactory/GoodImp.java
  50. 50 0
      src/main/java/com/example/xiaoshiweixinback/factorys/goodFactory/GoodTicketService.java
  51. 44 0
      src/main/java/com/example/xiaoshiweixinback/factorys/goodFactory/GoodVipService.java
  52. 76 0
      src/main/java/com/example/xiaoshiweixinback/factorys/goodFactory/GoodVoucherService.java
  53. 56 0
      src/main/java/com/example/xiaoshiweixinback/factorys/useFunctionFactory/CheckConcernProduct.java
  54. 62 0
      src/main/java/com/example/xiaoshiweixinback/factorys/useFunctionFactory/CheckExportPatent.java
  55. 44 0
      src/main/java/com/example/xiaoshiweixinback/factorys/useFunctionFactory/CheckQueryPatent.java
  56. 23 0
      src/main/java/com/example/xiaoshiweixinback/factorys/useFunctionFactory/UseFunctionFactory.java
  57. 11 0
      src/main/java/com/example/xiaoshiweixinback/factorys/useFunctionFactory/UseFunctionImp.java
  58. 20 0
      src/main/java/com/example/xiaoshiweixinback/mapper/ActivityMapper.java
  59. 18 0
      src/main/java/com/example/xiaoshiweixinback/mapper/AssoActivityVoucherMapper.java
  60. 18 0
      src/main/java/com/example/xiaoshiweixinback/mapper/AssoFeedbackFileMapper.java
  61. 19 0
      src/main/java/com/example/xiaoshiweixinback/mapper/AssoPayOrderGoodMapper.java
  62. 19 0
      src/main/java/com/example/xiaoshiweixinback/mapper/AssoPayOrderVoucherMapper.java
  63. 33 0
      src/main/java/com/example/xiaoshiweixinback/mapper/AssoPersonVoucherMapper.java
  64. 3 0
      src/main/java/com/example/xiaoshiweixinback/mapper/AssoVipFunctionMapper.java
  65. 19 0
      src/main/java/com/example/xiaoshiweixinback/mapper/AssoVipVoucherMapper.java
  66. 13 0
      src/main/java/com/example/xiaoshiweixinback/mapper/EasyBaseMapper.java
  67. 24 0
      src/main/java/com/example/xiaoshiweixinback/mapper/InviteMessageMapper.java
  68. 8 1
      src/main/java/com/example/xiaoshiweixinback/mapper/PersonMapper.java
  69. 21 0
      src/main/java/com/example/xiaoshiweixinback/mapper/UseFunctionRecordMapper.java
  70. 19 0
      src/main/java/com/example/xiaoshiweixinback/mapper/UserFeedbackMapper.java
  71. 28 0
      src/main/java/com/example/xiaoshiweixinback/mapper/VoucherMapper.java
  72. 80 0
      src/main/java/com/example/xiaoshiweixinback/service/ActivityService.java
  73. 33 0
      src/main/java/com/example/xiaoshiweixinback/service/AssoActivityVoucherService.java
  74. 20 0
      src/main/java/com/example/xiaoshiweixinback/service/AssoFeedbackFileService.java
  75. 3 2
      src/main/java/com/example/xiaoshiweixinback/service/AssoPersonFunctionService.java
  76. 18 19
      src/main/java/com/example/xiaoshiweixinback/service/AssoPersonProductService.java
  77. 48 13
      src/main/java/com/example/xiaoshiweixinback/service/AssoPersonVipService.java
  78. 199 0
      src/main/java/com/example/xiaoshiweixinback/service/AssoPersonVoucherService.java
  79. 1 1
      src/main/java/com/example/xiaoshiweixinback/service/AssoProductFileService.java
  80. 57 0
      src/main/java/com/example/xiaoshiweixinback/service/AssoVipVoucherService.java
  81. 3 2
      src/main/java/com/example/xiaoshiweixinback/service/ImportTaskService.java
  82. 108 0
      src/main/java/com/example/xiaoshiweixinback/service/InviteMessageService.java
  83. 17 5
      src/main/java/com/example/xiaoshiweixinback/service/LoginService.java
  84. 44 6
      src/main/java/com/example/xiaoshiweixinback/service/MonitorService.java
  85. 85 40
      src/main/java/com/example/xiaoshiweixinback/service/OrderService.java
  86. 47 0
      src/main/java/com/example/xiaoshiweixinback/service/PersonService.java
  87. 6 5
      src/main/java/com/example/xiaoshiweixinback/service/ProductService.java
  88. 1 0
      src/main/java/com/example/xiaoshiweixinback/service/SysFunctionService.java
  89. 7 5
      src/main/java/com/example/xiaoshiweixinback/service/TicketService.java
  90. 58 0
      src/main/java/com/example/xiaoshiweixinback/service/UseFunctionRecordService.java
  91. 147 0
      src/main/java/com/example/xiaoshiweixinback/service/UserFeedbackService.java
  92. 78 24
      src/main/java/com/example/xiaoshiweixinback/service/VipService.java
  93. 121 0
      src/main/java/com/example/xiaoshiweixinback/service/VoucherService.java
  94. 14 0
      src/main/java/com/example/xiaoshiweixinback/service/exportPatent/PatentExportService.java
  95. 28 11
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/EsDenseVectorService.java
  96. 2 1
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/excel/ImportProductCategoryService.java
  97. 2 1
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/excel/ImportProductService.java
  98. 2 1
      src/main/java/com/example/xiaoshiweixinback/service/quartzService/JobService.java
  99. 3 2
      src/main/java/com/example/xiaoshiweixinback/service/quartzService/QuartzTaskService.java
  100. 0 0
      src/main/java/com/example/xiaoshiweixinback/service/weixinpay/AssoPayOrderGoodService.java

+ 7 - 1
pom.xml

@@ -122,12 +122,18 @@
             <artifactId>mybatis-typehandlers-jsr310</artifactId>
             <version>1.0.2</version>
         </dependency>
+
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-boot-starter</artifactId>
             <version>${mybatisplus.version}</version>
         </dependency>
         <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-extension</artifactId>
+            <version>${mybatisplus.version}</version>
+        </dependency>
+        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
         </dependency>
@@ -315,7 +321,7 @@
     </dependencies>
 
     <build>
-        <finalName>ECS_TEST</finalName>
+        <finalName>ECS_TESTEN</finalName>
         <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>

+ 17 - 0
src/main/java/com/example/xiaoshiweixinback/business/config/InsertBatchSqlInjector.java

@@ -0,0 +1,17 @@
+package com.example.xiaoshiweixinback.business.config;
+
+import com.baomidou.mybatisplus.core.injector.AbstractMethod;
+import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
+
+import java.util.List;
+
+public class InsertBatchSqlInjector extends DefaultSqlInjector {
+    @Override
+    public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
+        List<AbstractMethod> methodList = super.getMethodList(mapperClass,tableInfo);
+        methodList.add(new InsertBatchSomeColumn()); //添加InsertBatchSomeColumn方法
+        return methodList;
+    }
+}

+ 16 - 0
src/main/java/com/example/xiaoshiweixinback/business/config/MybatisPlusConfig.java

@@ -2,9 +2,12 @@ package com.example.xiaoshiweixinback.business.config;
 
 
 import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.core.config.GlobalConfig;
+import com.baomidou.mybatisplus.core.injector.ISqlInjector;
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
 import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -17,4 +20,17 @@ public class MybatisPlusConfig {
         interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
         return interceptor;
     }
+    @Bean
+    public InsertBatchSqlInjector easySqlInjector() {
+        return new InsertBatchSqlInjector();
+    }
+    @Bean
+    public GlobalConfig globalConfig(@Qualifier("easySqlInjector") ISqlInjector easySqlInjector){
+        GlobalConfig globalConfig = new GlobalConfig();
+        globalConfig.setSqlInjector(easySqlInjector);
+        return globalConfig;
+    }
+
 }
+
+

+ 2 - 2
src/main/java/com/example/xiaoshiweixinback/business/exception/BusinessException.java

@@ -15,9 +15,9 @@ public class BusinessException extends RuntimeException {
 	private String errorCode;// 异常代码
 	private String errorMessage;// 异常信息
 
-	public BusinessException(String errorCode, String errorMessage) {
+	public BusinessException(ExceptionEnum e, String errorMessage) {
 		super(errorMessage);
-		this.errorCode = errorCode;
+		this.errorCode = e.getCode();
 		this.errorMessage = errorMessage;
 	}
 

+ 19 - 2
src/main/java/com/example/xiaoshiweixinback/business/exception/ExceptionEnum.java

@@ -4,6 +4,25 @@ import lombok.Getter;
 
 @Getter
 public enum ExceptionEnum {
+    LOGIN_NO_LOGIN("401","未登录"),
+    LOGIN_ACCOUNT_MISTAKE("402","账号错误"),
+    LOGIN_PASWORD_MISTAKE("403","密码错误"),
+    LOGIN_ERROR("405","登录错误"),
+    LOGIN_INVITE_ERROR("406","邀请码错误"),
+
+    PERMISSION_ERROR("601","无权限"),
+    PERMISSION_NO_VIP("606","未开会员"),
+    PERMISSION_BEYOND_USETIME("607","超过使用次数"),
+
+    BUSINESS_ERROR("708","业务错误"),
+    BUSINESS_CHECK("709","参数校验错误"),
+
+
+    NO_NEED_PAY("901","支付成功"),
+
+
+
+
 
     /*APP端 100000-300000*/
     SUCCESS("000000", "调用成功"),
@@ -34,8 +53,6 @@ public enum ExceptionEnum {
 
 
 
-
-
     SYSTEM_ERROR("999999", "系统异常");
 
     private String code;// 异常代码

+ 18 - 0
src/main/java/com/example/xiaoshiweixinback/business/utils/DateUtils.java

@@ -739,6 +739,24 @@ public class DateUtils {
     }
 
 
+    /**
+     * 获取几天之后的日期
+     *
+     * @param date  yyyy-MM-dd HH:mm:ss
+     * @param
+     */
+    public static Date getPlusDayDate(Date date, int day) {
+        Calendar cal = Calendar.getInstance();
+        try {
+            cal.setTime(date);
+            cal.add(Calendar.DAY_OF_MONTH,day);
+            return cal.getTime();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
     public static void main(String[] args) {
         System.out.println(12 % 50);
     }

+ 24 - 11
src/main/java/com/example/xiaoshiweixinback/business/utils/FormatUtil.java

@@ -74,12 +74,11 @@ public class FormatUtil {
     }
 
     public static List<String> getDistinctList(List<String> a, List<String> b) {
-        if (a == null || a.size() == 0 &&(b==null||b.size()==0)) {
+        if (a == null || a.size() == 0 && (b == null || b.size() == 0)) {
             return null;
         } else if (b == null || b.size() == 0) {
-            return  new ArrayList<>(a);
-        }
-        else if(a==null||a.size()==0){
+            return new ArrayList<>(a);
+        } else if (a == null || a.size() == 0) {
             return new ArrayList<>(b);
         }
         a.addAll(b);
@@ -89,25 +88,39 @@ public class FormatUtil {
 
 
     public static List<Integer> StringTOIntegerList(List<String> strs) {
-        List<Integer> integers =new ArrayList<>();
-        strs.forEach(item->{
+        List<Integer> integers = new ArrayList<>();
+        strs.forEach(item -> {
             integers.add(Integer.parseInt(item));
         });
-        return  integers;
+        return integers;
     }
 
     public static List<String> IntegerTOStringList(List<Integer> integers) {
-        List<String> strs =new ArrayList<>();
-        integers.forEach(item->{
+        List<String> strs = new ArrayList<>();
+        integers.forEach(item -> {
             strs.add(item.toString());
         });
-        return  strs;
+        return strs;
     }
 
 
-    public static String getTimeStringYYMMdd(Date startDate){
+    public static String getTimeStringYYMMdd(Date startDate) {
         SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
         String dateString = formatter.format(startDate);
         return dateString;
     }
+
+    public static List<Integer> StringToIntegerList(String content, String regex) {
+        List<Integer> reList = new ArrayList<>();
+        if (content == null) {
+            return reList;
+        }
+        String[] contentStrs = content.split(regex);
+        for (int i = 0; i < contentStrs.length; i++) {
+            Integer t = Integer.parseInt(contentStrs[i]);
+            reList.add(t);
+        }
+        return reList;
+    }
+
 }

+ 12 - 5
src/main/java/com/example/xiaoshiweixinback/controller/PatentController.java

@@ -21,6 +21,7 @@ import com.example.xiaoshiweixinback.service.importPatent.EsDenseVectorService;
 import com.example.xiaoshiweixinback.service.importPatent.EsPatentService;
 import com.example.xiaoshiweixinback.service.importPatent.GetPatentFromExcelService;
 import com.example.xiaoshiweixinback.service.importPatent.ImportFromWebToEsService;
+import com.example.xiaoshiweixinback.useFunctionRecordAop.useFunctionRecord;
 import io.swagger.v3.oas.annotations.Operation;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -88,18 +89,24 @@ public class PatentController {
     //--------------------------- 关于图片的专利检索  --------------------------
     @Operation(summary = "根据关键词获取列表(图片用于排序)--zero")
     @PostMapping(value = "/getPatentVectors")
-    @checkLogin
+    @useFunctionRecord
     public Response getPatentVectors(@RequestParam(value = "vectorDTO", required = false) String vectorDTO, @RequestParam(value = "multipartFile", required = false) MultipartFile multipartFile) throws Exception {
+        Records records = null;
+        try {
         File file = FileUtils.multipartFileToFile(multipartFile);
         EsPatentVectorDTO esPatentVectorDTO = new EsPatentVectorDTO();
         if (StringUtils.isNotEmpty(vectorDTO)) {
             esPatentVectorDTO = JSONObject.parseObject(vectorDTO, EsPatentVectorDTO.class);
         }
-        Records records = null;
-        try {
+
+
             records = esDenseVectorService.getPatentVectors(esPatentVectorDTO, file);
-        } catch (BusinessException e) {
-            return Response.error(e.getErrorCode(), e.getMessage());
+        } catch (Exception e) {
+            if(e instanceof  BusinessException)
+
+            {   BusinessException b =(BusinessException) e;
+                return Response.error(b.getErrorCode(), e.getMessage());}
+        return Response.error(e.getMessage());
         }
         return Response.success(records);
     }

+ 21 - 0
src/main/java/com/example/xiaoshiweixinback/controller/PayController.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.example.xiaoshiweixinback.business.common.Constants;
 import com.example.xiaoshiweixinback.business.common.Response;
 import com.example.xiaoshiweixinback.business.common.base.Records;
+import com.example.xiaoshiweixinback.business.exception.BusinessException;
 import com.example.xiaoshiweixinback.business.utils.JsonUtils;
 import com.example.xiaoshiweixinback.business.utils.LoginUtils;
 import com.example.xiaoshiweixinback.entity.weixinPay.*;
@@ -55,9 +56,17 @@ public class PayController {
         Records records = new Records();
         try {
             GetPayTicketVO getPayTicketVO = weixinPayService.getPayTickets(weiXinPayDTO);
+            if(getPayTicketVO==null){
+                return Response.error("901","支付成功");
+            }
             records.setData(getPayTicketVO);
+
         } catch (Exception e) {
             e.printStackTrace();
+            if(e instanceof BusinessException) {
+                BusinessException e2 =(BusinessException) e;
+                return Response.error(e2.getErrorCode(), e2.getMessage());
+            }
         }
         return Response.success(records);
     }
@@ -80,4 +89,16 @@ public class PayController {
 
         return "success";
     }
+
+
+    @Operation(summary = "回调成功")
+    @GetMapping("/testSuccess")
+    public String testSuccess(String tradeNo) throws IOException {
+        try {
+            orderService.payBack(tradeNo);
+        } catch (Exception e) {
+            return "";
+        }
+        return "success";
+    }
 }

+ 55 - 0
src/main/java/com/example/xiaoshiweixinback/controller/UserFeedBackController.java

@@ -0,0 +1,55 @@
+package com.example.xiaoshiweixinback.controller;
+
+
+import com.example.xiaoshiweixinback.business.common.Constants;
+import com.example.xiaoshiweixinback.business.common.Response;
+import com.example.xiaoshiweixinback.business.common.base.Records;
+import com.example.xiaoshiweixinback.entity.userFeedBack.UserFeedbackAddNewDTO;
+import com.example.xiaoshiweixinback.entity.userFeedBack.UserFeedbackQueryDTO;
+import com.example.xiaoshiweixinback.service.UserFeedbackService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+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;
+
+/**
+ * 用户反馈的Controller层
+ *
+ * @Author chenyu
+ * @Date 2023/4/5
+ */
+@Tag(name = "用户反馈管理模块")
+@RequiredArgsConstructor
+@Slf4j
+@RequestMapping(Constants.XIAOSHI_WEIXINBACK  + "/userFeedBack")
+@RestController
+public class UserFeedBackController {
+    private final UserFeedbackService userFeedBackService;
+
+    @Operation(summary = "新增用户反馈")
+    @PostMapping("/addUserFeedback")
+    public Response addUserFeedback(@RequestBody UserFeedbackAddNewDTO userFeedbackAddNewDTO) {
+        try {
+            userFeedBackService.addUserFeedback(userFeedbackAddNewDTO);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+        return Response.success("新增用户反馈完成");
+    }
+
+   @Operation(summary = "查询用户反馈")
+    @PostMapping("/queryUserFeedback")
+    public Response queryUserFeedback(@RequestBody UserFeedbackQueryDTO userFeedbackQueryDTO) {
+       Records records =new Records();
+        try {
+             records = userFeedBackService.queryUserFeedback(userFeedbackQueryDTO);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+        return Response.success(records);
+    }
+}

+ 48 - 0
src/main/java/com/example/xiaoshiweixinback/controller/UserManageController.java

@@ -0,0 +1,48 @@
+package com.example.xiaoshiweixinback.controller;
+
+import com.example.xiaoshiweixinback.business.common.Constants;
+import com.example.xiaoshiweixinback.business.common.Response;
+import com.example.xiaoshiweixinback.business.common.base.Records;
+import com.example.xiaoshiweixinback.checkLogin.checkLogin;
+import com.example.xiaoshiweixinback.entity.invite.InvitedPersonQueryDTO;
+import com.example.xiaoshiweixinback.entity.person.PersonQueryDTO;
+import com.example.xiaoshiweixinback.entity.person.PersonQueryVO;
+import com.example.xiaoshiweixinback.entity.vip.ActiveVipDTO;
+import com.example.xiaoshiweixinback.entity.vip.PersonFunctionVO;
+import com.example.xiaoshiweixinback.entity.weixinPay.FunctionRightVO;
+import com.example.xiaoshiweixinback.service.InviteMessageService;
+import com.example.xiaoshiweixinback.service.PersonService;
+import com.example.xiaoshiweixinback.service.VipService;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 用户管理模块
+ */
+@Slf4j
+@RequestMapping(Constants.XIAOSHI_WEIXINBACK + "/userManage")
+@RestController
+@RequiredArgsConstructor
+public class UserManageController {
+    private final PersonService personService;
+    private final InviteMessageService inviteMessageService;
+    @Operation(summary = "查询用户信息")
+    @PostMapping("/queryUser")
+    public Response queryUser(@RequestBody PersonQueryDTO personQueryDTO) {
+      Records records =  personService.queryPersons(personQueryDTO);
+
+        return Response.success(records);
+    }
+
+    @Operation(summary = "查询邀请的用户")
+    @PostMapping("/queryInvitedPerson")
+    public Response queryInvitedPerson (@RequestBody InvitedPersonQueryDTO invitedPersonQueryDTO) {
+        Records records =  inviteMessageService.queryInvitedPerson(invitedPersonQueryDTO);
+        return Response.success(records);
+    }
+
+}

+ 1 - 2
src/main/java/com/example/xiaoshiweixinback/controller/VIPController.java

@@ -34,7 +34,7 @@ public class VIPController {
     @Operation(summary = "激活会员")
     @PostMapping("/activeVip")
     public Response activeVip(@RequestBody ActiveVipDTO activeVipDTO) {
-        vipService.activateVIP(null);
+        vipService.activateVIP(null,null);
         return Response.success("激活成功");
     }
 
@@ -44,7 +44,6 @@ public class VIPController {
         Records records = new Records();
         List<FunctionRightVO> functionRightVOList = vipService.getVipRights();
         records.setData(functionRightVOList);
-
         return Response.success(records);
     }
 

+ 100 - 0
src/main/java/com/example/xiaoshiweixinback/controller/VoucherManageController.java

@@ -0,0 +1,100 @@
+package com.example.xiaoshiweixinback.controller;
+
+import com.example.xiaoshiweixinback.business.common.Constants;
+import com.example.xiaoshiweixinback.business.common.Response;
+import com.example.xiaoshiweixinback.business.common.base.Records;
+import com.example.xiaoshiweixinback.entity.assoPersonVoucher.PersonVoucherQueryDTO;
+import com.example.xiaoshiweixinback.entity.assoPersonVoucher.SendVoucherToPersonVO;
+import com.example.xiaoshiweixinback.entity.vouchar.*;
+import com.example.xiaoshiweixinback.service.AssoPersonVoucherService;
+import com.example.xiaoshiweixinback.service.VoucherService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 用户管理模块
+ */
+@Slf4j
+@RequestMapping(Constants.XIAOSHI_WEIXINBACK + "/voucherManage")
+@RestController
+@RequiredArgsConstructor
+public class VoucherManageController {
+    private final VoucherService voucherService;
+    private final AssoPersonVoucherService assoPersonVoucherService;
+    @Operation(summary = "添加优惠券")
+    @PostMapping("/addVoucher")
+    public Response addVoucher  (@RequestBody VoucherAddDTO voucherAddDTO) {
+      Integer id=  voucherService.addVoucher(voucherAddDTO);
+        return Response.success(id);
+    }
+
+    @Operation(summary = "编辑优惠券")
+    @PostMapping("/editVoucher")
+    public Response editVoucher  (@RequestBody VoucherUpdateDTO voucherUpdateDTO) {
+     Integer id= voucherService.editVoucher(voucherUpdateDTO);
+        return Response.success(id);
+    }
+
+    @Operation(summary = "查询优惠券")
+    @PostMapping("/queryVoucher")
+    public Response queryVoucher (@RequestBody VoucherQueryDTO voucherQueryDTO) {
+        Records records =new Records();
+        try {
+             records = voucherService.queryVector(voucherQueryDTO);
+
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            return Response.error("请求失败");
+        }
+        return Response.success(records);
+    }
+
+
+    @Operation(summary = "下架优惠券")
+    @PostMapping("/updateBatchVoucher")
+    public Response updateBatchVoucher (@RequestBody VoucherBatchUpdateDTO voucherBatchUpdateDTO) {
+      List<Integer> ids=  voucherService.updateBatchVoucher(voucherBatchUpdateDTO);
+        return Response.success(true);
+    }
+    @Operation(summary = "查看优惠券详情")
+    @GetMapping("/queryVectorDetail")
+    public Response queryVectorDetail (Integer id) {
+        VoucherVO voucherVO =  voucherService.queryVectorDetail(id);
+        return Response.success(voucherVO);
+    }
+
+    @Operation(summary = "向多个用户发放优惠券")
+    @PostMapping("/sendVoucherToPerson")
+    public Response sendVoucherToPerson (@RequestBody SendVoucherToPersonVO sendVoucherToPersonVO) {
+        try {
+            sendVoucherToPersonVO.setGetWay(0);
+            assoPersonVoucherService.sendVoucherToPerson(sendVoucherToPersonVO);
+        }
+        catch (Exception e)
+        {
+            return Response.error(e.getMessage());
+        }
+        return Response.success(true);
+    }
+
+
+    @Operation(summary = "查看个人拥有的优惠券")
+    @PostMapping("/queryPersonVoucher")
+    public Response queryPersonVoucher (@RequestBody PersonVoucherQueryDTO personVoucherQueryDTO) {
+        Records records =new Records();
+        try {
+            records=  assoPersonVoucherService.queryPersonVoucher(personVoucherQueryDTO);
+        }
+        catch (Exception e)
+        {e.printStackTrace();
+            return Response.error(e.getMessage());
+        }
+        return Response.success(records);
+    }
+}

+ 74 - 0
src/main/java/com/example/xiaoshiweixinback/domain/Activity.java

@@ -0,0 +1,74 @@
+package com.example.xiaoshiweixinback.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.example.xiaoshiweixinback.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ * 折扣策略
+ * @TableName activity
+ */
+@TableName(value ="activity")
+@Data
+public class Activity extends BaseEntity<Activity> {
+    /**
+     * ID
+     */
+    private Integer id;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 类型
+0赠送金额券 1折扣 2直接减免金额
+
+     */
+    private Integer type;
+
+    /**
+     * 折扣
+
+     */
+    private Double amount;
+
+    /**
+     * 使用期限
+
+     */
+    private Date expirationTime;
+
+    /**
+     * 使用范围
+     */
+    private String useScope;
+
+    /**
+     * 0下架,1上架中
+     */
+    private Integer state;
+
+    /**
+     * 使用门槛
+     */
+    private Double threshold;
+
+    /**
+     * 
+     */
+    private String createId;
+
+    /**
+     * 
+     */
+    private Date createTime;
+
+}

+ 41 - 0
src/main/java/com/example/xiaoshiweixinback/domain/AssoActivityVoucher.java

@@ -0,0 +1,41 @@
+package com.example.xiaoshiweixinback.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+
+import com.example.xiaoshiweixinback.domain.Activity;
+import com.example.xiaoshiweixinback.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ * 活动和优惠券关联表
+ * @TableName asso_activity_voucher
+ */
+@TableName(value ="asso_activity_voucher")
+@Data
+public class AssoActivityVoucher extends BaseEntity<AssoActivityVoucher> {
+    /**
+     * ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 活动id
+     */
+    private Integer activityId;
+
+    /**
+     * 优惠券id
+     */
+    private Integer voucherId;
+
+    /**
+     * 优惠券数量
+     */
+    private Integer voucherNum;
+
+}

+ 37 - 0
src/main/java/com/example/xiaoshiweixinback/domain/AssoFeedbackFile.java

@@ -0,0 +1,37 @@
+package com.example.xiaoshiweixinback.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+
+import com.example.xiaoshiweixinback.domain.AssoCategoryFile;
+import com.example.xiaoshiweixinback.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ * 用户反馈截图
+ * @TableName asso_feedback_file
+ */
+@TableName(value ="asso_feedback_file")
+@Data
+public class AssoFeedbackFile  extends BaseEntity<AssoCategoryFile> {
+    /**
+     * ID
+     */
+    private Integer id;
+
+    /**
+     * 
+     */
+    private Integer personFeedbackId;
+
+    /**
+     * 
+     */
+    private String fileGuid;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 45 - 0
src/main/java/com/example/xiaoshiweixinback/domain/AssoPayOrderGood.java

@@ -0,0 +1,45 @@
+package com.example.xiaoshiweixinback.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+
+import com.example.xiaoshiweixinback.domain.AssoCategoryFile;
+import com.example.xiaoshiweixinback.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ * 支付订单和产品关联表
+ * @TableName asso_pay_order_good
+ */
+@TableName(value ="asso_pay_order_good")
+@Data
+public class AssoPayOrderGood  extends BaseEntity<AssoPayOrderGood> {
+    /**
+     * ID
+     */
+    private Integer id;
+
+    /**
+     * 1会员 2工单
+     */
+    private Integer goodType;
+
+    /**
+     * 
+     */
+    private String goodUuid;
+
+    /**
+     * 
+     */
+    private Integer goodCount;
+
+    /**
+     * 
+     */
+    private Double goodPrice;
+    private Integer  payOrderId;
+}

+ 34 - 0
src/main/java/com/example/xiaoshiweixinback/domain/AssoPayOrderVoucher.java

@@ -0,0 +1,34 @@
+package com.example.xiaoshiweixinback.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+
+import com.example.xiaoshiweixinback.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ * 订单和优惠券关联表
+ * @TableName asso_pay_order_voucher
+ */
+@TableName(value ="asso_pay_order_voucher")
+@Data
+public class AssoPayOrderVoucher extends BaseEntity<AssoPayOrderVoucher> {
+    /**
+     * id
+     */
+    private Integer id;
+
+    /**
+     * 
+     */
+    private Integer payOrderId;
+
+    /**
+     * 人员优惠券关联id
+     */
+    private Integer assoPersonVoucherId;
+
+}

+ 1 - 0
src/main/java/com/example/xiaoshiweixinback/domain/AssoPersonVip.java

@@ -35,4 +35,5 @@ public class AssoPersonVip extends BaseEntity<AssoPersonVip> {
 
     private Date createTime;
     private Date expiryTime;
+    private Integer vipType;
 }

+ 75 - 0
src/main/java/com/example/xiaoshiweixinback/domain/AssoPersonVoucher.java

@@ -0,0 +1,75 @@
+package com.example.xiaoshiweixinback.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 人员优惠券关联表
+ * @TableName asso_person_voucher
+ */
+@TableName(value ="asso_person_voucher")
+@Data
+public class AssoPersonVoucher   extends BaseEntity<AssoPersonVoucher>{
+    /**
+     * ID
+     */
+    private Integer id;
+
+    /**
+     * 人员guid
+     */
+    private String personUuid;
+
+    /**
+     * 优惠券名称
+     */
+    private String voucherName;
+
+    /**
+     * 0金额券 1折扣 
+     */
+    private Integer voucherType;
+
+    /**
+     * 可使用时间
+     */
+    private Date availableTime;
+
+    /**
+     * 金额,或折扣
+     */
+    private Double amount;
+
+
+    /**
+     * 使用期限
+     */
+    private Date expirationTime;
+
+    /**
+     * 使用范围0开通会员,1购买券,2支付工单
+     */
+    private String useScope;
+
+    /**
+     * 0未使用1已使用2冻结中
+     */
+    private Integer useState;
+
+    /**
+     * 使用门槛
+     */
+    private Double threshold;
+
+    /**
+     *
+     */
+    private Date createTime;
+    private Integer getWay;
+
+}

+ 1 - 0
src/main/java/com/example/xiaoshiweixinback/domain/AssoVipFunction.java

@@ -33,4 +33,5 @@ public class AssoVipFunction extends BaseEntity<AssoVipFunction> {
     private String functionUuid;
     private String functionParameter;
     private String description;
+    private Integer vipType;
 }

+ 37 - 0
src/main/java/com/example/xiaoshiweixinback/domain/AssoVipVoucher.java

@@ -0,0 +1,37 @@
+package com.example.xiaoshiweixinback.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+
+import com.example.xiaoshiweixinback.domain.BaseEntity;
+import com.example.xiaoshiweixinback.domain.ImportTask;
+import lombok.Data;
+
+/**
+ * vip和优惠券关联表
+ * @TableName asso_vip_voucher
+ */
+@TableName(value ="asso_vip_voucher")
+@Data
+public class AssoVipVoucher extends BaseEntity<AssoVipVoucher> {
+    /**
+     * ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 
+     */
+    private String vipUuid;
+
+    /**
+     * 
+     */
+    private Integer voucherId;
+
+    private Integer voucherCount;
+}

+ 41 - 0
src/main/java/com/example/xiaoshiweixinback/domain/InviteMessage.java

@@ -0,0 +1,41 @@
+package com.example.xiaoshiweixinback.domain;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+
+import lombok.Data;
+
+/**
+ * 邀请信息表
+ * @TableName invite_message
+ */
+@TableName(value ="invite_message")
+@Data
+public class InviteMessage extends BaseEntity<InviteMessage> {
+    /**
+     * ID
+     */
+    private Integer id;
+
+    /**
+     * 邀请人uuid
+     */
+    private String invitePersonUuid;
+
+    /**
+     * 被邀请人uuid
+     */
+    private String invitedPersonUuid;
+
+    /**
+     * 是否购买vip
+     */
+    private Boolean ifBuyVip;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+}

+ 43 - 0
src/main/java/com/example/xiaoshiweixinback/domain/UseFunctionRecord.java

@@ -0,0 +1,43 @@
+package com.example.xiaoshiweixinback.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 使用功能记录
+ * @TableName use_function_record
+ */
+@TableName(value ="use_function_record")
+@Data
+public class UseFunctionRecord  extends BaseEntity<UseFunctionRecord>  {
+    /**
+     * ID
+     */
+    private Integer id;
+
+    /**
+     * 人员id
+     */
+    private String personUuid;
+
+    /**
+     * 功能id
+     */
+    private String functionUuid;
+
+    /**
+     * 
+     */
+    private String functionParameter;
+
+    /**
+     * 
+     */
+    private Date createTime;
+
+}

+ 49 - 0
src/main/java/com/example/xiaoshiweixinback/domain/UserFeedback.java

@@ -0,0 +1,49 @@
+package com.example.xiaoshiweixinback.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.example.xiaoshiweixinback.domain.BaseEntity;
+import com.example.xiaoshiweixinback.domain.TicketRightsProtection;
+import lombok.Data;
+
+/**
+ * 
+ * @TableName user_feedback
+ */
+@TableName(value ="user_feedback")
+@Data
+public class UserFeedback extends BaseEntity<UserFeedback> {
+    /**
+     * 主键id
+     */
+    private Integer id;
+
+
+    /**
+     * 邮箱
+     */
+    private String email;
+
+    /**
+     * 反馈内容
+     */
+    private String feedbackContent;
+
+    /**
+     * 反馈人id
+     */
+    private String createId;
+
+
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+}

+ 2 - 0
src/main/java/com/example/xiaoshiweixinback/domain/Vip.java

@@ -32,8 +32,10 @@ public class Vip extends BaseEntity<Vip> {
      *
      */
     private String name;
+    private String vipName;
     private String vipUuid;
     private Integer lastTime;
     private Double price;
     private String configParameter;
+    private Double finalPrice;
 }

+ 86 - 0
src/main/java/com/example/xiaoshiweixinback/domain/Voucher.java

@@ -0,0 +1,86 @@
+package com.example.xiaoshiweixinback.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.example.xiaoshiweixinback.domain.BaseEntity;
+
+import lombok.Data;
+
+/**
+ *  优惠券
+ * @TableName voucher
+ */
+@TableName(value ="voucher")
+@Data
+public class Voucher extends BaseEntity<Voucher> {
+    /**
+     * ID
+     */
+    private Integer id;
+    /**
+     * 名称
+     */
+    private String name;
+
+    private Integer type;
+    private Double amount;
+
+    /**
+     * 可领取时间
+     */
+    private Date availableTime;
+
+    /**
+     * 使用期限
+     */
+    private Date expirationTime;
+
+    /**
+     * 使用范围
+     -1开通会员,0购买券 1.填写工单  2.知识产权维权  3.知识产权应诉  4.我要申请专利以,隔开
+     */
+    private String useScope;
+
+    /**
+     * 状态
+
+     */
+    private Integer state;
+
+    /**
+     * c备注
+     */
+    private String remark;
+
+    /**
+     * 使用门槛
+     */
+    private Double threshold;
+
+    /**
+     * 售卖价格
+     */
+    private Double sellingPrice;
+
+    /**
+     * 获取方式
+0赠送 1购买
+     */
+    private Integer getWay;
+
+    /**
+     * 
+     */
+    private String createId;
+
+    /**
+     * 
+     */
+    private Date createTime;
+
+}

+ 16 - 0
src/main/java/com/example/xiaoshiweixinback/entity/assoPersonVoucher/PersonVoucherQueryDTO.java

@@ -0,0 +1,16 @@
+package com.example.xiaoshiweixinback.entity.assoPersonVoucher;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class PersonVoucherQueryDTO {
+    private Long current;
+    private Long size;
+    private Integer state;
+    private List<Integer> useScopes;
+    private String personUuid;
+    private Boolean ifExpiration;
+}

+ 18 - 0
src/main/java/com/example/xiaoshiweixinback/entity/assoPersonVoucher/SendVoucherToPersonVO.java

@@ -0,0 +1,18 @@
+package com.example.xiaoshiweixinback.entity.assoPersonVoucher;
+
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SendVoucherToPersonVO {
+    private List<String> personUuids;
+    private List<InAddVoucherVO> inAddVoucherVOS;
+    private Integer getWay;
+    @Data
+    public static class InAddVoucherVO {
+        private Integer voucherId;
+        private Integer number;
+    }
+}

+ 1 - 0
src/main/java/com/example/xiaoshiweixinback/entity/dto/person/LoginByWxDTO.java

@@ -13,4 +13,5 @@ public class LoginByWxDTO {
 
     //加密算法的初始向量
     private String iv;
+    private String inviteCode;
 }

+ 1 - 0
src/main/java/com/example/xiaoshiweixinback/entity/dto/person/LoginDTO.java

@@ -17,5 +17,6 @@ public class LoginDTO {
 
     //密码
     private String password;
+    private String inviteCode;
 
 }

+ 12 - 0
src/main/java/com/example/xiaoshiweixinback/entity/invite/InvitedPersonQueryDTO.java

@@ -0,0 +1,12 @@
+package com.example.xiaoshiweixinback.entity.invite;
+
+import lombok.Data;
+
+@Data
+public class InvitedPersonQueryDTO {
+    private Long current;
+    private Long size;
+    private String name;
+    private String personUuid;
+    private String phoneNum;
+}

+ 21 - 0
src/main/java/com/example/xiaoshiweixinback/entity/invite/InvitedPersonVO.java

@@ -0,0 +1,21 @@
+package com.example.xiaoshiweixinback.entity.invite;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class InvitedPersonVO {
+
+   private String name;
+    private  String fileGuid;
+    private String phoneNum;
+    private  String email;
+    private String userName;
+    private String uuid;
+    private  Integer vipType;
+   private String vipName;
+   private  String vipUuid;
+   private Boolean ifBuyVip;
+   private Date createTime;
+}

+ 14 - 0
src/main/java/com/example/xiaoshiweixinback/entity/person/PersonQueryDTO.java

@@ -0,0 +1,14 @@
+package com.example.xiaoshiweixinback.entity.person;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PersonQueryDTO {
+    private Long current;
+    private Long size;
+    private String name;
+    private Integer vipType;
+    private String phoneNum;
+}

+ 21 - 0
src/main/java/com/example/xiaoshiweixinback/entity/person/PersonQueryVO.java

@@ -0,0 +1,21 @@
+package com.example.xiaoshiweixinback.entity.person;
+
+import com.example.xiaoshiweixinback.entity.vip.VipMessageVO;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class PersonQueryVO {
+
+   private String name;
+    private  String fileGuid;
+    private String phoneNum;
+    private  String email;
+    private String userName;
+    private String uuid;
+    private  Integer vipType;
+   private String vipName;
+   private  String vipUuid;
+   private Date createTime;
+}

+ 20 - 0
src/main/java/com/example/xiaoshiweixinback/entity/person/PersonVO.java

@@ -0,0 +1,20 @@
+package com.example.xiaoshiweixinback.entity.person;
+
+import com.example.xiaoshiweixinback.entity.vip.VipMessageVO;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class PersonVO {
+
+   private String name;
+    private  String fileGuid;
+    private String phoneNum;
+    private  String email;
+    private String userName;
+    private String uuid;
+    private  Integer vipType;
+    private VipMessageVO vipMessageVO;
+    private Date createTime;
+}

+ 29 - 0
src/main/java/com/example/xiaoshiweixinback/entity/userFeedBack/UserFeedbackAddNewDTO.java

@@ -0,0 +1,29 @@
+package com.example.xiaoshiweixinback.entity.userFeedBack;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 新增用户反馈的DTO类
+ *
+ * @Author chenyu
+ * @Date 2023/4/4
+ */
+@Accessors(chain = true)
+@Data
+public class UserFeedbackAddNewDTO {
+
+    /**
+     * 邮箱
+     */
+    private String email;
+    /**
+     * 反馈内容
+     */
+    private String feedbackContent;
+    private List<String> fileGuids;
+
+}

+ 12 - 0
src/main/java/com/example/xiaoshiweixinback/entity/userFeedBack/UserFeedbackQueryDTO.java

@@ -0,0 +1,12 @@
+package com.example.xiaoshiweixinback.entity.userFeedBack;
+
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UserFeedbackQueryDTO {
+    private Long current;
+    private Long size;
+}

+ 22 - 0
src/main/java/com/example/xiaoshiweixinback/entity/userFeedBack/UserFeedbackVO.java

@@ -0,0 +1,22 @@
+package com.example.xiaoshiweixinback.entity.userFeedBack;
+
+import com.example.xiaoshiweixinback.business.common.base.SystemFile;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class UserFeedbackVO {
+    private Integer id;
+    private String email;
+    /**
+     * 反馈内容
+     */
+    private String feedbackContent;
+    private String createId;
+    private String phoneNum;
+    private Date createTime;
+    private List<SystemFile> systemFiles;
+
+}

+ 31 - 0
src/main/java/com/example/xiaoshiweixinback/entity/vouchar/VoucherAddDTO.java

@@ -0,0 +1,31 @@
+package com.example.xiaoshiweixinback.entity.vouchar;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class VoucherAddDTO {
+    private String name;
+    private Integer type;
+    private Double amount;
+    @JsonFormat(
+            pattern = "yyyy-MM-dd",
+            timezone = "GMT+8"
+    )
+    private Date availableTime;
+    @JsonFormat(
+            pattern = "yyyy-MM-dd",
+            timezone = "GMT+8"
+    )
+    private Date expirationTime;
+    private List<Integer> useScopes;
+    private Integer state;
+    private String remark;
+    private Double threshold;
+    private Double sellingPrice;
+    private Integer getWay;
+
+}

+ 14 - 0
src/main/java/com/example/xiaoshiweixinback/entity/vouchar/VoucherBatchUpdateDTO.java

@@ -0,0 +1,14 @@
+package com.example.xiaoshiweixinback.entity.vouchar;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class VoucherBatchUpdateDTO {
+    private List<Integer> ids;
+    private Integer state;
+
+}

+ 19 - 0
src/main/java/com/example/xiaoshiweixinback/entity/vouchar/VoucherQueryDTO.java

@@ -0,0 +1,19 @@
+package com.example.xiaoshiweixinback.entity.vouchar;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class VoucherQueryDTO {
+    private Long current;
+    private Long size;
+    private Integer state;
+    private List<Integer> useScopes;
+    private String useScope;
+    private Boolean ifAvailable;
+    private Boolean ifExpiration;
+    private Integer getWay;
+
+}

+ 31 - 0
src/main/java/com/example/xiaoshiweixinback/entity/vouchar/VoucherUpdateDTO.java

@@ -0,0 +1,31 @@
+package com.example.xiaoshiweixinback.entity.vouchar;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class VoucherUpdateDTO {
+    private String name;
+    private Integer type;
+    private Double amount;
+    @JsonFormat(
+            pattern = "yyyy-MM-dd",
+            timezone = "GMT+8"
+    )
+    private Date availableTime;
+    @JsonFormat(
+            pattern = "yyyy-MM-dd",
+            timezone = "GMT+8"
+    )
+    private Date expirationTime;
+    private List<Integer> useScopes;
+    private Integer state;
+    private String remark;
+    private Double threshold;
+    private Double sellingPrice;
+    private Integer getWay;
+    private Integer id;
+}

+ 83 - 0
src/main/java/com/example/xiaoshiweixinback/entity/vouchar/VoucherVO.java

@@ -0,0 +1,83 @@
+package com.example.xiaoshiweixinback.entity.vouchar;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class VoucherVO {
+    /**
+     * ID
+     */
+    private Integer id;
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 可领取时间
+     */
+    @JsonFormat(
+            pattern = "yyyy-MM-dd",
+            timezone = "GMT+8"
+    )
+    private Date availableTime;
+
+    /**
+     * 使用期限
+     */
+    @JsonFormat(
+            pattern = "yyyy-MM-dd",
+            timezone = "GMT+8"
+    )
+    private Date expirationTime;
+
+    /**
+     *
+    -1开通会员,0购买券 1.填写工单  2.知识产权维权  3.知识产权应诉  4.我要申请专利
+     */
+    private List<Integer> useScopes;
+
+    /**
+     * 状态
+
+     */
+    private Integer state;
+
+    private Integer type;
+
+    /**
+     * c备注
+     */
+    private String remark;
+
+    /**
+     * 使用门槛
+     */
+    private Double threshold;
+
+    /**
+     * 售卖价格
+     */
+    private Double sellingPrice;
+
+    /**
+     * 获取方式
+     0赠送 1购买
+     */
+    private Integer getWay;
+
+    /**
+     *
+     */
+    private String createId;
+
+    /**
+     *
+     */
+    private Date createTime;
+    private Double amount;
+}

+ 13 - 0
src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/GoodVO.java

@@ -0,0 +1,13 @@
+package com.example.xiaoshiweixinback.entity.weixinPay;
+
+import lombok.Data;
+
+@Data
+public class GoodVO {
+
+    private String goodType;
+    private String id;
+    private String name;
+    private Double price;
+    private Integer Num;
+}

+ 1 - 0
src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/VipRightsVO.java

@@ -9,4 +9,5 @@ public class VipRightsVO {
    private String description;
    private String functionParameter;
    private String vipUuid;
+   private Integer vipType;
 }

+ 16 - 1
src/main/java/com/example/xiaoshiweixinback/entity/weixinPay/WeiXinPayDTO.java

@@ -2,8 +2,23 @@ package com.example.xiaoshiweixinback.entity.weixinPay;
 
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class WeiXinPayDTO {
     private Integer goodType;
-    private String goodUuid;
+    private List<GoodVO> goods;
+    private  Double servicePrice;
+    //总价格
+    private Double price;
+    //折扣
+    private  Double discount;
+    /**
+     * 使用的已购买的优惠券id(人员和优惠券关联id)
+     */
+    private  List<Integer> personVoucherIds;
+    //最终价格
+    private Double finalPrice;
+
+
 }

+ 31 - 0
src/main/java/com/example/xiaoshiweixinback/factorys/goodFactory/GoodFactory.java

@@ -0,0 +1,31 @@
+package com.example.xiaoshiweixinback.factorys.goodFactory;
+
+import com.example.xiaoshiweixinback.entity.weixinPay.GoodVO;
+import com.example.xiaoshiweixinback.factorys.patentExportFactory.GetValueImp;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+@Component
+@RequiredArgsConstructor
+public class GoodFactory {
+    private final GoodTicketService goodTicketService;
+    private final GoodVipService goodVipService;
+    private final GoodVoucherService goodVoucherService;
+    public GoodImp getClass(Integer goodType) {
+        switch (goodType)
+        {
+            case -1:
+                return goodVipService;
+            case 0:
+                return goodVoucherService;
+            case 1:
+            case 2:
+            case 3:
+            case 4:
+                return goodTicketService;
+
+        }
+
+        return null;
+    }
+}

+ 17 - 0
src/main/java/com/example/xiaoshiweixinback/factorys/goodFactory/GoodImp.java

@@ -0,0 +1,17 @@
+package com.example.xiaoshiweixinback.factorys.goodFactory;
+
+import com.example.xiaoshiweixinback.domain.AssoPayOrderGood;
+import com.example.xiaoshiweixinback.domain.Order;
+import com.example.xiaoshiweixinback.entity.weixinPay.GoodVO;
+
+import java.util.List;
+
+/**
+ * @Author lrj
+ * @Date 2024/6/30
+ */
+public interface GoodImp {
+ public void activeGood(Order order, List<AssoPayOrderGood> assoPayOrderGoods);
+
+ public Double computePrice(List<GoodVO> goodVOs);
+}

+ 50 - 0
src/main/java/com/example/xiaoshiweixinback/factorys/goodFactory/GoodTicketService.java

@@ -0,0 +1,50 @@
+package com.example.xiaoshiweixinback.factorys.goodFactory;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
+import com.example.xiaoshiweixinback.business.utils.FormatUtil;
+import com.example.xiaoshiweixinback.domain.AssoPayOrderGood;
+import com.example.xiaoshiweixinback.domain.Order;
+import com.example.xiaoshiweixinback.domain.Ticket;
+import com.example.xiaoshiweixinback.domain.Voucher;
+import com.example.xiaoshiweixinback.entity.weixinPay.GoodVO;
+import com.example.xiaoshiweixinback.service.TicketService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Component
+@RequiredArgsConstructor
+public class GoodTicketService implements GoodImp {
+    private final TicketService ticketService;
+
+    @Override
+    public void activeGood(Order order, List<AssoPayOrderGood> assoPayOrderGoods) {
+        List<String> goodUuids = assoPayOrderGoods.stream().map(AssoPayOrderGood::getGoodUuid).collect(Collectors.toList());
+        goodUuids.forEach(item -> {
+            ticketService.updateProcess(item, 3);
+        });
+    }
+
+
+    @Override
+    public Double computePrice(List<GoodVO> goodVOs) {
+        Double totalPrice = 0d;
+        List<String> idStrs = goodVOs.stream().map(GoodVO::getId).distinct().collect(Collectors.toList());
+        List<Integer> ids =FormatUtil.StringTOIntegerList(idStrs);
+        LambdaQueryWrapper<Ticket> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(Ticket::getId, ids);
+        List<Ticket> tickets =ticketService.list(queryWrapper);
+        if(tickets.size()!=ids.size()){
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR,"工单信息错误");
+        }
+        for (Ticket ticket:tickets){
+            totalPrice+=ticket.getPrice();
+        }
+        return totalPrice;
+    }
+}

+ 44 - 0
src/main/java/com/example/xiaoshiweixinback/factorys/goodFactory/GoodVipService.java

@@ -0,0 +1,44 @@
+package com.example.xiaoshiweixinback.factorys.goodFactory;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
+import com.example.xiaoshiweixinback.business.utils.FormatUtil;
+import com.example.xiaoshiweixinback.domain.*;
+import com.example.xiaoshiweixinback.entity.weixinPay.GoodVO;
+import com.example.xiaoshiweixinback.service.ActivityService;
+import com.example.xiaoshiweixinback.service.VipService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Component
+@RequiredArgsConstructor
+public class GoodVipService implements GoodImp {
+    private final VipService vipService;
+    private final ActivityService activityService;
+    private static Integer ACTIVITY_SCOPE=-1;
+@Override
+public void activeGood(Order order, List<AssoPayOrderGood> assoPayOrderGoods){
+AssoPayOrderGood assoPayOrderGood =assoPayOrderGoods.get(0);
+vipService.activateVIP(order,assoPayOrderGood.getGoodUuid());
+String personUuid =order.getPersonUuid();
+ activityService.doingActivity(personUuid,ACTIVITY_SCOPE);
+}
+
+    @Override
+    public Double computePrice(List<GoodVO> goodVOs) {
+        Double totalPrice = 0d;
+    String idStr =goodVOs.get(0).getId();
+    Vip vip =vipService.getVipByUuId(idStr);
+     if(vip==null){
+         throw  new BusinessException(ExceptionEnum.BUSINESS_ERROR,"会员不存在");
+     }
+     totalPrice+=vip.getPrice();
+        return totalPrice;
+    }
+}

+ 76 - 0
src/main/java/com/example/xiaoshiweixinback/factorys/goodFactory/GoodVoucherService.java

@@ -0,0 +1,76 @@
+package com.example.xiaoshiweixinback.factorys.goodFactory;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
+import com.example.xiaoshiweixinback.business.utils.FormatUtil;
+import com.example.xiaoshiweixinback.domain.AssoPayOrderGood;
+import com.example.xiaoshiweixinback.domain.Order;
+import com.example.xiaoshiweixinback.domain.Voucher;
+import com.example.xiaoshiweixinback.entity.assoPersonVoucher.SendVoucherToPersonVO;
+import com.example.xiaoshiweixinback.entity.weixinPay.GoodVO;
+import com.example.xiaoshiweixinback.service.AssoPersonVoucherService;
+import com.example.xiaoshiweixinback.service.VoucherService;
+import com.example.xiaoshiweixinback.service.weixinpay.AssoPayOrderVoucherService;
+import lombok.Data;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Component
+@RequiredArgsConstructor
+public class GoodVoucherService implements GoodImp {
+    private final AssoPersonVoucherService assoPersonVoucherService;
+    private final VoucherService voucherService;
+
+    @Override
+    public void activeGood(Order order, List<AssoPayOrderGood> assoPayOrderGoods) {
+        String personUuid = order.getPersonUuid();
+        List<String> personUuids = new ArrayList<>();
+        personUuids.add(personUuid);
+
+        SendVoucherToPersonVO sendVoucherToPersonVO = new SendVoucherToPersonVO();
+        sendVoucherToPersonVO.setPersonUuids(personUuids);
+        List<SendVoucherToPersonVO.InAddVoucherVO> inAddVoucherVOS = new ArrayList<>();
+        assoPayOrderGoods.forEach(item -> {
+            SendVoucherToPersonVO.InAddVoucherVO voucherVO = new SendVoucherToPersonVO.InAddVoucherVO();
+            voucherVO.setVoucherId(Integer.parseInt(item.getGoodUuid()));
+            voucherVO.setNumber(item.getGoodCount());
+            inAddVoucherVOS.add(voucherVO);
+        });
+        sendVoucherToPersonVO.setInAddVoucherVOS(inAddVoucherVOS);
+        sendVoucherToPersonVO.setGetWay(1);
+        assoPersonVoucherService.sendVoucherToPerson(sendVoucherToPersonVO);
+    }
+
+
+    @Override
+    public Double computePrice(List<GoodVO> goodVOs) {
+        Double totalPrice = 0d;
+        List<String> idStrs = goodVOs.stream().map(GoodVO::getId).distinct().collect(Collectors.toList());
+        List<Integer> ids = FormatUtil.StringTOIntegerList(idStrs);
+
+        LambdaQueryWrapper<Voucher> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(Voucher::getId, ids)
+                .eq(Voucher::getState, 1);
+
+        List<Voucher> vouchers = voucherService.list(queryWrapper);
+        if (vouchers.size() != ids.size()) {
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "优惠券使用错误");
+        }
+        for (GoodVO goodVO : goodVOs) {
+            Integer id = Integer.parseInt(goodVO.getId().toString());
+            Voucher voucher = vouchers.stream().filter(item -> item.getId().equals(id)).findFirst().orElse(null);
+            if (voucher == null) {
+                throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "优惠券使用错误");
+            }
+            Double price = voucher.getSellingPrice();
+            Integer num = goodVO.getNum();
+            totalPrice += price * num;
+        }
+        return totalPrice;
+    }
+}

+ 56 - 0
src/main/java/com/example/xiaoshiweixinback/factorys/useFunctionFactory/CheckConcernProduct.java

@@ -0,0 +1,56 @@
+package com.example.xiaoshiweixinback.factorys.useFunctionFactory;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
+import com.example.xiaoshiweixinback.business.utils.CacheUtil;
+import com.example.xiaoshiweixinback.business.utils.LoginUtils;
+import com.example.xiaoshiweixinback.domain.AssoPersonProduct;
+import com.example.xiaoshiweixinback.domain.AssoVipFunction;
+import com.example.xiaoshiweixinback.domain.UseFunctionRecord;
+import com.example.xiaoshiweixinback.entity.sysFuctionRights.FunctionConfig;
+import com.example.xiaoshiweixinback.entity.vo.PersonnelVO;
+import com.example.xiaoshiweixinback.service.AssoPersonProductService;
+import com.example.xiaoshiweixinback.service.UseFunctionRecordService;
+import com.example.xiaoshiweixinback.service.VipService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/4/12
+ */
+@Component
+@RequiredArgsConstructor
+public class CheckConcernProduct implements UseFunctionImp {
+    private final VipService vipService;
+    private final UseFunctionRecordService useFunctionRecordService;
+    private final AssoPersonProductService assoPersonProductService;
+    private final CacheUtil cacheUtil;
+
+    @Override
+    public AssoVipFunction checkFunction(String functionUuid, Object o) {
+        PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
+        AssoVipFunction assoVipFunction = vipService.getVipFunctionMessage(functionUuid);
+        if (assoVipFunction == null) {
+            throw new BusinessException(ExceptionEnum.PERMISSION_NO_VIP);
+        }
+        FunctionConfig functionConfig = JSON.parseObject(assoVipFunction.getFunctionParameter(), FunctionConfig.class);
+        Integer canGetNum = functionConfig.getCanGetNum();
+
+        LambdaQueryWrapper<AssoPersonProduct> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoPersonProduct::getPersonUuid, personnelVO.getUuid());
+        Long total = assoPersonProductService.count(queryWrapper);
+
+        if (total >= canGetNum) {
+            if (assoVipFunction.getVipType().equals(0)) {
+                throw new BusinessException(ExceptionEnum.PERMISSION_NO_VIP);
+            }
+            throw new BusinessException(ExceptionEnum.PERMISSION_BEYOND_USETIME, "已超过可关注数量");
+        }
+        return assoVipFunction;
+    }
+}

+ 62 - 0
src/main/java/com/example/xiaoshiweixinback/factorys/useFunctionFactory/CheckExportPatent.java

@@ -0,0 +1,62 @@
+package com.example.xiaoshiweixinback.factorys.useFunctionFactory;
+
+import com.alibaba.fastjson.JSON;
+import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
+import com.example.xiaoshiweixinback.domain.AssoVipFunction;
+import com.example.xiaoshiweixinback.domain.UseFunctionRecord;
+import com.example.xiaoshiweixinback.entity.sysFuctionRights.FunctionConfig;
+import com.example.xiaoshiweixinback.service.UseFunctionRecordService;
+import com.example.xiaoshiweixinback.service.VipService;
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/4/12
+ */
+@Component
+@RequiredArgsConstructor
+public class CheckExportPatent implements UseFunctionImp {
+    private final VipService vipService;
+    private final UseFunctionRecordService useFunctionRecordService;
+
+    @Override
+    public AssoVipFunction checkFunction(String functionUuid, Object o) {
+        if (o == null) {
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "请至少选择一个专利进行导出");
+        }
+        List<String> patentNos = (List<String>) o;
+        AssoVipFunction assoVipFunction = vipService.getVipFunctionMessage(functionUuid);
+        if (assoVipFunction == null) {
+            throw new BusinessException(ExceptionEnum.PERMISSION_NO_VIP);
+        }
+        FunctionConfig functionConfig = JSON.parseObject(assoVipFunction.getFunctionParameter(), FunctionConfig.class);
+        Integer canGetNum = functionConfig.getCanGetNum();
+        Integer size =functionConfig.getSize();
+        if(size<patentNos.size()){
+            if(assoVipFunction.getVipType().equals(0)){
+                throw new BusinessException(ExceptionEnum.PERMISSION_NO_VIP);
+
+            }
+            throw new BusinessException(ExceptionEnum.PERMISSION_BEYOND_USETIME, "超过最大导出数量");
+        }
+        //从操作记录中查询次数
+        List<UseFunctionRecord> useFunctionRecordList = useFunctionRecordService.queryUseFunctionRecordByTime(functionUuid, 0);
+        Integer totalExportNum = patentNos.size();
+        for (UseFunctionRecord item:useFunctionRecordList){
+            Integer exportNum = Integer.parseInt(item.getFunctionParameter());
+            totalExportNum+=exportNum;
+        }
+        if (canGetNum != -1 && canGetNum <= totalExportNum) {
+            if(assoVipFunction.getVipType().equals(0)){
+                throw new BusinessException(ExceptionEnum.PERMISSION_NO_VIP);
+            }
+            throw new BusinessException(ExceptionEnum.PERMISSION_BEYOND_USETIME, "今日可导入量已用完");
+        }
+        return assoVipFunction;
+    }
+}

+ 44 - 0
src/main/java/com/example/xiaoshiweixinback/factorys/useFunctionFactory/CheckQueryPatent.java

@@ -0,0 +1,44 @@
+package com.example.xiaoshiweixinback.factorys.useFunctionFactory;
+
+import com.alibaba.fastjson.JSON;
+import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
+import com.example.xiaoshiweixinback.domain.AssoVipFunction;
+import com.example.xiaoshiweixinback.domain.UseFunctionRecord;
+import com.example.xiaoshiweixinback.entity.sysFuctionRights.FunctionConfig;
+import com.example.xiaoshiweixinback.factorys.patentExportFactory.GetValueImp;
+import com.example.xiaoshiweixinback.service.UseFunctionRecordService;
+import com.example.xiaoshiweixinback.service.VipService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/4/12
+ */
+@Component
+@RequiredArgsConstructor
+public class CheckQueryPatent implements UseFunctionImp {
+    private  final VipService vipService;
+    private final UseFunctionRecordService useFunctionRecordService;
+    @Override
+    public AssoVipFunction checkFunction(String functionUuid,Object o) {
+        AssoVipFunction assoVipFunction=vipService.getVipFunctionMessage(functionUuid);
+        if(assoVipFunction ==null){
+            throw new BusinessException(ExceptionEnum.PERMISSION_NO_VIP);
+        }
+        FunctionConfig functionConfig = JSON.parseObject(assoVipFunction.getFunctionParameter(), FunctionConfig.class);
+       Integer canGetNum =functionConfig.getCanGetNum();
+       //从操作记录中查询次数
+      List<UseFunctionRecord> useFunctionRecordList =useFunctionRecordService.queryUseFunctionRecordByTime(functionUuid,0);
+        if(canGetNum!=-1&&canGetNum<=useFunctionRecordList.size()){
+            if (assoVipFunction.getVipType().equals(0)) {
+                throw new BusinessException(ExceptionEnum.PERMISSION_NO_VIP);
+            }
+            throw new BusinessException(ExceptionEnum.PERMISSION_BEYOND_USETIME,"功能次数已用完");
+        }
+        return  assoVipFunction;
+    }
+}

+ 23 - 0
src/main/java/com/example/xiaoshiweixinback/factorys/useFunctionFactory/UseFunctionFactory.java

@@ -0,0 +1,23 @@
+package com.example.xiaoshiweixinback.factorys.useFunctionFactory;
+
+import com.example.xiaoshiweixinback.factorys.patentExportFactory.GetValueImp;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/4/12
+ */
+@Component
+public class UseFunctionFactory {
+    @Autowired
+    private Map<String, UseFunctionImp> useFunctionImpMap;
+
+
+    public UseFunctionImp getClass(String functionClass) {
+        UseFunctionImp bean1 = useFunctionImpMap.get(functionClass);
+        return bean1;
+    }
+}

+ 11 - 0
src/main/java/com/example/xiaoshiweixinback/factorys/useFunctionFactory/UseFunctionImp.java

@@ -0,0 +1,11 @@
+package com.example.xiaoshiweixinback.factorys.useFunctionFactory;
+
+import com.example.xiaoshiweixinback.domain.AssoVipFunction;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/4/12
+ */
+public interface UseFunctionImp {
+    public AssoVipFunction checkFunction(String functionUuid,Object o);
+}

+ 20 - 0
src/main/java/com/example/xiaoshiweixinback/mapper/ActivityMapper.java

@@ -0,0 +1,20 @@
+package com.example.xiaoshiweixinback.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.example.xiaoshiweixinback.domain.Activity;
+
+import java.util.List;
+
+/**
+* @author admin
+* @description 针对表【activity(折扣策略)】的数据库操作Mapper
+* @createDate 2024-07-03 16:06:58
+* @Entity com/example/xiaoshiweixinback.domain.Activity
+*/
+public interface ActivityMapper extends BaseMapper<Activity> {
+  public List<Activity> queryScopeActivity(Integer scope);
+}
+
+
+
+

+ 18 - 0
src/main/java/com/example/xiaoshiweixinback/mapper/AssoActivityVoucherMapper.java

@@ -0,0 +1,18 @@
+package com.example.xiaoshiweixinback.mapper;
+
+import com.example.xiaoshiweixinback.domain.AssoActivityVoucher;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author admin
+* @description 针对表【asso_activity_voucher(活动和优惠券关联表)】的数据库操作Mapper
+* @createDate 2024-07-03 16:21:37
+* @Entity com/example/xiaoshiweixinback.domain.AssoActivityVoucher
+*/
+public interface AssoActivityVoucherMapper extends BaseMapper<AssoActivityVoucher> {
+
+}
+
+
+
+

+ 18 - 0
src/main/java/com/example/xiaoshiweixinback/mapper/AssoFeedbackFileMapper.java

@@ -0,0 +1,18 @@
+package com.example.xiaoshiweixinback.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.example.xiaoshiweixinback.domain.AssoFeedbackFile;
+
+/**
+* @author admin
+* @description 针对表【asso_feedback_file(用户反馈截图)】的数据库操作Mapper
+* @createDate 2024-06-27 14:49:07
+* @Entity com/example/xiaoshiweixinback.domain.AssoFeedbackFile
+*/
+public interface AssoFeedbackFileMapper extends EasyBaseMapper<AssoFeedbackFile> {
+
+}
+
+
+
+

+ 19 - 0
src/main/java/com/example/xiaoshiweixinback/mapper/AssoPayOrderGoodMapper.java

@@ -0,0 +1,19 @@
+package com.example.xiaoshiweixinback.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.example.xiaoshiweixinback.domain.AssoPayOrderGood;
+import com.example.xiaoshiweixinback.mapper.EasyBaseMapper;
+
+/**
+* @author admin
+* @description 针对表【asso_pay_order_good(支付订单和产品关联表)】的数据库操作Mapper
+* @createDate 2024-06-28 14:57:18
+* @Entity com/example/xiaoshiweixinback.domain.AssoPayOrderGood
+*/
+public interface AssoPayOrderGoodMapper extends EasyBaseMapper<AssoPayOrderGood> {
+
+}
+
+
+
+

+ 19 - 0
src/main/java/com/example/xiaoshiweixinback/mapper/AssoPayOrderVoucherMapper.java

@@ -0,0 +1,19 @@
+package com.example.xiaoshiweixinback.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.example.xiaoshiweixinback.domain.AssoPayOrderVoucher;
+import com.example.xiaoshiweixinback.mapper.EasyBaseMapper;
+
+/**
+* @author admin
+* @description 针对表【asso_pay_order_voucher(订单和优惠券关联表)】的数据库操作Mapper
+* @createDate 2024-06-28 15:03:25
+* @Entity com/example/xiaoshiweixinback.domain.AssoPayOrderVoucher
+*/
+public interface AssoPayOrderVoucherMapper extends EasyBaseMapper<AssoPayOrderVoucher> {
+
+}
+
+
+
+

+ 33 - 0
src/main/java/com/example/xiaoshiweixinback/mapper/AssoPersonVoucherMapper.java

@@ -0,0 +1,33 @@
+package com.example.xiaoshiweixinback.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.example.xiaoshiweixinback.domain.AssoPersonVoucher;
+import com.example.xiaoshiweixinback.domain.Voucher;
+import com.example.xiaoshiweixinback.entity.assoPersonVoucher.PersonVoucherQueryDTO;
+import com.example.xiaoshiweixinback.entity.vouchar.VoucherQueryDTO;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+* @author admin
+* @description 针对表【asso_person_voucher(人员优惠券关联表)】的数据库操作Mapper
+* @createDate 2024-06-26 11:35:27
+* @Entity com/example/xiaoshiweixinback.domain.AssoPersonVoucher
+*/
+@Repository
+
+public interface AssoPersonVoucherMapper extends EasyBaseMapper<AssoPersonVoucher> {
+
+    public List<AssoPersonVoucher> queryPersonVoucher(@Param("personVoucherQueryDTO") PersonVoucherQueryDTO personVoucherQueryDTO);
+
+
+    public Long queryPersonVoucherTotal(@Param("personVoucherQueryDTO") PersonVoucherQueryDTO personVoucherQueryDTO);
+}
+
+
+
+

+ 3 - 0
src/main/java/com/example/xiaoshiweixinback/mapper/AssoVipFunctionMapper.java

@@ -2,7 +2,9 @@ package com.example.xiaoshiweixinback.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.example.xiaoshiweixinback.domain.AssoVipFunction;
+import com.example.xiaoshiweixinback.entity.vip.PersonFunctionVO;
 import com.example.xiaoshiweixinback.entity.weixinPay.VipRightsVO;
+import io.swagger.v3.oas.models.security.SecurityScheme;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -16,6 +18,7 @@ import java.util.List;
 @Repository
 public interface AssoVipFunctionMapper extends BaseMapper<AssoVipFunction> {
     public List<VipRightsVO> getAll();
+    public List<PersonFunctionVO> getVipFunction(Integer vipType);
 }
 
 

+ 19 - 0
src/main/java/com/example/xiaoshiweixinback/mapper/AssoVipVoucherMapper.java

@@ -0,0 +1,19 @@
+package com.example.xiaoshiweixinback.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.example.xiaoshiweixinback.domain.AssoVipVoucher;
+
+/**
+* @author admin
+* @description 针对表【asso_vip_voucher(vip和优惠券关联表)】的数据库操作Mapper
+* @createDate 2024-07-01 13:46:05
+* @Entity com/example/xiaoshiweixinback.domain.AssoVipVoucher
+*/
+public interface AssoVipVoucherMapper extends BaseMapper<AssoVipVoucher> {
+
+}
+
+
+
+

+ 13 - 0
src/main/java/com/example/xiaoshiweixinback/mapper/EasyBaseMapper.java

@@ -0,0 +1,13 @@
+package com.example.xiaoshiweixinback.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import java.util.List;
+
+public interface EasyBaseMapper<T> extends BaseMapper<T> {
+    /**
+     * 批量插入 仅适用于MysqL
+     * @param entityList 实体列表
+     * @return 影响行数
+     */
+    Integer insertBatchSomeColumn(List<T> entityList);
+}

+ 24 - 0
src/main/java/com/example/xiaoshiweixinback/mapper/InviteMessageMapper.java

@@ -0,0 +1,24 @@
+package com.example.xiaoshiweixinback.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.example.xiaoshiweixinback.domain.InviteMessage;
+import com.example.xiaoshiweixinback.entity.invite.InvitedPersonQueryDTO;
+import com.example.xiaoshiweixinback.entity.invite.InvitedPersonVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+* @author admin
+* @description 针对表【invite_message(邀请信息表)】的数据库操作Mapper
+* @createDate 2024-07-02 21:25:55
+* @Entity com/example/xiaoshiweixinback.domain.InviteMessage
+*/
+public interface InviteMessageMapper extends BaseMapper<InviteMessage> {
+   public List<InvitedPersonVO> queryInvitedPerson(@Param("invitedPersonQueryDTO")InvitedPersonQueryDTO invitedPersonQueryDTO);
+    public Long queryInvitedPersonTotal(@Param("invitedPersonQueryDTO")InvitedPersonQueryDTO invitedPersonQueryDTO);
+}
+
+
+
+

+ 8 - 1
src/main/java/com/example/xiaoshiweixinback/mapper/PersonMapper.java

@@ -2,8 +2,14 @@ package com.example.xiaoshiweixinback.mapper;
 
 import com.example.xiaoshiweixinback.domain.Person;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.example.xiaoshiweixinback.entity.dto.GetProductDTO;
+import com.example.xiaoshiweixinback.entity.person.PersonQueryDTO;
+import com.example.xiaoshiweixinback.entity.person.PersonQueryVO;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
 * @author admin
 * @description 针对表【person(人员表)】的数据库操作Mapper
@@ -12,7 +18,8 @@ import org.springframework.stereotype.Repository;
 */
 @Repository
 public interface PersonMapper extends BaseMapper<Person> {
-
+    public List<PersonQueryVO> queryPerson(@Param("personQueryDTO") PersonQueryDTO personQueryDTO);
+    public Long queryPersonTotal(@Param("personQueryDTO") PersonQueryDTO personQueryDTO);
 }
 
 

+ 21 - 0
src/main/java/com/example/xiaoshiweixinback/mapper/UseFunctionRecordMapper.java

@@ -0,0 +1,21 @@
+package com.example.xiaoshiweixinback.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.example.xiaoshiweixinback.domain.UseFunctionRecord;
+
+import java.util.List;
+
+/**
+* @author admin
+* @description 针对表【use_function_record(使用功能记录)】的数据库操作Mapper
+* @createDate 2024-07-02 11:26:00
+* @Entity com/example/xiaoshiweixinback.domain.UseFunctionRecord
+*/
+public interface UseFunctionRecordMapper extends BaseMapper<UseFunctionRecord> {
+
+    public List<UseFunctionRecord> getPersonRecordByTime(String personUuid,String functionId,Integer timeType);
+}
+
+
+
+

+ 19 - 0
src/main/java/com/example/xiaoshiweixinback/mapper/UserFeedbackMapper.java

@@ -0,0 +1,19 @@
+package com.example.xiaoshiweixinback.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.example.xiaoshiweixinback.domain.UserFeedback;
+import com.example.xiaoshiweixinback.mapper.EasyBaseMapper;
+
+/**
+* @author admin
+* @description 针对表【user_feedback】的数据库操作Mapper
+* @createDate 2024-06-27 14:01:11
+* @Entity com/example/xiaoshiweixinback.domain.UserFeedback
+*/
+public interface UserFeedbackMapper extends EasyBaseMapper<UserFeedback> {
+
+}
+
+
+
+

+ 28 - 0
src/main/java/com/example/xiaoshiweixinback/mapper/VoucherMapper.java

@@ -0,0 +1,28 @@
+package com.example.xiaoshiweixinback.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.example.xiaoshiweixinback.domain.Voucher;
+import com.example.xiaoshiweixinback.entity.vouchar.VoucherQueryDTO;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+* @author admin
+* @description 针对表【voucher( 优惠券)】的数据库操作Mapper
+* @createDate 2024-06-18 23:06:58
+* @Entity com/example/xiaoshiweixinback.domain.Voucher
+*/
+@Repository
+public interface VoucherMapper extends BaseMapper<Voucher> {
+
+    public List<Voucher> queryVoucher(@Param("voucherQueryDTO") VoucherQueryDTO voucherQueryDTO);
+
+
+    public Long queryVoucherTotal(@Param("voucherQueryDTO") VoucherQueryDTO voucherQueryDTO);
+}
+
+
+
+

+ 80 - 0
src/main/java/com/example/xiaoshiweixinback/service/ActivityService.java

@@ -0,0 +1,80 @@
+package com.example.xiaoshiweixinback.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.example.xiaoshiweixinback.domain.Activity;
+import com.example.xiaoshiweixinback.domain.AssoActivityVoucher;
+import com.example.xiaoshiweixinback.domain.AssoPersonVoucher;
+import com.example.xiaoshiweixinback.domain.AssoVipVoucher;
+import com.example.xiaoshiweixinback.entity.assoPersonVoucher.SendVoucherToPersonVO;
+import com.example.xiaoshiweixinback.mapper.ActivityMapper;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author admin
+ * @description 针对表【activity(折扣策略)】的数据库操作Service实现
+ * @createDate 2024-07-03 16:06:58
+ */
+@Service
+@RequiredArgsConstructor
+public class ActivityService extends ServiceImpl<ActivityMapper, Activity> {
+    @Autowired
+    private AssoActivityVoucherService assoActivityVoucherService;
+    @Autowired
+    private AssoPersonVoucherService assoPersonVoucherService;
+    //根据使用场景id查询活动
+    public List<Activity> getActivities(Integer useScope) {
+        List<Activity> activities = this.getBaseMapper().queryScopeActivity(useScope);
+        if(activities.size()==0){
+            return null;
+        }
+        Activity activity =activities.get(0);
+        return activities;
+    }
+
+
+    public void sendVoucherToPerson(String personUuid, Integer activityId) {
+   List<AssoActivityVoucher> assoActivityVouchers =  assoActivityVoucherService.getAssoActivityVoucher(activityId);
+ if(assoActivityVouchers.size()==0){
+     return;
+ }
+SendVoucherToPersonVO sendVoucherToPersonVO =this.loadSendVoucherToPersonVO(assoActivityVouchers,personUuid);
+
+        assoPersonVoucherService.sendVoucherToPerson(sendVoucherToPersonVO);
+    }
+
+    private SendVoucherToPersonVO loadSendVoucherToPersonVO(List<AssoActivityVoucher> assoActivityVoucher, String personUuid ) {
+        SendVoucherToPersonVO sendVoucherToPersonVO =new SendVoucherToPersonVO();
+        sendVoucherToPersonVO.setGetWay(0);
+        List<String> personIds =new ArrayList<>();
+        personIds.add(personUuid);
+        sendVoucherToPersonVO.setPersonUuids(personIds);
+        List<SendVoucherToPersonVO.InAddVoucherVO> inAddVoucherVOS =new ArrayList<>();
+        assoActivityVoucher.forEach(item->{
+            SendVoucherToPersonVO.InAddVoucherVO inAddVoucherVO =new SendVoucherToPersonVO.InAddVoucherVO();
+            inAddVoucherVO.setVoucherId(item.getVoucherId());
+            inAddVoucherVO.setNumber(item.getVoucherNum());
+            inAddVoucherVOS.add(inAddVoucherVO);
+        });
+        sendVoucherToPersonVO.setInAddVoucherVOS(inAddVoucherVOS);
+        return sendVoucherToPersonVO;
+    }
+
+    public void doingActivity(String personUuid,Integer useScope){
+    List<Activity> activities =    this.getActivities(useScope);
+        if(activities==null||activities.size()==0){
+            return;
+        }
+        Activity activity =activities.get(0);
+        Integer activityId =activity.getId();
+        this.sendVoucherToPerson(personUuid,activityId);
+    }
+}
+
+
+
+

+ 33 - 0
src/main/java/com/example/xiaoshiweixinback/service/AssoActivityVoucherService.java

@@ -0,0 +1,33 @@
+package com.example.xiaoshiweixinback.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.example.xiaoshiweixinback.domain.AssoActivityVoucher;
+import com.example.xiaoshiweixinback.mapper.AssoActivityVoucherMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author admin
+ * @description 针对表【asso_activity_voucher(活动和优惠券关联表)】的数据库操作Service实现
+ * @createDate 2024-07-03 16:21:37
+ */
+@Service
+public class AssoActivityVoucherService extends ServiceImpl<AssoActivityVoucherMapper, AssoActivityVoucher> {
+
+    public List<AssoActivityVoucher> getAssoActivityVoucher(Integer activityId) {
+        List<AssoActivityVoucher> assoActivityVouchers = new ArrayList<>();
+        LambdaQueryWrapper<AssoActivityVoucher> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoActivityVoucher::getActivityId, activityId);
+        assoActivityVouchers = this.list(queryWrapper);
+        return assoActivityVouchers;
+
+    }
+}
+
+
+
+

+ 20 - 0
src/main/java/com/example/xiaoshiweixinback/service/AssoFeedbackFileService.java

@@ -0,0 +1,20 @@
+package com.example.xiaoshiweixinback.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.example.xiaoshiweixinback.domain.AssoFeedbackFile;
+import com.example.xiaoshiweixinback.mapper.AssoFeedbackFileMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author admin
+* @description 针对表【asso_feedback_file(用户反馈截图)】的数据库操作Service实现
+* @createDate 2024-06-27 14:49:07
+*/
+@Service
+public class AssoFeedbackFileService extends ServiceImpl<AssoFeedbackFileMapper, AssoFeedbackFile>{
+
+}
+
+
+
+

+ 3 - 2
src/main/java/com/example/xiaoshiweixinback/service/AssoPersonFunctionService.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.example.xiaoshiweixinback.business.common.base.RedisConf;
 import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
 import com.example.xiaoshiweixinback.business.redis.RedisService;
 import com.example.xiaoshiweixinback.business.utils.*;
 import com.example.xiaoshiweixinback.domain.AssoPersonFunction;
@@ -84,10 +85,10 @@ public class AssoPersonFunctionService extends ServiceImpl<AssoPersonFunctionMap
             functionConfig = JSON.parseObject(String.valueOf(o), FunctionConfig.class);
         }
         if (functionConfig == null) {
-            throw new BusinessException("402", "无权限");
+            throw new BusinessException(ExceptionEnum.PERMISSION_ERROR, "无权限");
         } else {
             if (functionConfig.getCanGetNum() == 0) {
-                throw new BusinessException("402", "超过可使用次数");
+                throw new BusinessException(ExceptionEnum.PERMISSION_BEYOND_USETIME, "超过可使用次数");
             }
         }
         return functionConfig;

+ 18 - 19
src/main/java/com/example/xiaoshiweixinback/service/AssoPersonProductService.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
 import com.example.xiaoshiweixinback.business.exception.XiaoShiException;
 import com.example.xiaoshiweixinback.business.utils.CacheUtil;
 import com.example.xiaoshiweixinback.business.utils.LoginUtils;
@@ -11,10 +12,13 @@ import com.example.xiaoshiweixinback.business.utils.ToolUtil;
 import com.example.xiaoshiweixinback.domain.AssoPersonFunction;
 import com.example.xiaoshiweixinback.domain.AssoPersonProduct;
 
+import com.example.xiaoshiweixinback.domain.AssoVipFunction;
 import com.example.xiaoshiweixinback.entity.dto.AssoPersonProductDTO;
 import com.example.xiaoshiweixinback.entity.sysFuctionRights.FunctionConfig;
 import com.example.xiaoshiweixinback.entity.vo.PersonnelVO;
+import com.example.xiaoshiweixinback.factorys.useFunctionFactory.UseFunctionFactory;
 import com.example.xiaoshiweixinback.mapper.AssoPersonProductMapper;
+import com.example.xiaoshiweixinback.useFunctionRecordAop.useFunctionRecord;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,6 +43,11 @@ public class AssoPersonProductService extends ServiceImpl<AssoPersonProductMappe
     @Lazy
     @Autowired
     private  MonitorService monitorService;
+    @Autowired
+    private UseFunctionRecordService useFunctionRecordService;
+
+    private static String FACTORY_CLASS = "checkConcernPatent";
+    private static String FUNCTION_UUID = "6";
     public Integer add(AssoPersonProductDTO assoPersonProductDTO) {
         Integer productId =assoPersonProductDTO.getProductId();
         PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
@@ -84,13 +93,10 @@ public class AssoPersonProductService extends ServiceImpl<AssoPersonProductMappe
     public AssoPersonProduct checkAdmin(Integer productId) {
        AssoPersonProduct assoPersonProduct =null;
         PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
-        AssoPersonFunction assoPersonFunction = vipService.getAssoPersonFunction("6");
-        if (assoPersonFunction == null) {
-            throw new BusinessException("606", "无权限");
-        }
-        Integer totalNum = 5;
-        FunctionConfig functionConfig = JSON.parseObject(assoPersonFunction.getFunctionParameter(), FunctionConfig.class);
-        totalNum = functionConfig.getCanGetNum();
+        AssoVipFunction assoVipFunction = vipService.getVipFunctionMessage(FUNCTION_UUID);
+
+        FunctionConfig functionConfig = JSON.parseObject(assoVipFunction.getFunctionParameter(), FunctionConfig.class);
+        Integer totalNum = functionConfig.getCanGetNum();
         LambdaQueryWrapper<AssoPersonProduct> queryWrapper1 =new LambdaQueryWrapper<>();
         queryWrapper1.eq(AssoPersonProduct::getProductId,productId)
                 .eq(AssoPersonProduct::getPersonUuid,personnelVO.getUuid());
@@ -104,23 +110,16 @@ public class AssoPersonProductService extends ServiceImpl<AssoPersonProductMappe
         Long total = this.count(queryWrapper);
 
         if (total >= totalNum) {
-            throw new BusinessException("606", "已超过可关注数量");
+            if(assoVipFunction.getVipType().equals(0)){
+                throw new BusinessException(ExceptionEnum.PERMISSION_NO_VIP);
+            }
+            throw new BusinessException(ExceptionEnum.PERMISSION_BEYOND_USETIME, "已超过可关注数量");
         }
 
        return assoPersonProduct;
     }
 
-    public Integer addAsso(AssoPersonProductDTO assoPersonProductDTO) {
-        PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
-        if (ToolUtil.isNotEmpty(personnelVO)) {
-            AssoPersonProduct assoPersonProduct = new AssoPersonProduct();
-            BeanUtils.copyProperties(assoPersonProductDTO, assoPersonProduct);
-            assoPersonProduct.setPersonUuid(personnelVO.getUuid());
-            assoPersonProduct.insert();
-            return assoPersonProduct.getProductId();
-        }
-        return -1;
-    }
+
 
 
     public List<Integer> cancelConcern(List<Integer> productIds) {

+ 48 - 13
src/main/java/com/example/xiaoshiweixinback/service/AssoPersonVipService.java

@@ -7,8 +7,6 @@ import com.example.xiaoshiweixinback.business.utils.DateUtils;
 import com.example.xiaoshiweixinback.domain.AssoPersonVip;
 import com.example.xiaoshiweixinback.domain.Vip;
 import com.example.xiaoshiweixinback.mapper.AssoPersonVipMapper;
-import jakarta.servlet.http.HttpServletRequest;
-import org.joda.time.DateTime;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
@@ -21,27 +19,25 @@ import java.util.Date;
 @Service
 public class AssoPersonVipService extends ServiceImpl<AssoPersonVipMapper, AssoPersonVip> {
 
-    public AssoPersonVip getAsso(String personUuid, Vip vip) {
+    public AssoPersonVip getAsso(String personUuid,Vip vip) {
         AssoPersonVip assoPersonVip = new AssoPersonVip();
         LambdaQueryWrapper<AssoPersonVip> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(AssoPersonVip::getPersonUuid, personUuid)
-                .eq(AssoPersonVip::getVipUuid, vip.getVipUuid())
+                .eq(AssoPersonVip::getVipType, vip.getVipType())
                 .orderByDesc(AssoPersonVip::getExpiryTime);
         assoPersonVip = this.getOne(queryWrapper, false);
-
-        Date date = new Date();
         if (assoPersonVip != null) {
-            if(assoPersonVip.getExpiryTime().compareTo(date)>0){
-               date=assoPersonVip.getExpiryTime();
-            }
-
+          this.updateAssoPersonVip(assoPersonVip,personUuid,vip);
         }
-        assoPersonVip = this.addAssoPersonVip(personUuid, vip,date);
+        else {
+        assoPersonVip = this.addAssoPersonVip(personUuid, vip);}
         return assoPersonVip;
     }
 
-    public AssoPersonVip addAssoPersonVip(String personUuid, Vip vip,Date createDate) {
-        Date date = createDate;
+
+    public AssoPersonVip addAssoPersonVip(String personUuid, Vip vip) {
+        //判断是否被邀请过
+        Date date = new Date();
         AssoPersonVip assoPersonVip = new AssoPersonVip();
         assoPersonVip.setCreateTime(date);
         Integer lastTime = vip.getLastTime();
@@ -49,9 +45,48 @@ public class AssoPersonVipService extends ServiceImpl<AssoPersonVipMapper, AssoP
         assoPersonVip.setExpiryTime(expiryDate);
         assoPersonVip.setVipUuid(vip.getVipUuid());
         assoPersonVip.setPersonUuid(personUuid);
+        assoPersonVip.setVipType(vip.getVipType());
+        assoPersonVip.insert();
+        return assoPersonVip;
+    }
+
+    public AssoPersonVip updateAssoPersonVip(AssoPersonVip assoPersonVip, String personUuid, Vip vip) {
+        Date date = new Date();
+        Date orgExpiry = assoPersonVip.getExpiryTime();
+        Integer lastTime = vip.getLastTime();
+        Date expiryDate = null;
+        if (orgExpiry.compareTo(date) > 0) {
+            expiryDate = DateUtils.getPlusMonthDate(orgExpiry, lastTime);
+        } else {
+            expiryDate = DateUtils.getPlusMonthDate(date, lastTime);
+        }
+        assoPersonVip.setExpiryTime(expiryDate);
+        assoPersonVip.setVipUuid(vip.getVipUuid());
+        assoPersonVip.setVipType(vip.getVipType());
+        assoPersonVip.setPersonUuid(personUuid);
+        assoPersonVip.updateById();
+        return assoPersonVip;
+    }
+
+    /**
+     *
+     * @param personUuid
+     * @param dateType 0天 1月 2年
+     * @param lastTime
+     * @return
+     */
+    public AssoPersonVip addAssoPersonVipByTime(String personUuid,Integer dateType,Integer lastTime) {
+        Date date = new Date();
+        AssoPersonVip assoPersonVip = new AssoPersonVip();
+        assoPersonVip.setCreateTime(date);
+        Date expiryDate = DateUtils.getPlusDayDate(date, lastTime);
+        assoPersonVip.setExpiryTime(expiryDate);
+        assoPersonVip.setPersonUuid(personUuid);
+        assoPersonVip.setVipType(1);
         assoPersonVip.insert();
         return assoPersonVip;
     }
+
 }
 
 

+ 199 - 0
src/main/java/com/example/xiaoshiweixinback/service/AssoPersonVoucherService.java

@@ -0,0 +1,199 @@
+package com.example.xiaoshiweixinback.service;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.example.xiaoshiweixinback.business.common.base.Records;
+import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
+import com.example.xiaoshiweixinback.business.exception.XiaoShiException;
+import com.example.xiaoshiweixinback.business.utils.CacheUtil;
+import com.example.xiaoshiweixinback.business.utils.FormatUtil;
+import com.example.xiaoshiweixinback.business.utils.LoginUtils;
+import com.example.xiaoshiweixinback.domain.AssoPersonVoucher;
+import com.example.xiaoshiweixinback.domain.Voucher;
+import com.example.xiaoshiweixinback.entity.assoPersonVoucher.PersonVoucherQueryDTO;
+import com.example.xiaoshiweixinback.entity.assoPersonVoucher.SendVoucherToPersonVO;
+import com.example.xiaoshiweixinback.entity.vo.PersonnelVO;
+import com.example.xiaoshiweixinback.entity.vouchar.VoucherQueryDTO;
+import com.example.xiaoshiweixinback.entity.vouchar.VoucherVO;
+import com.example.xiaoshiweixinback.mapper.AssoPersonVoucherMapper;
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import lombok.RequiredArgsConstructor;
+import org.quartz.ListenerManager;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author admin
+ * @description 针对表【asso_person_voucher(人员优惠券关联表)】的数据库操作Service实现
+ * @createDate 2024-06-26 11:35:27
+ */
+@Service
+@RequiredArgsConstructor
+public class AssoPersonVoucherService extends ServiceImpl<AssoPersonVoucherMapper, AssoPersonVoucher> {
+    private final VoucherService voucherService;
+    private final CacheUtil cacheUtil;
+
+    @Transactional(rollbackFor = Exception.class)
+    public void sendVoucherToPerson(SendVoucherToPersonVO sendVoucherToPersonVO) {
+        List<String> personUuids = sendVoucherToPersonVO.getPersonUuids();
+        List<SendVoucherToPersonVO.InAddVoucherVO> inAddVoucherVOS = sendVoucherToPersonVO.getInAddVoucherVOS();
+        Integer getWay =sendVoucherToPersonVO.getGetWay();
+        //校验
+        if (sendVoucherToPersonVO == null || personUuids == null || personUuids.size() == 0 || sendVoucherToPersonVO.getInAddVoucherVOS() == null) {
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "请校验参数");
+        }
+
+        List<AssoPersonVoucher> assoPersonVouchers = new ArrayList<>();
+        for (int i = 0; i < inAddVoucherVOS.size(); i++) {
+            SendVoucherToPersonVO.InAddVoucherVO inAddVoucherVO = inAddVoucherVOS.get(i);
+            Integer voucherId = inAddVoucherVO.getVoucherId();
+            Integer num = inAddVoucherVO.getNumber();
+
+            //根据voucherId查询优惠券
+            Voucher voucher = voucherService.getById(voucherId);
+            if (voucher == null) {
+                throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "优惠券不存在");
+            }
+            for (int t = 0; t < num; t++) {
+                for (String personUuid : personUuids) {
+                    AssoPersonVoucher assoPersonVoucher = this.loadAssoPersonVoucher(voucher, personUuid,getWay);
+                    assoPersonVouchers.add(assoPersonVoucher);
+                }
+            }
+
+        }
+        this.getBaseMapper().insertBatchSomeColumn(assoPersonVouchers);
+    }
+
+    private AssoPersonVoucher loadAssoPersonVoucher(Voucher voucher, String personUuid,Integer getWay) {
+        Date date = new Date();
+        AssoPersonVoucher assoPersonVoucher = new AssoPersonVoucher();
+        assoPersonVoucher.setPersonUuid(personUuid);
+        assoPersonVoucher.setVoucherName(voucher.getName());
+        assoPersonVoucher.setVoucherType(voucher.getType());
+        assoPersonVoucher.setAmount(voucher.getAmount());
+        assoPersonVoucher.setThreshold(voucher.getThreshold());
+        assoPersonVoucher.setAvailableTime(voucher.getAvailableTime());
+        assoPersonVoucher.setExpirationTime(voucher.getExpirationTime());
+        assoPersonVoucher.setUseScope(voucher.getUseScope());
+        assoPersonVoucher.setUseState(0);
+        assoPersonVoucher.setGetWay(getWay);
+        assoPersonVoucher.setCreateTime(date);
+        return assoPersonVoucher;
+
+    }
+
+
+    /**
+     * 查询个人优惠券
+     */
+    public Records queryPersonVoucher(PersonVoucherQueryDTO personVoucherQueryDTO) {
+        Long size = personVoucherQueryDTO.getSize();
+        Long current = personVoucherQueryDTO.getCurrent();
+        String personUuid = personVoucherQueryDTO.getPersonUuid();
+        if (personUuid == null) {
+            PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
+            personUuid = personnelVO.getUuid();
+            personVoucherQueryDTO.setPersonUuid(personUuid);
+        }
+        List<AssoPersonVoucher> assoPersonVouchers = this.getBaseMapper().queryPersonVoucher(personVoucherQueryDTO);
+        List<VoucherVO> voucherVOS = this.loadVoucherVOs(assoPersonVouchers);
+        Long total = this.getBaseMapper().queryPersonVoucherTotal(personVoucherQueryDTO);
+        Records records = new Records();
+        records.setSize(size);
+        records.setCurrent(current);
+        records.setData(voucherVOS);
+        records.setTotal(total);
+        return records;
+    }
+
+    public List<VoucherVO> loadVoucherVOs(List<AssoPersonVoucher> assoPersonVouchers) {
+        List<VoucherVO> voucherVOs = new ArrayList<>();
+        if (assoPersonVouchers == null || assoPersonVouchers.size() == 0) {
+            return voucherVOs;
+        }
+        assoPersonVouchers.forEach(item -> {
+            VoucherVO voucherVO = new VoucherVO();
+            BeanUtils.copyProperties(item, voucherVO);
+            voucherVO.setType(item.getVoucherType());
+            voucherVO.setName(item.getVoucherName());
+            List<Integer> useScopes = FormatUtil.StringToIntegerList(item.getUseScope(), ",");
+            voucherVO.setUseScopes(useScopes);
+            voucherVOs.add(voucherVO);
+        });
+
+        return voucherVOs;
+    }
+
+    /**
+     * 使用优惠券
+     *
+     * @param assoIds
+     * @param state   0未使用 1已使用 2冻结
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void useVoucher(List<Integer> assoIds, Integer state) {
+        if (assoIds == null || assoIds.size() == 0) {
+            return;
+        }
+        //校验
+        Integer useState = -1;
+        if (state == 1) {
+            useState = 2;
+        } else if (state == 2) {
+            useState = 0;
+        } else {
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "非法修改优惠券状态");
+        }
+        LambdaQueryWrapper<AssoPersonVoucher> assoPersonVoucherLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        assoPersonVoucherLambdaQueryWrapper.in(AssoPersonVoucher::getId, assoIds)
+                .eq(AssoPersonVoucher::getUseState, useState);
+        List<AssoPersonVoucher> assoPersonVouchers = this.list(assoPersonVoucherLambdaQueryWrapper);
+        if (assoPersonVouchers.size() < assoIds.size()) {
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "伪造的优惠券");
+        }
+
+        //更新状态
+        UpdateWrapper<AssoPersonVoucher> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(AssoPersonVoucher::getUseState, state)
+                .in(AssoPersonVoucher::getId, assoIds);
+        this.update(updateWrapper);
+
+    }
+
+    public Double verifyVouchers(List<Integer> assoVoucherIds, PersonnelVO personnelVO) {
+
+        Double price = 0d;
+        if(assoVoucherIds==null){
+            return price;
+        }
+        String personId = personnelVO.getUuid();
+        LambdaQueryWrapper<AssoPersonVoucher> assoPersonVoucherLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        assoPersonVoucherLambdaQueryWrapper.in(AssoPersonVoucher::getId, assoVoucherIds)
+                .eq(AssoPersonVoucher::getUseState, 0)
+                .eq(AssoPersonVoucher::getPersonUuid, personId);
+        List<AssoPersonVoucher> assoPersonVouchers = this.list(assoPersonVoucherLambdaQueryWrapper);
+        if (assoPersonVouchers.size() != assoVoucherIds.size()) {
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "伪造的优惠券");
+        }
+
+        for (AssoPersonVoucher voucher : assoPersonVouchers) {
+            price+=voucher.getAmount();
+        }
+
+        return price;
+    }
+
+}
+
+
+
+

+ 1 - 1
src/main/java/com/example/xiaoshiweixinback/service/AssoProductFileService.java

@@ -24,7 +24,7 @@ import java.util.stream.Collectors;
 @Service
 public class AssoProductFileService extends ServiceImpl<AssoProductFileMapper, AssoProductFile> {
 
-   @Autowired
+     @Autowired
     private CacheUtil cacheUtil;
     @Transactional
     public void addOrUpdateProductFile(Integer productId, List<String> guids) {

+ 57 - 0
src/main/java/com/example/xiaoshiweixinback/service/AssoVipVoucherService.java

@@ -0,0 +1,57 @@
+package com.example.xiaoshiweixinback.service;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.example.xiaoshiweixinback.domain.AssoVipVoucher;
+import com.example.xiaoshiweixinback.entity.assoPersonVoucher.SendVoucherToPersonVO;
+import com.example.xiaoshiweixinback.mapper.AssoVipVoucherMapper;
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author admin
+ * @description 针对表【asso_vip_voucher(vip和优惠券关联表)】的数据库操作Service实现
+ * @createDate 2024-07-01 13:46:05
+ */
+@Service
+@RequiredArgsConstructor
+public class AssoVipVoucherService extends ServiceImpl<AssoVipVoucherMapper, AssoVipVoucher> {
+
+ private final AssoPersonVoucherService assoPersonVoucherService;
+    public void addVoucher(String vipUuid,String personUuid) {
+        LambdaQueryWrapper<AssoVipVoucher> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoVipVoucher::getVipUuid, vipUuid);
+        List<AssoVipVoucher> assoVipVoucherList = new ArrayList<>();
+        assoVipVoucherList = this.list(queryWrapper);
+        SendVoucherToPersonVO sendVoucherToPersonVO =this.loadSendVoucherToPersonVO(assoVipVoucherList,personUuid);
+        assoPersonVoucherService.sendVoucherToPerson(sendVoucherToPersonVO);
+
+    }
+
+    private SendVoucherToPersonVO loadSendVoucherToPersonVO(List<AssoVipVoucher> assoVipVoucherList,String personUuid ) {
+        SendVoucherToPersonVO sendVoucherToPersonVO =new SendVoucherToPersonVO();
+        List<String> personIds =new ArrayList<>();
+        personIds.add(personUuid);
+        sendVoucherToPersonVO.setPersonUuids(personIds);
+        List<SendVoucherToPersonVO.InAddVoucherVO> inAddVoucherVOS =new ArrayList<>();
+        assoVipVoucherList.forEach(item->{
+            SendVoucherToPersonVO.InAddVoucherVO inAddVoucherVO =new SendVoucherToPersonVO.InAddVoucherVO();
+     inAddVoucherVO.setVoucherId(item.getVoucherId());
+     inAddVoucherVO.setNumber(item.getVoucherCount());
+            inAddVoucherVOS.add(inAddVoucherVO);
+        });
+        sendVoucherToPersonVO.setInAddVoucherVOS(inAddVoucherVOS);
+        return sendVoucherToPersonVO;
+    }
+}
+
+
+
+

+ 3 - 2
src/main/java/com/example/xiaoshiweixinback/service/ImportTaskService.java

@@ -2,6 +2,7 @@ package com.example.xiaoshiweixinback.service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
 import com.example.xiaoshiweixinback.business.utils.CacheUtil;
 import com.example.xiaoshiweixinback.business.utils.LoginUtils;
 import com.example.xiaoshiweixinback.business.utils.ReadExcelUtils;
@@ -36,7 +37,7 @@ public class ImportTaskService extends ServiceImpl<ImportTaskMapper, ImportTask>
         try {
              total = ReadExcelUtils.getExcelTotal(sheet);
         }catch (Exception e ){
-            throw new BusinessException("607","获取文件错误");
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR,"获取文件错误");
         }
 
         String name = names[0] + "导入任务";
@@ -45,7 +46,7 @@ public class ImportTaskService extends ServiceImpl<ImportTaskMapper, ImportTask>
             List<String> ids =   fileManagerService.uploadFileGetGuid2(Arrays.asList(file));
      importTask.setFileGuid(ids.get(0));
         } catch (Exception e) {
-            throw  new BusinessException("607","上传文件错误");
+            throw  new BusinessException(ExceptionEnum.BUSINESS_ERROR,"上传文件错误");
         }
         importTask.setTaskName(name);
         importTask.setImportType(type);

+ 108 - 0
src/main/java/com/example/xiaoshiweixinback/service/InviteMessageService.java

@@ -0,0 +1,108 @@
+package com.example.xiaoshiweixinback.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.example.xiaoshiweixinback.business.common.base.Records;
+import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
+import com.example.xiaoshiweixinback.business.utils.CacheUtil;
+import com.example.xiaoshiweixinback.business.utils.LoginUtils;
+import com.example.xiaoshiweixinback.domain.InviteMessage;
+import com.example.xiaoshiweixinback.domain.Person;
+import com.example.xiaoshiweixinback.entity.invite.InvitedPersonQueryDTO;
+import com.example.xiaoshiweixinback.entity.invite.InvitedPersonVO;
+import com.example.xiaoshiweixinback.entity.person.PersonQueryVO;
+import com.example.xiaoshiweixinback.entity.person.PersonVO;
+import com.example.xiaoshiweixinback.entity.vo.PersonnelVO;
+import com.example.xiaoshiweixinback.mapper.InviteMessageMapper;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author admin
+ * @description 针对表【invite_message(邀请信息表)】的数据库操作Service实现
+ * @createDate 2024-07-02 21:25:55
+ */
+@Service
+@RequiredArgsConstructor
+public class InviteMessageService extends ServiceImpl<InviteMessageMapper, InviteMessage> {
+    private final PersonService personService;
+    public  final CacheUtil cacheUtil;
+    private final  AssoPersonVipService assoPersonVipService;
+    private final ActivityService activityService;
+    private final Integer ACTIVITY_SCOPE=-2;
+    public void checkInvite(String inviteNode) {
+        if(inviteNode==null){
+            return;
+        }
+        LambdaQueryWrapper<Person> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Person::getUuid, inviteNode);
+        Person person = personService.getOne(queryWrapper, false);
+        if (person == null) {
+            throw new BusinessException(ExceptionEnum.LOGIN_INVITE_ERROR, "邀请码错误");
+        }
+
+    }
+
+
+    public void addInviteMessage(String inviteNode, String personUuid) {
+        if(inviteNode==null){
+            return;
+        }
+        InviteMessage inviteMessage = new InviteMessage();
+        inviteMessage.setInvitePersonUuid(inviteNode);
+        inviteMessage.setIfBuyVip(false);
+        inviteMessage.setInvitedPersonUuid(personUuid);
+        inviteMessage.insert();
+        assoPersonVipService.addAssoPersonVipByTime(personUuid,0,3);
+    }
+
+    public Integer getInviteGiveVoucher(String personUuid) {
+        //查询人员是否被邀请
+        LambdaQueryWrapper<InviteMessage> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(InviteMessage::getInvitedPersonUuid, personUuid)
+                .eq(InviteMessage::getIfBuyVip, false);
+        InviteMessage inviteMessage = this.getOne(queryWrapper, false);
+
+        if (inviteMessage == null) {
+            return 0;
+        } else {
+            String inviteId = inviteMessage.getInvitePersonUuid();
+            LambdaQueryWrapper<InviteMessage> queryWrapper1 = new LambdaQueryWrapper<>();
+            queryWrapper1.eq(InviteMessage::getInvitePersonUuid, inviteId)
+                    .eq(InviteMessage::getIfBuyVip, true);
+            Long count = this.count(queryWrapper1);
+            if (count >= 5) {
+                return 0;
+            } else {
+                //TODO 给邀请人赠送优惠券
+                activityService.doingActivity(inviteMessage.getInvitePersonUuid() ,ACTIVITY_SCOPE);
+                inviteMessage.setIfBuyVip(true);
+                inviteMessage.updateById();
+                return 3;
+            }
+        }
+    }
+
+
+    public Records queryInvitedPerson(InvitedPersonQueryDTO invitedPersonQueryDTO) {
+        Long current = invitedPersonQueryDTO.getCurrent();
+        Long size = invitedPersonQueryDTO.getSize();
+       PersonnelVO personVO =cacheUtil.getLoginUser(LoginUtils.getToken());
+         invitedPersonQueryDTO.setPersonUuid(personVO.getUuid());
+        List<InvitedPersonVO> invitedPersonVOS = this.getBaseMapper().queryInvitedPerson(invitedPersonQueryDTO);
+        Long total = this.getBaseMapper().queryInvitedPersonTotal(invitedPersonQueryDTO);
+        Records records = new Records();
+        records.setData(invitedPersonVOS);
+        records.setTotal(total);
+        records.setSize(size);
+        records.setCurrent(current);
+        return records;
+    }
+}
+
+
+
+

+ 17 - 5
src/main/java/com/example/xiaoshiweixinback/service/LoginService.java

@@ -81,7 +81,10 @@ public class LoginService {
     private AssoPersonVipMapper assoPersonVipMapper;
     @Autowired
     private PersonService personService;
-
+    @Autowired
+    private InviteMessageService inviteMessageService;
+    @Autowired
+    private AssoPersonVipService assoPersonVipService;
     /**
      * 手机号/账号登录
      *
@@ -90,6 +93,7 @@ public class LoginService {
      */
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
     public LoginVO loginByPhone(LoginDTO dto) throws Exception {
+       String inviteCode =dto.getInviteCode();
         //获取缓存中验证码
         Object codeObj = redisService.get(AppCacheKeyUtil.getLoginMessageCode(dto.getPhoneNum()));
         if (ToolUtil.isEmpty(codeObj)) {
@@ -114,12 +118,14 @@ public class LoginService {
         Person person = personMapper.selectOne(queryWrapper);
         LoginVO loginVO = new LoginVO();
         if (ToolUtil.isEmpty(person)) {
+            inviteMessageService.checkInvite(inviteCode);
             person = new Person();
             person.setPhoneNum(dto.getPhoneNum());
             String uid = IdUtil.simpleUUID();
             person.setUuid(uid);
 
             personMapper.insert(person);
+            inviteMessageService.addInviteMessage(inviteCode, person.getUuid());
 
             loginVO.setId(person.getId());
             loginVO.setPhone(person.getPhoneNum());
@@ -146,10 +152,13 @@ public class LoginService {
      * @date: 2024/04/01
      * @return: LoginByWxVO
      */
+    @Transactional(rollbackFor = Exception.class)
     public LoginByWxVO loginByWeChat(LoginByWxDTO wxDTO) throws Exception {
+
         String code = wxDTO.getCode();
         String encryptedData = wxDTO.getEncryptedData();
         String iv = wxDTO.getIv();
+        String inviteCode = wxDTO.getInviteCode();
 
         //返回数据
         LoginByWxVO wxVO = new LoginByWxVO();
@@ -180,6 +189,7 @@ public class LoginService {
                     person.setOpenId(jscode2SessionWo.getOpenid());
                     person.updateById();
                 } else {
+                    inviteMessageService.checkInvite(inviteCode);
                     person = new Person();
                     person.setPhoneNum(phoneNumber);
                     person.setOpenId(jscode2SessionWo.getOpenid());
@@ -188,9 +198,11 @@ public class LoginService {
                     person.insert();
                     wxVO.setId(person.getId());
                     wxVO.setIfFirst(true);
+                    inviteMessageService.addInviteMessage(inviteCode, person.getUuid());
                 }
                 wxVO.setPhoneNum(phoneNumber);
             }
+
             wxVO.setToken(jwtTokenUtil.createToken());
             wxVO.setOpenId(jscode2SessionWo.getOpenid());
 //            redisService.set(AppCacheKeyUtil.getUserIdToken(wxVO.getId()), AppCacheKeyUtil.getTokenUserInfo(wxVO.getToken()));
@@ -428,13 +440,13 @@ public class LoginService {
                 .or().eq(Person::getEmail, account);
         Person person = personService.getOne(queryWrapper, false);
         if (person == null) {
-            throw new BusinessException("606", "账号错误");
+            throw new BusinessException(ExceptionEnum.LOGIN_ACCOUNT_MISTAKE, "账号错误");
         }
         if (person.getUserPassword() == null) {
-            throw new BusinessException("606", "非账号登录用户");
+            throw new BusinessException(ExceptionEnum.LOGIN_PASWORD_MISTAKE, "非账号登录用户");
         }
         if (!person.getUserPassword().equals(password)) {
-            throw new BusinessException("606", "密码错误");
+            throw new BusinessException(ExceptionEnum.LOGIN_PASWORD_MISTAKE, "密码错误");
         }
 
         //将用户信息数据存入Redis
@@ -445,7 +457,7 @@ public class LoginService {
             token = jwtTokenUtil.createToken();
 
         } catch (Exception e) {
-            throw new BusinessException("606", "生成token错误");
+            throw new BusinessException(ExceptionEnum.LOGIN_ERROR, "生成token错误");
         }
         BeanUtil.copy(person, loginVO);
         loginVO.setToken(token);

+ 44 - 6
src/main/java/com/example/xiaoshiweixinback/service/MonitorService.java

@@ -1,11 +1,15 @@
 package com.example.xiaoshiweixinback.service;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.example.xiaoshiweixinback.business.common.base.Records;
 import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
 import com.example.xiaoshiweixinback.business.utils.CacheUtil;
 import com.example.xiaoshiweixinback.business.utils.LoginUtils;
+import com.example.xiaoshiweixinback.domain.AssoPersonProduct;
+import com.example.xiaoshiweixinback.domain.AssoVipFunction;
 import com.example.xiaoshiweixinback.domain.Monitor;
 
 import com.example.xiaoshiweixinback.domain.Product;
@@ -15,6 +19,7 @@ import com.example.xiaoshiweixinback.entity.dto.monitoring.AddMonitoringDTO;
 import com.example.xiaoshiweixinback.entity.dto.monitoring.CancelMonitoringDTO;
 import com.example.xiaoshiweixinback.entity.dto.monitoring.SelectMonitoringDTO;
 import com.example.xiaoshiweixinback.entity.product.ProductAddDTO;
+import com.example.xiaoshiweixinback.entity.sysFuctionRights.FunctionConfig;
 import com.example.xiaoshiweixinback.entity.vo.PersonnelVO;
 import com.example.xiaoshiweixinback.entity.vo.ProductVO;
 import com.example.xiaoshiweixinback.mapper.MonitorMapper;
@@ -41,15 +46,18 @@ import java.util.stream.Collectors;
 public class MonitorService extends ServiceImpl<MonitorMapper, Monitor> {
     @Lazy
     @Autowired
-    private  AssoPersonProductService assoPersonProductService;
+    private AssoPersonProductService assoPersonProductService;
     @Lazy
     @Autowired
     private ProductService productService;
     @Autowired
-    private  CacheUtil cacheUtil;
+    private CacheUtil cacheUtil;
     @Autowired
-    private  ProductMapper productMapper;
+    private ProductMapper productMapper;
 
+    @Autowired
+    private VipService vipService;
+    private static String FUNCTION_UUID = "7";
     /**
      * 添加监控
      *
@@ -62,7 +70,7 @@ public class MonitorService extends ServiceImpl<MonitorMapper, Monitor> {
         Integer productId = addMonitoringDTO.getProductId();
         String monitorPeriod = addMonitoringDTO.getMonitorPeriod();
         Integer concernType = addMonitoringDTO.getConcernType();
-
+         Monitor orgMonitor =this.checkAdmin(productId);
         //关注产品
         if (productId != null) {
             AssoPersonProductDTO assoPersonProductDTO = new AssoPersonProductDTO();
@@ -89,7 +97,6 @@ public class MonitorService extends ServiceImpl<MonitorMapper, Monitor> {
         monitor.setMonitorPeriod(monitorPeriod);
         monitor.setProductId(productId);
         monitor.insert();
-        //TODO 添加定时任务
 
         return productId;
     }
@@ -151,7 +158,7 @@ public class MonitorService extends ServiceImpl<MonitorMapper, Monitor> {
             productService.loadProduct(productVOS, false);
 
         } catch (Exception e) {
-            throw new BusinessException("607", "装载错误");
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "装载错误");
         }
         Records records = new Records();
         records.setTotal(total);
@@ -177,6 +184,37 @@ public class MonitorService extends ServiceImpl<MonitorMapper, Monitor> {
         }
         return products;
     }
+
+
+    public Monitor checkAdmin(Integer productId) {
+        AssoPersonProduct assoPersonProduct = null;
+        PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
+        AssoVipFunction assoVipFunction = vipService.getVipFunctionMessage(FUNCTION_UUID);
+
+        FunctionConfig functionConfig = JSON.parseObject(assoVipFunction.getFunctionParameter(), FunctionConfig.class);
+        Integer totalNum = functionConfig.getCanGetNum();
+        LambdaQueryWrapper<Monitor> queryWrapper1 = new LambdaQueryWrapper<>();
+        queryWrapper1.eq(Monitor::getProductId, productId)
+                .eq(Monitor::getCreateId, personnelVO.getUuid());
+        Monitor org = this.getOne(queryWrapper1, false);
+        if (org != null) {
+            return org;
+        }
+        //查看关注的数量
+        LambdaQueryWrapper<Monitor> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Monitor::getCreateId, personnelVO.getUuid());
+        Long total = this.count(queryWrapper);
+
+        if (total >= totalNum) {
+            if(assoVipFunction.getVipType().equals(0)){
+                throw new BusinessException(ExceptionEnum.PERMISSION_NO_VIP);
+            }
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "已超过可监控数量");
+        }
+
+        return org;
+    }
+
 }
 
 

+ 85 - 40
src/main/java/com/example/xiaoshiweixinback/service/OrderService.java

@@ -3,25 +3,32 @@ package com.example.xiaoshiweixinback.service;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
 import com.example.xiaoshiweixinback.business.utils.BatchNoUtil;
-import com.example.xiaoshiweixinback.domain.AssoPersonProduct;
+import com.example.xiaoshiweixinback.domain.*;
 
-import com.example.xiaoshiweixinback.domain.Order;
-import com.example.xiaoshiweixinback.domain.Ticket;
-import com.example.xiaoshiweixinback.domain.Vip;
 import com.example.xiaoshiweixinback.entity.dto.ticket.TicketProcessUpDTO;
 import com.example.xiaoshiweixinback.entity.vo.PersonnelVO;
 import com.example.xiaoshiweixinback.entity.vo.person.PersonVO;
 import com.example.xiaoshiweixinback.entity.weixinPay.GetPayTicketVO;
+import com.example.xiaoshiweixinback.entity.weixinPay.GoodVO;
 import com.example.xiaoshiweixinback.entity.weixinPay.JsApiDTO;
 import com.example.xiaoshiweixinback.entity.weixinPay.WeiXinPayDTO;
+import com.example.xiaoshiweixinback.factorys.goodFactory.GoodFactory;
+import com.example.xiaoshiweixinback.factorys.goodFactory.GoodImp;
 import com.example.xiaoshiweixinback.mapper.AssoPersonProductMapper;
 import com.example.xiaoshiweixinback.mapper.OrderMapper;
+import com.example.xiaoshiweixinback.service.weixinpay.AssoPayOrderGoodService;
+import com.example.xiaoshiweixinback.service.weixinpay.AssoPayOrderVoucherService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 /**
  * @author admin
  * @description
@@ -36,38 +43,36 @@ public class OrderService extends ServiceImpl<OrderMapper, Order> {
     @Autowired
     private TicketService ticketService;
 
+    @Autowired
+    private AssoPayOrderGoodService assoPayOrderGoodService;
+    @Autowired
+    private AssoPayOrderVoucherService assoPayOrderVoucherService;
+    @Autowired
+    private GoodFactory goodFactory;
+    @Autowired
+    private AssoPersonVoucherService assoPersonVoucherService;
+
     @Transactional(rollbackFor = Exception.class)
-    public Order addOrder(WeiXinPayDTO weiXinPayDTO, GetPayTicketVO getPayTicketVO, String tradeNo, PersonnelVO personVO) {
+    public Order addOrder(WeiXinPayDTO weiXinPayDTO, String tradeNo, PersonnelVO personVO) {
+         this.verifyPrice(weiXinPayDTO,personVO);
         Integer type = weiXinPayDTO.getGoodType();
-        String uuid = weiXinPayDTO.getGoodUuid();
-
-
+        Double price = weiXinPayDTO.getPrice();
+        Double finalPrice = weiXinPayDTO.getFinalPrice();
+        Double discount = weiXinPayDTO.getDiscount();
+        List<GoodVO> goodVOS = weiXinPayDTO.getGoods();
+        List<Integer> assoVoucherIds = weiXinPayDTO.getPersonVoucherIds();
         Order order = new Order();
         order.setOrderState(0);
         order.setTradeNo(tradeNo);
-
-        String json = JSONObject.toJSONString(getPayTicketVO);
-
-        switch (type) {
-            case 1:
-                Vip vip = vipService.getVipByUuId(uuid);
-                order.setOrgPrice(vip.getPrice());
-                order.setTruePrice(vip.getPrice());
-                order.setGoodsType(type);
-                order.setGoodUuid(uuid);
-                order.setOrderParameter(json);
-                order.setPersonUuid(personVO.getUuid());
-                break;
-            case 2:
-                Ticket ticket =ticketService.getTicketByUUid(uuid);
-                order.setOrgPrice(ticket.getPrice());
-                order.setTruePrice(ticket.getPrice());
-                order.setGoodsType(type);
-                order.setGoodUuid(uuid);
-                order.setOrderParameter(json);
-                order.setPersonUuid(personVO.getUuid());
-        }
+        order.setPersonUuid(personVO.getUuid());
+        order.setOrgPrice(price);
+        order.setTruePrice(finalPrice);
+        order.setPersonUuid(personVO.getUuid());
+        order.setDiscount(discount);
         order.insert();
+        assoPayOrderGoodService.addAssoPayOrderGood(order.getId(), type, goodVOS);
+        assoPayOrderVoucherService.addAssoPayOrderVoucher(order.getId(), assoVoucherIds);
+        assoPersonVoucherService.useVoucher(assoVoucherIds, 2);
         return order;
     }
 
@@ -78,23 +83,63 @@ public class OrderService extends ServiceImpl<OrderMapper, Order> {
         return order;
     }
 
+    @Transactional(rollbackFor = Exception.class)
     public void payBack(String tradeNo) {
         Order order = this.getOrderByTradeNo(tradeNo);
-        if(order.getOrderState()!=0){
+
+        if (order.getOrderState() != 0) {
             return;
         }
         order.setOrderState(1);
         order.updateById();
-        Integer orderType = order.getGoodsType();
-        String orderuuid = order.getGoodUuid();
-        switch (orderType) {
-            case 1:
-                vipService.activateVIP(order);
-                break;
-            case 2:
-              ticketService.updateProcess(orderuuid,3);
-                break;
+        List<AssoPayOrderGood> assoPayOrderGoods = assoPayOrderGoodService.getPayOrderGoodByOrderId(order.getId());
+        Integer orderType =assoPayOrderGoods.get(0).getGoodType();
+        GoodImp goodImp = goodFactory.getClass(orderType);
+        goodImp.activeGood(order, assoPayOrderGoods);
+        List<Integer> assoPersonVoucherIds = assoPayOrderVoucherService.getAssoVoucherIdsByOrder(order.getId());
+        assoPersonVoucherService.useVoucher(assoPersonVoucherIds, 1);
+    }
+
+
+    /**
+     * 校验订单价格
+     */
+    private void verifyPrice(WeiXinPayDTO weiXinPayDTO, PersonnelVO personVO) {
+        String personUuid = personVO.getUuid();
+        Integer type = weiXinPayDTO.getGoodType();
+        List<GoodVO> goodVOS = weiXinPayDTO.getGoods();
+        List<Integer> assoVoucherIds = weiXinPayDTO.getPersonVoucherIds();
+        Double price = weiXinPayDTO.getFinalPrice();
+        Double discount = weiXinPayDTO.getDiscount();
+        if(discount==null){
+            discount=1d;
         }
+        //校验优惠卷是否能使用
+        Double voucherMon = assoPersonVoucherService.verifyVouchers(assoVoucherIds, personVO);
+
+        //计算商品价格
+        GoodImp goodImp = goodFactory.getClass(type);
+        Double allPrice =  goodImp.computePrice(goodVOS);
+        System.out.println("总价"+allPrice);
+        System.out.println("卷值"+voucherMon);
+        BigDecimal allPriceBig =new BigDecimal(allPrice.toString());
+        BigDecimal   voucherMonBig    =new BigDecimal(voucherMon.toString());
+     BigDecimal withVocherPriceBig =allPriceBig.subtract(voucherMonBig);
+        BigDecimal discontBig =new BigDecimal(discount.toString());
 
+     if(withVocherPriceBig.doubleValue()<=0){
+         withVocherPriceBig=new BigDecimal("0");
+     }
+        //查看是否有折扣
+        // 计算价格 (商品总价格-优惠券) *折扣
+        BigDecimal truePriceBig =withVocherPriceBig.multiply(discontBig);
+     System.out.println("价格"+truePriceBig);
+
+     System.out.println("折扣"+discontBig);
+     Double truePrice=truePriceBig.doubleValue();
+     System.out.println("总价"+truePrice);
+        if(!truePrice.equals(price)){
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR,"价格错误");
+        }
     }
 }

+ 47 - 0
src/main/java/com/example/xiaoshiweixinback/service/PersonService.java

@@ -2,8 +2,15 @@ package com.example.xiaoshiweixinback.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.example.xiaoshiweixinback.business.common.base.Records;
 import com.example.xiaoshiweixinback.domain.Person;
+import com.example.xiaoshiweixinback.entity.invite.InvitedPersonQueryDTO;
+import com.example.xiaoshiweixinback.entity.person.PersonQueryDTO;
+import com.example.xiaoshiweixinback.entity.person.PersonQueryVO;
+import com.example.xiaoshiweixinback.entity.person.PersonVO;
+import com.example.xiaoshiweixinback.entity.vip.VipMessageVO;
 import com.example.xiaoshiweixinback.mapper.PersonMapper;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -27,6 +34,46 @@ public class PersonService extends ServiceImpl<PersonMapper, Person> {
         return personList;
 
     }
+
+
+    public Records queryPersons(PersonQueryDTO personQueryDTO) {
+        Long current = personQueryDTO.getCurrent();
+        Long size = personQueryDTO.getSize();
+
+        List<PersonQueryVO> personQueryVOs = this.getBaseMapper().queryPerson(personQueryDTO);
+        Long total = this.getBaseMapper().queryPersonTotal(personQueryDTO);
+        Records records = new Records();
+        List<PersonVO> personVOS =this.loadPersonVO(personQueryVOs);
+        records.setData(personVOS);
+        records.setTotal(total);
+        records.setSize(size);
+        records.setCurrent(current);
+        return records;
+
+    }
+
+    public List<PersonVO> loadPersonVO(List<PersonQueryVO> personQueryVOS) {
+        List<PersonVO> personVOS = new ArrayList<>();
+        personQueryVOS.forEach(item -> {
+            PersonVO personVO = new PersonVO();
+            BeanUtils.copyProperties(item, personVO);
+            VipMessageVO vipMessageVO = new VipMessageVO();
+            vipMessageVO.setVipUuid(item.getVipUuid());
+            vipMessageVO.setName(item.getVipName());
+            if (item.getVipUuid() != null) {
+                personVO.setVipType(1);
+            } else {
+                personVO.setVipType(0);
+            }
+            personVO.setVipMessageVO(vipMessageVO);
+            personVOS.add(personVO);
+        });
+ return personVOS;
+    }
+
+
+
+
 }
 
 

+ 6 - 5
src/main/java/com/example/xiaoshiweixinback/service/ProductService.java

@@ -7,6 +7,7 @@ import com.example.xiaoshiweixinback.business.common.Response;
 import com.example.xiaoshiweixinback.business.common.base.Records;
 import com.example.xiaoshiweixinback.business.common.base.SystemFile;
 import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
 import com.example.xiaoshiweixinback.business.utils.CacheUtil;
 import com.example.xiaoshiweixinback.business.utils.LoginUtils;
 import com.example.xiaoshiweixinback.business.utils.StringUtils;
@@ -227,7 +228,7 @@ public class ProductService extends ServiceImpl<ProductMapper, Product> {
             AssoPersonProductDTO assoPersonProductDTO = new AssoPersonProductDTO();
             assoPersonProductDTO.setProductId(product.getId());
             assoPersonProductDTO.setConcernType(productAddDTO.getConcernType());
-            Integer flag = assoPersonProductService.addAsso(assoPersonProductDTO);
+            Integer flag = assoPersonProductService.add(assoPersonProductDTO);
         } else {
             product = this.updateProduct(productAddDTO, productAddDTO.getId());
         }
@@ -303,7 +304,7 @@ public class ProductService extends ServiceImpl<ProductMapper, Product> {
         String name = hotProductAddDTO.getName();
         Integer categoryId = hotProductAddDTO.getProductCategoryId();
         if (name == null) {
-            throw new BusinessException("608", "产品名称不可为空");
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "产品名称不可为空");
         }
         LambdaQueryWrapper<Product> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(Product::getName, name)
@@ -313,7 +314,7 @@ public class ProductService extends ServiceImpl<ProductMapper, Product> {
         }
         Product orgProject = this.getOne(queryWrapper, false);
         if (orgProject != null) {
-            throw new BusinessException("607", "产品名称不可重复");
+            throw new BusinessException(ExceptionEnum.BUSINESS_CHECK, "产品名称不可重复");
         }
 
         if (hotProductAddDTO.getId() == null) {
@@ -403,11 +404,11 @@ public class ProductService extends ServiceImpl<ProductMapper, Product> {
         try {
             List<String> guids = fileManagerService.uploadFileGetGuid(Arrays.asList(multipartFile));
             if (guids == null | guids.size() == 0) {
-                throw new BusinessException("607", "上传文件错误");
+                throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "上传文件错误");
             }
             guid = guids.get(0);
         } catch (Exception e) {
-            throw new BusinessException("607", "上传文件错误");
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "上传文件错误");
         }
 
         //创建导入产品任务

+ 1 - 0
src/main/java/com/example/xiaoshiweixinback/service/SysFunctionService.java

@@ -24,6 +24,7 @@ public class SysFunctionService extends ServiceImpl<SysFunctionMapper, SysFuncti
         return sysFunctions;
 
     }
+
 }
 
 

+ 7 - 5
src/main/java/com/example/xiaoshiweixinback/service/TicketService.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.example.xiaoshiweixinback.business.common.base.Records;
 import com.example.xiaoshiweixinback.business.common.base.SystemFile;
 import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
 import com.example.xiaoshiweixinback.business.utils.BatchNoUtil;
 import com.example.xiaoshiweixinback.business.utils.CacheUtil;
 import com.example.xiaoshiweixinback.business.utils.LoginUtils;
@@ -314,7 +315,8 @@ public class TicketService extends ServiceImpl<TicketMapper, Ticket> {
     @Transactional(rollbackFor = Exception.class)
     public Integer updateProcess(String uuid, Integer process) {
         LambdaQueryWrapper<Ticket> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(Ticket::getNum, uuid);
+      Integer id=  Integer.parseInt(uuid);
+        queryWrapper.eq(Ticket::getId, id);
         Ticket ticket = this.getOne(queryWrapper, false);
         ticket.setTicketProgress(process);
         ticket.updateById();
@@ -368,10 +370,10 @@ public class TicketService extends ServiceImpl<TicketMapper, Ticket> {
         //根据id查询工单
         Ticket ticket = this.getById(id);
         if (ticket == null) {
-            throw new BusinessException("607", "未查询到工单");
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "未查询到工单");
         }
         if (ticket.getTicketProgress() > 2) {
-            throw new BusinessException("607", "此工单不可进行操作");
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "此工单不可进行操作");
         }
 
         ticket.setPrice(price);
@@ -403,10 +405,10 @@ public class TicketService extends ServiceImpl<TicketMapper, Ticket> {
         //根据id查询工单
         Ticket ticket = this.getById(id);
         if (ticket == null) {
-            throw new BusinessException("607", "未查询到工单");
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "未查询到工单");
         }
         if (ticket.getTicketProgress() > 3) {
-            throw new BusinessException("607", "此工单不可进行操作");
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "此工单不可进行操作");
         }
 
         //添加工单流程

+ 58 - 0
src/main/java/com/example/xiaoshiweixinback/service/UseFunctionRecordService.java

@@ -0,0 +1,58 @@
+package com.example.xiaoshiweixinback.service;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.example.xiaoshiweixinback.business.utils.CacheUtil;
+import com.example.xiaoshiweixinback.business.utils.LoginUtils;
+import com.example.xiaoshiweixinback.domain.UseFunctionRecord;
+import com.example.xiaoshiweixinback.entity.vo.PersonnelVO;
+import com.example.xiaoshiweixinback.mapper.UseFunctionRecordMapper;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author admin
+ * @description 针对表【use_function_record(使用功能记录)】的数据库操作Service实现
+ * @createDate 2024-07-02 11:26:00
+ */
+@Service
+@RequiredArgsConstructor
+public class UseFunctionRecordService extends ServiceImpl<UseFunctionRecordMapper, UseFunctionRecord> {
+    private final CacheUtil cacheUtil;
+
+    public void addFunctionRecord(String functionUuid) {
+        PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
+        String uuid = personnelVO.getUuid();
+        UseFunctionRecord useFunctionRecord = new UseFunctionRecord();
+        useFunctionRecord.setPersonUuid(uuid);
+        useFunctionRecord.setFunctionUuid(functionUuid);
+        useFunctionRecord.insert();
+    }
+
+    public void addFunctionRecord(String functionUuid, String paramer) {
+        PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
+        String uuid = personnelVO.getUuid();
+        UseFunctionRecord useFunctionRecord = new UseFunctionRecord();
+        useFunctionRecord.setPersonUuid(uuid);
+        useFunctionRecord.setFunctionParameter(paramer);
+        useFunctionRecord.setFunctionUuid(functionUuid);
+        useFunctionRecord.insert();
+    }
+
+
+    public List<UseFunctionRecord> queryUseFunctionRecordByTime( String functionId, Integer timeType) {
+        PersonnelVO personnelVO =cacheUtil.getLoginUser(LoginUtils.getToken());
+        String personUuid =personnelVO.getUuid();
+        List<UseFunctionRecord> useFunctionRecords = this.getBaseMapper().getPersonRecordByTime(personUuid, functionId, timeType);
+        return useFunctionRecords;
+
+
+    }
+}
+
+
+
+

+ 147 - 0
src/main/java/com/example/xiaoshiweixinback/service/UserFeedbackService.java

@@ -0,0 +1,147 @@
+package com.example.xiaoshiweixinback.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.example.xiaoshiweixinback.business.common.base.Records;
+import com.example.xiaoshiweixinback.business.common.base.SystemFile;
+import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
+import com.example.xiaoshiweixinback.business.utils.CacheUtil;
+import com.example.xiaoshiweixinback.business.utils.LoginUtils;
+import com.example.xiaoshiweixinback.domain.AssoFeedbackFile;
+import com.example.xiaoshiweixinback.domain.Person;
+import com.example.xiaoshiweixinback.domain.UserFeedback;
+import com.example.xiaoshiweixinback.entity.userFeedBack.UserFeedbackAddNewDTO;
+import com.example.xiaoshiweixinback.entity.userFeedBack.UserFeedbackQueryDTO;
+import com.example.xiaoshiweixinback.entity.userFeedBack.UserFeedbackVO;
+import com.example.xiaoshiweixinback.entity.vo.PersonnelVO;
+import com.example.xiaoshiweixinback.mapper.UserFeedbackMapper;
+import com.example.xiaoshiweixinback.service.common.FileManagerService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author admin
+ * @description 针对表【user_feedback】的数据库操作Service实现
+ * @createDate 2024-06-27 14:01:11
+ */
+@Service
+@RequiredArgsConstructor
+public class UserFeedbackService extends ServiceImpl<UserFeedbackMapper, UserFeedback> {
+    private final CacheUtil cacheUtil;
+    private final AssoFeedbackFileService assoFeedbackFileService;
+    private final FileManagerService fileManagerService;
+    private final PersonService personService;
+    public Integer addUserFeedback(UserFeedbackAddNewDTO userFeedbackAddNewDTO) {
+        PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
+        UserFeedback userFeedback = new UserFeedback();
+        BeanUtils.copyProperties(userFeedbackAddNewDTO, userFeedback);
+        userFeedback.setCreateId(personnelVO.getUuid());
+        userFeedback.insert();
+
+        List<String> fileGuids = userFeedbackAddNewDTO.getFileGuids();
+        List<AssoFeedbackFile> assoFeedbackFiles = new ArrayList<>();
+        if (fileGuids != null && fileGuids.size() > 0) {
+            fileGuids.forEach(item -> {
+                AssoFeedbackFile assoFeedbackFile = new AssoFeedbackFile();
+                assoFeedbackFile.setPersonFeedbackId(userFeedback.getId());
+                assoFeedbackFile.setFileGuid(item);
+                assoFeedbackFiles.add(assoFeedbackFile);
+            });
+            assoFeedbackFileService.getBaseMapper().insertBatchSomeColumn(assoFeedbackFiles);
+        }
+        return  userFeedback.getId();
+    }
+
+
+    public Records queryUserFeedback(UserFeedbackQueryDTO userFeedbackQueryDTO) {
+        Records records = new Records();
+
+        Long current = userFeedbackQueryDTO.getCurrent();
+        Long size = userFeedbackQueryDTO.getSize();
+        if (current == null || size == null) {
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "请输入分页信息");
+        }
+        LambdaQueryWrapper<UserFeedback> queryWrapper = new LambdaQueryWrapper<>();
+        Page<UserFeedback> page = this.page(new Page<>(current, size), queryWrapper);
+        Long total = page.getTotal();
+        List<UserFeedback> userFeedbacks = page.getRecords();
+        records.setCurrent(current);
+        records.setSize(size);
+        records.setTotal(total);
+        List<UserFeedbackVO> userFeedbackVOS =this.loadUserFeedbackVO(userFeedbacks);
+        records.setData(userFeedbackVOS);
+        return records;
+    }
+
+    /**
+     * 装载vo类返回
+     *
+     * @param userFeedbacks
+     * @return
+     */
+    private List<UserFeedbackVO> loadUserFeedbackVO(List<UserFeedback> userFeedbacks) {
+        List<UserFeedbackVO> userFeedbackVOS = new ArrayList<>();
+        List<String> createIds = new ArrayList<>();
+
+        //当列表为空或长度为0时,直接返回
+        if (userFeedbacks == null || userFeedbacks.size() == 0) {
+            return userFeedbackVOS;
+        }
+        userFeedbacks.forEach(item -> {
+            if (item.getCreateId() != null) {
+                createIds.add(item.getCreateId());
+            }
+        });
+
+        List<Integer> ids = userFeedbacks.stream().map(UserFeedback::getId).collect(Collectors.toList());
+        LambdaQueryWrapper<AssoFeedbackFile> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(AssoFeedbackFile::getPersonFeedbackId, ids);
+        List<AssoFeedbackFile> assoFeedbackFiles = assoFeedbackFileService.list(queryWrapper);
+        List<String> fileIds = assoFeedbackFiles.stream().map(AssoFeedbackFile::getFileGuid).collect(Collectors.toList());
+        List<SystemFile> systemFiles = new ArrayList<>();
+        try {
+            String res = fileManagerService.getSystemFileFromFMS(fileIds);
+            systemFiles = JSONObject.parseArray(res, SystemFile.class);
+            if (systemFiles == null) {
+                systemFiles = new ArrayList<>();
+            }
+        } catch (Exception e) {
+        }
+
+
+        LambdaQueryWrapper<Person>  queryWrapper1 =new LambdaQueryWrapper<>();
+        queryWrapper1.in(Person::getUuid,createIds);
+        List<Person> personList =personService.list(queryWrapper1);
+
+        for (UserFeedback userFeedback : userFeedbacks) {
+            UserFeedbackVO userFeedbackVO = new UserFeedbackVO();
+            BeanUtils.copyProperties(userFeedback, userFeedbackVO);
+            List<String> temAssoFeedbackFileIds = assoFeedbackFiles.stream().filter(item -> item.getPersonFeedbackId().equals(userFeedback.getId())).map(AssoFeedbackFile::getFileGuid).collect(Collectors.toList());
+          if(temAssoFeedbackFileIds!=null&&temAssoFeedbackFileIds.size()>0){
+              List<SystemFile> temSustemFiles= systemFiles.stream().filter(item->temAssoFeedbackFileIds.contains(item.getGuid())).collect(Collectors.toList());
+              userFeedbackVO.setSystemFiles(temSustemFiles);
+          }
+         Person person =   personList.stream().filter(item->item.getUuid().equals(userFeedback.getCreateId())).findFirst().orElse(null);
+        if(person!=null){
+            userFeedbackVO.setPhoneNum(person.getPhoneNum());
+        }
+        userFeedbackVOS.add(userFeedbackVO);
+        }
+        return userFeedbackVOS;
+    }
+
+
+
+}
+
+
+
+

+ 78 - 24
src/main/java/com/example/xiaoshiweixinback/service/VipService.java

@@ -16,6 +16,7 @@ import com.example.xiaoshiweixinback.entity.weixinPay.VipRightsDTO;
 import com.example.xiaoshiweixinback.entity.weixinPay.VipRightsVO;
 import com.example.xiaoshiweixinback.mapper.VipMapper;
 import jakarta.json.JsonObject;
+import org.apache.poi.hssf.usermodel.HSSFDateUtil;
 import org.eclipse.parsson.JsonUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
@@ -47,6 +48,8 @@ public class VipService extends ServiceImpl<VipMapper, Vip> {
     private SysFunctionService sysFunctionService;
     @Autowired
     private CacheUtil cacheUtil;
+    @Autowired
+    private InviteMessageService inviteMessageService;
 
     /**
      * 查询会员
@@ -56,7 +59,7 @@ public class VipService extends ServiceImpl<VipMapper, Vip> {
     public Records getAllVip() {
         Records records = new Records();
         LambdaQueryWrapper<Vip> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.select(Vip::getPrice, Vip::getVipUuid, Vip::getName, Vip::getConfigParameter);
+        queryWrapper.select(Vip::getPrice, Vip::getVipUuid, Vip::getName, Vip::getConfigParameter, Vip::getFinalPrice);
         queryWrapper.ne(Vip::getVipType, 0);
         List<Vip> vipList = this.list(queryWrapper);
         records.setData(vipList);
@@ -70,28 +73,30 @@ public class VipService extends ServiceImpl<VipMapper, Vip> {
         return vip;
     }
 
-    public void activateVIP(Order order) {
+    public void activateVIP(Order order, String uuid) {
         String tradeNo = order.getTradeNo();
-        String uuid = order.getGoodUuid();
         String personUuId = order.getPersonUuid();
         Vip vip = this.getVipByUuId(uuid);
         AssoPersonVip assoPersonVip = assoPersonVipService.getAsso(personUuId, vip);
-        //查询vip相关权益
-        List<AssoVipFunction> assoVipFunctions = assoVipFunctionService.getVipFunctionByVipUuid(uuid);
-        //将权益赋值给人员
-        List<AssoPersonFunction> assoPersonFunctions = new ArrayList<>();
-        assoVipFunctions.forEach(item -> {
-            AssoPersonFunction assoPersonFunction = new AssoPersonFunction();
-            assoPersonFunction.setFunctionUuid(item.getFunctionUuid());
-            assoPersonFunction.setExpiryTime(assoPersonVip.getExpiryTime());
-            assoPersonFunction.setCreateTime(assoPersonVip.getCreateTime());
-            assoPersonFunction.setFunctionParameter(item.getFunctionParameter());
-            assoPersonFunction.setVipType(vip.getVipType());
-            assoPersonFunction.setVipUuid(vip.getVipUuid());
-            assoPersonFunction.setPersonUuid(personUuId);
-            assoPersonFunctions.add(assoPersonFunction);
-        });
-        assoPersonFunctionService.saveBatch(assoPersonFunctions);
+        //    //查询vip相关权益
+        //     List<AssoVipFunction> assoVipFunctions = assoVipFunctionService.getVipFunctionByVipUuid(uuid);
+//        //将权益赋值给人员
+//        List<AssoPersonFunction> assoPersonFunctions = new ArrayList<>();
+//        assoVipFunctions.forEach(item -> {
+//            AssoPersonFunction assoPersonFunction = new AssoPersonFunction();
+//            assoPersonFunction.setFunctionUuid(item.getFunctionUuid());
+//            assoPersonFunction.setExpiryTime(assoPersonVip.getExpiryTime());
+//            assoPersonFunction.setCreateTime(assoPersonVip.getCreateTime());
+//            assoPersonFunction.setFunctionParameter(item.getFunctionParameter());
+//            assoPersonFunction.setVipType(vip.getVipType());
+//            assoPersonFunction.setVipUuid(vip.getVipUuid());
+//            assoPersonFunction.setPersonUuid(personUuId);
+//            assoPersonFunctions.add(assoPersonFunction);
+//        });
+//        assoPersonFunctionService.saveBatch(assoPersonFunctions);
+
+        //添加优惠券
+        inviteMessageService.getInviteGiveVoucher(personUuId);
     }
 
 
@@ -110,6 +115,7 @@ public class VipService extends ServiceImpl<VipMapper, Vip> {
                 FunctionConfig functionConfig = JSON.parseObject(parameter, FunctionConfig.class);
                 String description = this.replaceDescription(sysFunction.getDescription(), functionConfig);
                 item.setDescription(description);
+
             });
 
             FunctionRightVO functionRightVO = new FunctionRightVO();
@@ -140,10 +146,10 @@ public class VipService extends ServiceImpl<VipMapper, Vip> {
     }
 
     public List<PersonFunctionVO> getPersonRights() {
-
         PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
-
-        List<PersonFunctionVO> personFunctionVOS = assoPersonFunctionService.getBaseMapper().getByPerson(personnelVO.getUuid(), null);
+        String personUuid = personnelVO.getUuid();
+        List<PersonFunctionVO> personFunctionVOS = this.getVipFunctions(personUuid);
+        // 查询登录人的vip
         personFunctionVOS.forEach(item ->
                 {
                     String parameter = item.getFunctionParameter();
@@ -204,6 +210,7 @@ public class VipService extends ServiceImpl<VipMapper, Vip> {
         return vip;
     }
 
+
     public AssoPersonFunction getAssoPersonFunction(String functionUuid) {
         AssoPersonFunction assoPersonFunction = null;
         PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
@@ -218,12 +225,59 @@ public class VipService extends ServiceImpl<VipMapper, Vip> {
     }
 
 
-    public Vip getDefaultVip( ) {
+    public Vip getDefaultVip() {
         LambdaQueryWrapper<Vip> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(Vip::getVipType, 0);
-        Vip vip = this.getOne(queryWrapper,false);
+        Vip vip = this.getOne(queryWrapper, false);
         return vip;
     }
+
+
+    public AssoVipFunction getVipFunctionMessage(String functionUuid) {
+
+        PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
+        //查询当前用户的会员
+        LambdaQueryWrapper<AssoPersonVip> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.gt(AssoPersonVip::getExpiryTime, new Date())
+                .eq(AssoPersonVip::getPersonUuid, personnelVO.getUuid());
+        AssoPersonVip assoPersonVip = assoPersonVipService.getOne(queryWrapper, false);
+        Integer vipType = null;
+        if (assoPersonVip == null) {
+            vipType = 0;
+        } else {
+            vipType = assoPersonVip.getVipType();
+        }
+        //根据vipType和functionUuid查询
+        LambdaQueryWrapper<AssoVipFunction> queryWrapper1 = new LambdaQueryWrapper<>();
+        queryWrapper1.eq(AssoVipFunction::getVipType, vipType)
+                .eq(AssoVipFunction::getFunctionUuid, functionUuid);
+        AssoVipFunction assoVipFunction = assoVipFunctionService.getOne(queryWrapper1);
+        return assoVipFunction;
+    }
+
+
+    public List<PersonFunctionVO> getVipFunctions(String personUuid) {
+        Integer vipType = this.getVipTypes(personUuid);
+        List<PersonFunctionVO> personFunctionVOS = assoVipFunctionService.getBaseMapper().getVipFunction(vipType);
+        return personFunctionVOS;
+    }
+
+    public Integer getVipTypes(String personUuid) {
+        LambdaQueryWrapper<AssoPersonVip> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.gt(AssoPersonVip::getExpiryTime, new Date())
+                .eq(AssoPersonVip::getPersonUuid, personUuid);
+        AssoPersonVip assoPersonVip = assoPersonVipService.getOne(queryWrapper, false);
+        Integer vipType = null;
+        if (assoPersonVip == null) {
+            vipType = 0;
+        } else {
+            vipType = assoPersonVip.getVipType();
+        }
+        return vipType;
+
+
+    }
+
 }
 
 

+ 121 - 0
src/main/java/com/example/xiaoshiweixinback/service/VoucherService.java

@@ -0,0 +1,121 @@
+package com.example.xiaoshiweixinback.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.example.xiaoshiweixinback.business.common.base.Records;
+import com.example.xiaoshiweixinback.business.utils.FormatUtil;
+import com.example.xiaoshiweixinback.business.utils.StringUtils;
+import com.example.xiaoshiweixinback.entity.vouchar.*;
+import com.example.xiaoshiweixinback.domain.Voucher;
+import com.example.xiaoshiweixinback.mapper.VoucherMapper;
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author admin
+ * @description 针对表【voucher( 优惠券)】的数据库操作Service实现
+ * @createDate 2024-06-18 23:06:58
+ */
+@Service
+public class VoucherService extends ServiceImpl<VoucherMapper, Voucher> {
+
+    public Integer addVoucher(VoucherAddDTO voucherAddDTO) {
+        Voucher voucher = new Voucher();
+        BeanUtils.copyProperties(voucherAddDTO, voucher);
+        List<Integer> userScopes = voucherAddDTO.getUseScopes();
+        if (userScopes != null && userScopes.size() > 0) {
+            String userScope = StringUtils.join(userScopes, ",");
+            voucher.setUseScope(userScope);
+        }
+        voucher.insert();
+        return voucher.getId();
+    }
+
+    public Integer editVoucher(VoucherUpdateDTO voucherUpdateDTO) {
+        Integer id = voucherUpdateDTO.getId();
+        List<Integer> useScopes = voucherUpdateDTO.getUseScopes();
+
+        Voucher voucher = this.getById(id);
+        BeanUtils.copyProperties(voucherUpdateDTO, voucher);
+        if (useScopes != null && useScopes.size() > 0) {
+            String userScope = StringUtils.join(useScopes, ",");
+            voucher.setUseScope(userScope);
+        } else {
+            voucher.setUseScope(null);
+        }
+
+        voucher.updateById();
+        return id;
+    }
+
+    public Records queryVector(VoucherQueryDTO voucherQueryDTO) {
+        Records records = new Records();
+        Long size = voucherQueryDTO.getSize();
+        Long current = voucherQueryDTO.getCurrent();
+        List<Voucher> vouchers = this.getBaseMapper().queryVoucher(voucherQueryDTO);
+        Long total = this.getBaseMapper().queryVoucherTotal(voucherQueryDTO);
+        List<VoucherVO> voucherVOS = this.loadVoucherVOs(vouchers);
+        records.setData(voucherVOS);
+        records.setCurrent(current);
+        records.setSize(size);
+        records.setTotal(total);
+
+        return records;
+    }
+
+    public List<Integer> updateBatchVoucher(VoucherBatchUpdateDTO voucherBatchUpdateDTO) {
+        Integer state = voucherBatchUpdateDTO.getState();
+        List<Integer> ids = voucherBatchUpdateDTO.getIds();
+        UpdateWrapper<Voucher> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(Voucher::getState, state)
+                .in(Voucher::getId, ids);
+        this.update(updateWrapper);
+        return ids;
+    }
+
+    public List<VoucherVO> loadVoucherVOs(List<Voucher> vouchers) {
+        List<VoucherVO> voucherVOs = new ArrayList<>();
+        if (vouchers == null || vouchers.size() == 0) {
+            return voucherVOs;
+        }
+        vouchers.forEach(item -> {
+            VoucherVO voucherVO = new VoucherVO();
+            BeanUtils.copyProperties(item, voucherVO);
+            List<Integer> useScopes = FormatUtil.StringToIntegerList(item.getUseScope(), ",");
+            voucherVO.setUseScopes(useScopes);
+            voucherVOs.add(voucherVO);
+        });
+
+        return voucherVOs;
+    }
+
+
+    public VoucherVO queryVectorDetail(Integer id) {
+        VoucherVO voucherVO = new VoucherVO();
+        if (id == null) {
+            return voucherVO;
+
+        }
+        Voucher voucher = this.getById(id);
+        if (voucher == null) {
+            return voucherVO;
+        }
+        List<VoucherVO> voucherVOS = this.loadVoucherVOs(Arrays.asList(voucher));
+
+        if (voucherVOS != null && voucherVOS.size() > 0) {
+            voucherVO = voucherVOS.get(0);
+        }
+        return voucherVO;
+    }
+}
+
+
+
+

+ 14 - 0
src/main/java/com/example/xiaoshiweixinback/service/exportPatent/PatentExportService.java

@@ -2,12 +2,16 @@ package com.example.xiaoshiweixinback.service.exportPatent;
 
 import com.example.xiaoshiweixinback.business.exception.XiaoShiException;
 import com.example.xiaoshiweixinback.business.utils.*;
+import com.example.xiaoshiweixinback.domain.AssoVipFunction;
 import com.example.xiaoshiweixinback.entity.dto.patent.PatentColumnDTO;
 import com.example.xiaoshiweixinback.entity.vo.PatentConfigVO;
 import com.example.xiaoshiweixinback.entity.vo.PatentExportVO;
 import com.example.xiaoshiweixinback.entity.vo.esConfig.EsConfigVO;
 import com.example.xiaoshiweixinback.factorys.patentExportFactory.GetValueImp;
 import com.example.xiaoshiweixinback.factorys.patentExportFactory.PatentExportFactory;
+import com.example.xiaoshiweixinback.factorys.useFunctionFactory.UseFunctionFactory;
+import com.example.xiaoshiweixinback.factorys.useFunctionFactory.UseFunctionImp;
+import com.example.xiaoshiweixinback.service.UseFunctionRecordService;
 import com.example.xiaoshiweixinback.service.importPatent.CommonService;
 import com.example.xiaoshiweixinback.service.importPatent.EsPatentService;
 import com.example.xiaoshiweixinback.service.importPatent.excel.ExcuteDataToVOService;
@@ -30,6 +34,7 @@ import java.util.stream.Collectors;
 
 /**
  * 专利导出Excel
+ *
  * @Author xiexiang
  * @Date 2024/4/11
  */
@@ -43,6 +48,12 @@ public class PatentExportService {
     @Autowired
     private EsPatentService esPatentService;
 
+    private final UseFunctionFactory useFunctionFactory;
+    private final UseFunctionRecordService useFunctionRecordService;
+
+    private static String FACTORY_CLASS = "checkExportPatent";
+    private static String FUNCTION_UUID = "5";
+
     /**
      * 导出专利
      *
@@ -51,6 +62,8 @@ public class PatentExportService {
      * @throws IOException
      */
     public String exportPatent(List<String> patentNos) throws IOException {
+        UseFunctionImp useFunctionImp = useFunctionFactory.getClass(FACTORY_CLASS);
+        AssoVipFunction assoVipFunction = useFunctionImp.checkFunction(FUNCTION_UUID, patentNos);
         try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             String patentExportJson = ExcuteConfigUtils.excuteConfigJson();
             //selected字符串转PatentExportVO集合
@@ -145,6 +158,7 @@ public class PatentExportService {
             if (out.toByteArray() != null && out.toByteArray().length != 0) {
                 fileGuid = parseByteToFileUtils.uploadFile(out.toByteArray(), 1);
             }
+            useFunctionRecordService.addFunctionRecord(FUNCTION_UUID, total.toString());
             return fileGuid;
         } catch (FileNotFoundException e) {
             throw new FileNotFoundException();

+ 28 - 11
src/main/java/com/example/xiaoshiweixinback/service/importPatent/EsDenseVectorService.java

@@ -19,6 +19,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.example.xiaoshiweixinback.business.common.base.Records;
 import com.example.xiaoshiweixinback.business.common.base.SystemFile;
 import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
 import com.example.xiaoshiweixinback.business.redis.RedisService;
 import com.example.xiaoshiweixinback.business.utils.BeanUtil;
 import com.example.xiaoshiweixinback.business.utils.FileUtils;
@@ -29,6 +30,7 @@ import com.example.xiaoshiweixinback.business.utils.parseQueryToTree.operateNode
 import com.example.xiaoshiweixinback.business.utils.parseQueryToTree.treeNode;
 import com.example.xiaoshiweixinback.domain.AssoPersonFunction;
 import com.example.xiaoshiweixinback.domain.AssoProductFile;
+import com.example.xiaoshiweixinback.domain.AssoVipFunction;
 import com.example.xiaoshiweixinback.domain.Product;
 import com.example.xiaoshiweixinback.domain.es.PatentVector;
 import com.example.xiaoshiweixinback.entity.dto.esPicture.EsPictureNoDTO;
@@ -40,9 +42,12 @@ import com.example.xiaoshiweixinback.entity.sysFuctionRights.FunctionConfig;
 import com.example.xiaoshiweixinback.entity.vo.esPicture.EsPictureNoVo;
 import com.example.xiaoshiweixinback.entity.vo.esPicture.EsPatentVectorVo;
 import com.example.xiaoshiweixinback.entity.vo.esPicture.GetImageVO;
+import com.example.xiaoshiweixinback.factorys.useFunctionFactory.UseFunctionFactory;
+import com.example.xiaoshiweixinback.factorys.useFunctionFactory.UseFunctionImp;
 import com.example.xiaoshiweixinback.mapper.AssoProductFileMapper;
 import com.example.xiaoshiweixinback.mapper.ProductMapper;
 import com.example.xiaoshiweixinback.service.SearchRecordService;
+import com.example.xiaoshiweixinback.service.UseFunctionRecordService;
 import com.example.xiaoshiweixinback.service.VipService;
 import com.example.xiaoshiweixinback.service.common.FileManagerService;
 import com.example.xiaoshiweixinback.service.common.GetVectorService;
@@ -100,6 +105,11 @@ public class EsDenseVectorService {
     @Value("${ES.patent}")
     private String patentMapName;
 
+    private final UseFunctionFactory useFunctionFactory;
+    private final UseFunctionRecordService useFunctionRecordService;
+    private static String FACTORY_CLASS = "checkQueryPatent";
+    private static String FUNCTION_UUID = "3";
+
     /**
      * R
      * 根据图片排序获取列表
@@ -114,15 +124,21 @@ public class EsDenseVectorService {
         Long pageSize = dto.getPageSize();
         Boolean ifAddSearchRecord = dto.getIfAddSearchRecord();
         Long allNum = pageNum * pageSize;
-        Long canGetNum = 100L;
-        AssoPersonFunction assoPersonFunction = vipService.getAssoPersonFunction("3");
-        if (assoPersonFunction != null) {
-            FunctionConfig functionConfig = JSON.parseObject(assoPersonFunction.getFunctionParameter(), FunctionConfig.class);
-            canGetNum = Long.parseLong(functionConfig.getSize().toString());
+
+        UseFunctionImp useFunctionImpMap = useFunctionFactory.getClass(FACTORY_CLASS);
+        AssoVipFunction assoVipFunction = useFunctionImpMap.checkFunction(FUNCTION_UUID, null);
+        Long size = -2L;
+        if (assoVipFunction != null) {
+            FunctionConfig functionConfig = JSON.parseObject(assoVipFunction.getFunctionParameter(), FunctionConfig.class);
+            size = Long.parseLong(functionConfig.getSize().toString());
         }
 
-        if (canGetNum!=-1L&&allNum > canGetNum) {
-            throw new BusinessException("607", "超过可查看专利数量");
+        if (size != -1L && allNum > size) {
+            if (assoVipFunction==null||assoVipFunction.getVipType()==null||assoVipFunction.getVipType().equals(0)) {
+                throw new BusinessException(ExceptionEnum.PERMISSION_NO_VIP, "未开通vip");
+            } else {
+                throw new BusinessException(ExceptionEnum.PERMISSION_BEYOND_USETIME, "超过可查看专利数量");
+            }
         }
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
@@ -137,7 +153,7 @@ public class EsDenseVectorService {
         }
 
         GetImageVO imageVO = this.getImageList(dto.getProductId(), file, dto.getDescription());
-        List<Float> imageList = null;
+        List<Float> imageList = imageVO.getImageList();
         List<String> getGuids = imageVO.getGetGuids();
         if (!CollectionUtils.isEmpty(imageList)) {
             String source = "cosineSimilarity(params.queryVector, 'my_vector') + 1.0";
@@ -153,12 +169,12 @@ public class EsDenseVectorService {
                         .query(org.springframework.data.elasticsearch.client.elc.QueryBuilders.matchAllQueryAsQuery()));
             }
             if (query == null) {
-                throw new BusinessException("608", "检索式错误,请重新输入");
+                throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "检索式错误,请重新输入");
             }
             builder.query(query);
         } else {
             if (q == null) {
-                throw new BusinessException("608", "检索式错误,请重新输入");
+                throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "检索式错误,请重新输入");
             }
             builder.query(q);
         }
@@ -213,6 +229,7 @@ public class EsDenseVectorService {
             recordDTO.setSearchTime(new Date());
             searchRecordService.addSearchRecord(recordDTO);
         }
+        useFunctionRecordService.addFunctionRecord(FUNCTION_UUID);
         return records;
     }
 
@@ -403,7 +420,7 @@ public class EsDenseVectorService {
         }
 
         if (q == null) {
-            throw new BusinessException("608", "检索式错误,请重新输入");
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "检索式错误,请重新输入");
         }
 
         builder.query(q);

+ 2 - 1
src/main/java/com/example/xiaoshiweixinback/service/importPatent/excel/ImportProductCategoryService.java

@@ -2,6 +2,7 @@ package com.example.xiaoshiweixinback.service.importPatent.excel;
 
 import cn.hutool.core.util.IdUtil;
 import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
 import com.example.xiaoshiweixinback.business.utils.CacheUtil;
 import com.example.xiaoshiweixinback.business.utils.FileUtils;
 import com.example.xiaoshiweixinback.business.utils.ReadExcelUtils;
@@ -113,7 +114,7 @@ public class ImportProductCategoryService {
                 List<String> guids = fileManagerService.uploadFileGetGuid2(Arrays.asList(file));
                 fileIds.add(guids.get(0));
             } catch (Exception e) {
-                throw new BusinessException("607", "上传错误");
+                throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "上传错误");
             }
 
         }

+ 2 - 1
src/main/java/com/example/xiaoshiweixinback/service/importPatent/excel/ImportProductService.java

@@ -3,6 +3,7 @@ package com.example.xiaoshiweixinback.service.importPatent.excel;
 import cn.hutool.core.util.IdUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
 import com.example.xiaoshiweixinback.business.utils.*;
 import com.example.xiaoshiweixinback.domain.AssoProductFile;
 import com.example.xiaoshiweixinback.domain.ImportTask;
@@ -120,7 +121,7 @@ public class ImportProductService {
                 List<String> guids = fileManagerService.uploadFileGetGuid2(Arrays.asList(file));
                 fileIds.add(guids.get(0));
             } catch (Exception e) {
-                throw new BusinessException("607", "上传错误");
+                throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "上传错误");
             }
 
         }

+ 2 - 1
src/main/java/com/example/xiaoshiweixinback/service/quartzService/JobService.java

@@ -2,6 +2,7 @@ package com.example.xiaoshiweixinback.service.quartzService;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
 import com.example.xiaoshiweixinback.entity.quartz.QrtzTaskDTO;
 import com.example.xiaoshiweixinback.entity.quartz.QuartzVO;
 import lombok.RequiredArgsConstructor;
@@ -92,7 +93,7 @@ public class JobService {
 
         }
         catch (Exception e){
-            throw new BusinessException("607","未找到类");
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR,"未找到类");
         }
         QuartzVO quartzVO = this.generateQuartzVO(qrtzTask.getId());
         JobDataMap jobDataMap = new JobDataMap();

+ 3 - 2
src/main/java/com/example/xiaoshiweixinback/service/quartzService/QuartzTaskService.java

@@ -2,6 +2,7 @@ package com.example.xiaoshiweixinback.service.quartzService;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
 import com.example.xiaoshiweixinback.domain.QuartzTask;
 import com.example.xiaoshiweixinback.entity.quartz.QrtzTaskDTO;
 import com.example.xiaoshiweixinback.mapper.QuartzTaskMapper;
@@ -30,7 +31,7 @@ public class QuartzTaskService extends ServiceImpl<QuartzTaskMapper, QuartzTask>
             jobService.addJob(qrtzTaskDTO);
 
         } catch (Exception e) {
-            throw new BusinessException("607", "添加定时任务失败");
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "添加定时任务失败");
         }
     }
 
@@ -40,7 +41,7 @@ public class QuartzTaskService extends ServiceImpl<QuartzTaskMapper, QuartzTask>
         try {
             jobService.deleteJob(taskId);
         } catch (Exception e) {
-            throw new BusinessException("607", "删除失败");
+            throw new BusinessException(ExceptionEnum.BUSINESS_ERROR, "删除失败");
         }
 
     }

+ 0 - 0
src/main/java/com/example/xiaoshiweixinback/service/weixinpay/AssoPayOrderGoodService.java


Някои файлове не бяха показани, защото твърде много файлове са промени