Sfoglia il codice sorgente

20250704 窍笔微信支付

lrj 3 mesi fa
parent
commit
b60f9a6a9e
34 ha cambiato i file con 1040 aggiunte e 48 eliminazioni
  1. 30 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/goods/GoodsAddDTO.java
  2. 33 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/goods/GoodsQueryDTO.java
  3. 30 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/goods/GoodsQueryVO.java
  4. 8 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/goods/OrderMessageVO.java
  5. 17 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/payOrder/OrderGoodDTO.java
  6. 12 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/payOrder/PayOrderAddMessageDTO.java
  7. 22 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/payOrder/WeiXinSuccessDTO.java
  8. 25 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/strategy/QueryGoodsStrategyVO.java
  9. 89 0
      PCS/src/main/java/cn/cslg/permission/common/utils/common/BigDecimalUtil.java
  10. 54 0
      PCS/src/main/java/cn/cslg/permission/controller/qiaobi/GoodsController.java
  11. 45 0
      PCS/src/main/java/cn/cslg/permission/controller/qiaobi/PayController.java
  12. 11 6
      PCS/src/main/java/cn/cslg/permission/controller/qiaobi/QiaoApplitionController.java
  13. 8 0
      PCS/src/main/java/cn/cslg/permission/controller/qiaobi/VipTypeController.java
  14. 24 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoStartegyGoods.java
  15. 15 7
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/Goods.java
  16. 36 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/MarketStrategy.java
  17. 46 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/PayOrder.java
  18. 25 0
      PCS/src/main/java/cn/cslg/permission/factory/strategy/EightCountStrategy.java
  19. 18 0
      PCS/src/main/java/cn/cslg/permission/factory/strategy/StrategyFatcory.java
  20. 7 0
      PCS/src/main/java/cn/cslg/permission/factory/strategy/StrategyImp.java
  21. 18 0
      PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/AssoStartegyGoodsMapper.java
  22. 22 0
      PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/MarketStrategyMapper.java
  23. 18 0
      PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/PayOrderMapper.java
  24. 31 19
      PCS/src/main/java/cn/cslg/permission/service/FunctionService.java
  25. 20 0
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoStartegyGoodsService.java
  26. 138 5
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/GoodsService.java
  27. 20 0
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/MarketStrategyService.java
  28. 37 0
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/PayOrderService.java
  29. 93 10
      PCS/src/main/java/cn/cslg/permission/service/weixinpay/WeixinPayService.java
  30. 8 0
      PCS/src/main/resources/mapper/AssoStartegyGoodsMapper.xml
  31. 19 0
      PCS/src/main/resources/mapper/MarketStrategyMapper.xml
  32. 31 0
      PCS/src/main/resources/mapper/PayOrderMapper.xml
  33. 3 1
      PCS/src/test/java/cn/cslg/permission/qiaobi/MailSendTest.java
  34. 27 0
      PCS/src/test/java/cn/cslg/permission/qiaobi/QiaoBiApplicationTest.java

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

@@ -0,0 +1,30 @@
+package cn.cslg.permission.common.model.qiaobi.goods;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class GoodsAddDTO {
+    private Integer id;
+
+    private Double price;
+    private String goodName;
+
+    private Date startTime;
+
+    private Integer byType;
+    /**
+     * 商品数量
+     */
+    private Integer goodCount;
+    /**
+     * 次,月,季度,年
+     */
+    private Integer goodUnit;
+
+
+    private List<Integer> goodLimits;
+    private Integer status;
+}

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

@@ -0,0 +1,33 @@
+package cn.cslg.permission.common.model.qiaobi.goods;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author lrj
+ * @Date 2025/06/25
+ */
+@Data
+public class GoodsQueryDTO {
+    /**
+     * 商品名称
+     */
+    private String goodName;
+    /**
+     * 商品类型
+     */
+    private Integer goodType;
+    private Integer status;
+
+    /**
+     * 每页条数
+     */
+    private Long current;
+
+    /**
+     * 当前页数
+     */
+    private Long size;
+
+}

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

@@ -0,0 +1,30 @@
+package cn.cslg.permission.common.model.qiaobi.goods;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class GoodsQueryVO {
+    private Integer id;
+
+    private Double price;
+    private String goodName;
+
+    private Integer goodType;
+
+    private Integer byType;
+    /**
+     * 商品数量
+     */
+    private Integer goodCount;
+    /**
+     * 次,月,季度,年
+     */
+    private Integer goodUnit;
+
+
+    private List<Integer> goodLimits;
+    private Integer status;
+    private String createName;
+}

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

@@ -0,0 +1,8 @@
+package cn.cslg.permission.common.model.qiaobi.goods;
+
+import lombok.Data;
+
+@Data
+public class OrderMessageVO {
+    private Double totalPrice;
+}

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

@@ -0,0 +1,17 @@
+package cn.cslg.permission.common.model.qiaobi.payOrder;
+
+import cn.cslg.permission.common.model.qiaobi.strategy.QueryGoodsStrategyVO;
+import cn.cslg.permission.domain.qiaobi.Goods;
+import lombok.Data;
+
+@Data
+public class OrderGoodDTO {
+    private Goods goods;
+    private Integer goodId;
+    private Integer num;
+    private Integer giveNum;
+    private Integer totalNum;
+    private Double price;
+    private Double totalPrice;
+    private QueryGoodsStrategyVO queryGoodsStrategyVO;
+}

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

@@ -0,0 +1,12 @@
+package cn.cslg.permission.common.model.qiaobi.payOrder;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PayOrderAddMessageDTO {
+    private List<OrderGoodDTO> orderGoodDTOList;
+    private Double totalPrice;
+    private Double orgTotalPrice;
+}

+ 22 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/payOrder/WeiXinSuccessDTO.java

@@ -0,0 +1,22 @@
+package cn.cslg.permission.common.model.qiaobi.payOrder;
+
+import lombok.Data;
+
+@Data
+public class WeiXinSuccessDTO {
+    private String resource_type;
+    private String id;
+    private String event_type;
+    private String summary;
+    private String create_time;
+    private Resource resource;
+
+    @Data
+    public static class Resource {
+        private String original_type;
+        private String ciphertext;
+        private String associated_data;
+        private String nonce;
+        private String algorithm;
+    }
+}

+ 25 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/strategy/QueryGoodsStrategyVO.java

@@ -0,0 +1,25 @@
+package cn.cslg.permission.common.model.qiaobi.strategy;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class QueryGoodsStrategyVO {
+    private Integer id;
+
+    private String strategyName;
+
+    private Date startTime;
+
+    private Date endTime;
+
+    private Date createTime;
+
+    private String strategyMethod;
+
+    private String remark;
+
+    private Integer type;
+    private Integer goodsId;
+}

+ 89 - 0
PCS/src/main/java/cn/cslg/permission/common/utils/common/BigDecimalUtil.java

@@ -0,0 +1,89 @@
+package cn.cslg.permission.common.utils.common;
+
+import org.junit.Test;
+
+import java.math.BigDecimal;
+import java.math.MathContext;
+
+public class BigDecimalUtil {
+
+
+    @Test
+    public void test(){
+        System.out.println(add(0.02,0.03));
+        System.out.println(subtraction(0.05,0.03,2));
+        System.out.println(multiplication(0.2,0.3));
+        System.out.println(division(0.02,0.03,2));
+        System.out.println(divisionRounding(0.5,0));
+    }
+
+    /**
+     * double加法
+     * @param a
+     * @param b
+     * @return
+     */
+    public static Double add(double a, double b) {
+        BigDecimal b1=new BigDecimal(a);
+        BigDecimal b2 = new BigDecimal(b);
+        return b1.add(b2).doubleValue();
+    }
+
+    /**
+     * double减法
+     * @param a
+     * @param b
+     * @param setPrecision 设置精度
+     * @return
+     */
+    public static Double subtraction(double a, double b,int setPrecision) {
+        BigDecimal b1 = new BigDecimal(a);
+        BigDecimal b2 = new BigDecimal(b);
+        return b1.subtract(b2,new MathContext(setPrecision)).doubleValue();
+    }
+
+    /**
+     * double乘法 结果保留两位小数
+     * @param a
+     * @param b
+     * @return
+     */
+    public static Double multiplication(double a, double b) {
+        BigDecimal b1 = new BigDecimal(a);
+        BigDecimal b2 = new BigDecimal(b);
+        return b1.multiply(b2).doubleValue();
+    }
+
+    /**
+     * double除法
+     * @param a
+     * @param b
+     * @param accurate 结果保留位数
+     * @return
+     */
+    public static Double division(double a, double b,int accurate) {
+        if (accurate < 0) {
+            throw new RuntimeException("精确度必须是正整数或零");
+        }
+        BigDecimal b1 = new BigDecimal(a);
+        BigDecimal b2 = new BigDecimal(b);
+        return b1.divide(b2, accurate, BigDecimal.ROUND_HALF_UP).doubleValue();
+    }
+
+
+    /**
+     * double除法 四舍五入
+     * @param a
+     * @param scale accurate 小数点后留几位
+     * @return
+     */
+    public static Double divisionRounding(double a, int scale) {
+        if (scale < 0) {
+            throw new RuntimeException("精确度必须是正整数或零");
+        }
+        BigDecimal b = new BigDecimal(a);
+        BigDecimal one = new BigDecimal("1");
+        return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
+    }
+
+}

+ 54 - 0
PCS/src/main/java/cn/cslg/permission/controller/qiaobi/GoodsController.java

@@ -0,0 +1,54 @@
+package cn.cslg.permission.controller.qiaobi;
+
+import cn.cslg.permission.common.core.base.Constants;
+import cn.cslg.permission.common.model.Records;
+import cn.cslg.permission.common.model.qiaobi.goods.GoodsAddDTO;
+import cn.cslg.permission.common.model.qiaobi.goods.GoodsQueryDTO;
+import cn.cslg.permission.common.model.qiaobi.paidCode.CheckPaidCodePhoneCodeDTO;
+import cn.cslg.permission.common.model.qiaobi.paidCode.PaidCodeReInfoVO;
+import cn.cslg.permission.common.utils.Response;
+import cn.cslg.permission.domain.qiaobi.Goods;
+import cn.cslg.permission.service.qiaobi.GoodsService;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+import java.util.List;
+
+@RestController
+@RequestMapping(Constants.PERMISSION_API + "/goods")
+public class GoodsController {
+    @Autowired
+    private GoodsService goodsService;
+
+    @Operation(summary = "添加商品")
+    @PostMapping("/addGoods")
+    public String addGoods(@RequestBody GoodsAddDTO goodsAddDTO) {
+        Integer id = goodsService.addGoods(goodsAddDTO);
+        return Response.success(id);
+    }
+    @Operation(summary = "查询商品")
+    @PostMapping("/queryGoods")
+    public String queryGoods(@RequestBody GoodsQueryDTO goodsQueryDTO) {
+        Records  records = goodsService.queryGoods(goodsQueryDTO);
+        return Response.success(records);
+    }
+    @Operation(summary = "删除商品")
+    @PostMapping("/removeGoods")
+    public String removeGoods(@RequestBody List<Integer> ids) {
+        if (ids != null) {
+            goodsService.delete(ids);
+            return Response.success("删除完成");
+        }
+        return Response.error("请求参数为null");
+    }
+    @Operation(summary = "查询上架商品")
+    @PostMapping("/queryOnSaleGoods")
+    public String queryOnSaleGoods(@RequestBody GoodsQueryDTO goodsQueryDTO) {
+        Records  records = goodsService.queryGoods(goodsQueryDTO);
+        return Response.success(records);
+    }
+}

+ 45 - 0
PCS/src/main/java/cn/cslg/permission/controller/qiaobi/PayController.java

@@ -0,0 +1,45 @@
+package cn.cslg.permission.controller.qiaobi;
+
+
+import cn.cslg.permission.common.core.base.Constants;
+import cn.cslg.permission.common.model.qiaobi.goods.GoodsAddDTO;
+import cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderAddMessageDTO;
+import cn.cslg.permission.common.model.qiaobi.payOrder.WeiXinSuccessDTO;
+import cn.cslg.permission.common.utils.Response;
+import cn.cslg.permission.service.weixinpay.WeixinPayService;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+import java.io.IOException;
+
+@RestController
+@RequestMapping(Constants.PERMISSION_API + "/pay")
+public class PayController {
+    @Autowired
+    private  WeixinPayService weixinPayService;
+
+    @Operation(summary = "添加支付订单")
+    @PostMapping("/addPayTicket")
+    public String addPayTicket(@RequestBody PayOrderAddMessageDTO payOrderAddMessageDTO) {
+      String codeUrl=  weixinPayService.getPayTickets(payOrderAddMessageDTO);
+        return Response.success(codeUrl);
+    }
+    @Operation(summary = "支付成功")
+    @PostMapping("/success")
+    private String success(@RequestBody WeiXinSuccessDTO weiXinSuccessDTO) throws IOException {
+        try {
+            WeiXinSuccessDTO.Resource resource = weiXinSuccessDTO.getResource();
+            System.out.println(resource);
+        } catch (Exception e) {
+            return "";
+        }
+
+
+        return "success";
+    }
+
+}

+ 11 - 6
PCS/src/main/java/cn/cslg/permission/controller/qiaobi/QiaoApplitionController.java

@@ -4,10 +4,7 @@ import cn.cslg.permission.common.core.base.Constants;
 import cn.cslg.permission.common.model.dto.PhoneLoginDTO;
 import cn.cslg.permission.common.model.qiaobi.QiaoBiPersonSignUpDTO;
 import cn.cslg.permission.common.model.qiaobi.vipType.QueryVipFunctionDTO;
-import cn.cslg.permission.common.model.vo.ApplicationVO;
-import cn.cslg.permission.common.model.vo.FunctionCodeTreeVO;
-import cn.cslg.permission.common.model.vo.LoginVO;
-import cn.cslg.permission.common.model.vo.PersonnelVO;
+import cn.cslg.permission.common.model.vo.*;
 import cn.cslg.permission.common.utils.Response;
 import cn.cslg.permission.common.utils.web.RequestUtils;
 import cn.cslg.permission.service.FunctionService;
@@ -38,11 +35,12 @@ import java.util.List;
 public class QiaoApplitionController {
     private final QiaoBiApplicationService qiaoBiApplicationService;
     private final FunctionService functionService;
+
     @PostMapping("/queryApplication")
     @Operation(summary = "查询窍笔应用")
     public String personnelSignUp(@RequestBody ApplicationVO applicationVO) {
         applicationVO.setApplicationCodes(Arrays.asList("4e95e3d926a2a4befa5d913acc0aa9f5"));
-        return  qiaoBiApplicationService.queryQiaoBiApplication(applicationVO);
+        return qiaoBiApplicationService.queryQiaoBiApplication(applicationVO);
     }
 
     @PostMapping("/queryFunction")
@@ -50,7 +48,14 @@ public class QiaoApplitionController {
     public String queryFunction(@RequestBody QueryVipFunctionDTO queryVipFunctionDTO) {
         queryVipFunctionDTO.setApplicationCode(RequestUtils.getApplicationHeader());
         queryVipFunctionDTO.setIfAll(true);
-        List<FunctionCodeTreeVO> vos= functionService.queryVipFunctionTree(queryVipFunctionDTO);
+        List<FunctionCodeTreeVO> vos = functionService.queryVipFunctionTree(queryVipFunctionDTO);
         return Response.success(vos);
     }
+
+    @PostMapping("/queryQiaoBiFunction")
+    @Operation(summary = "查询窍笔所有功能")
+    public String queryQiaoBiFunction(@RequestBody FunctionVO functionVO) {
+        functionVO.setApply(14);
+        return functionService.queryPageList(functionVO);
+    }
 }

+ 8 - 0
PCS/src/main/java/cn/cslg/permission/controller/qiaobi/VipTypeController.java

@@ -106,4 +106,12 @@ public class VipTypeController {
         PersonVipMessVO personVipMessVO = appVipTypeService.queryPersonVipType();
         return Response.success(personVipMessVO);
     }
+
+    @Operation(summary = "查询可购买的会员列表")
+    @PostMapping("/queryOnSale")
+    public String queryOnSale(@RequestBody QueryVipDTO queryVipDTO) {
+        queryVipDTO.setEnable(1);
+        Records records = appVipTypeService.queryAppVipType(queryVipDTO);
+        return Response.success(records);
+    }
 }

+ 24 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoStartegyGoods.java

@@ -0,0 +1,24 @@
+package cn.cslg.permission.domain.qiaobi;
+
+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.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+/**
+ * @TableName ASSO_STARTEGY_GOODS
+ */
+@TableName(value ="ASSO_STARTEGY_GOODS")
+@Data
+public class AssoStartegyGoods extends Model {
+    private Integer id;
+
+    private Integer startegyId;
+
+    private Integer goodsId;
+
+}

+ 15 - 7
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/Goods.java

@@ -4,6 +4,7 @@ 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;
 
@@ -13,22 +14,29 @@ import lombok.Data;
 /**
  * @TableName GOODS
  */
-@TableName(value ="GOODS")
+@TableName(value = "GOODS")
 @Data
 public class Goods extends Model {
     private Integer id;
-
+    private String goodName;
     private Double price;
-
+    private Integer goodId;
     private Integer goodType;
 
-    private Integer byeType;
-
+    private Integer byType;
+    /**
+     * 商品数量
+     */
     private Integer goodCount;
-
+    /**
+     * 次,月,季度,年
+     */
     private Integer goodUnit;
 
-    private String createId;
+    private Integer createId;
 
     private Date createTime;
+    private String buyLimit;
+    private Integer status;
+
 }

+ 36 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/MarketStrategy.java

@@ -0,0 +1,36 @@
+package cn.cslg.permission.domain.qiaobi;
+
+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 java.util.Map;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+/**
+ * @TableName MARKET_STRATEGY
+ */
+@TableName(value ="MARKET_STRATEGY")
+@Data
+public class MarketStrategy  extends Model {
+    private Integer id;
+
+    private String strategyName;
+
+    private Date startTime;
+
+    private Date endTime;
+
+    private Date createTime;
+
+    private String strategyMethod;
+
+    private String remark;
+
+    private Integer type;
+
+}

+ 46 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/PayOrder.java

@@ -0,0 +1,46 @@
+package cn.cslg.permission.domain.qiaobi;
+
+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.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+/**
+ * @TableName PAY_ORDER
+ */
+@TableName(value ="PAY_ORDER")
+@Data
+public class PayOrder extends Model {
+    private Integer id;
+
+    private String tradeNo;
+
+    private Integer orderStatus;
+
+    private Double orgPrice;
+
+    private Double discount;
+
+    private Double truePrice;
+
+    private String discountReason;
+
+    private Date payTime;
+
+    private Integer createId;
+
+    private Date createTime;
+
+    private Integer goodCount;
+
+    private String goodMessage;
+
+    private Integer orderType;
+
+    private String marketStartegy;
+}

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

@@ -0,0 +1,25 @@
+package cn.cslg.permission.factory.strategy;
+
+import cn.cslg.permission.common.model.qiaobi.payOrder.OrderGoodDTO;
+import cn.cslg.permission.common.utils.common.BigDecimalUtil;
+import org.springframework.stereotype.Component;
+
+@Component
+public class EightCountStrategy implements StrategyImp {
+
+    @Override
+    public OrderGoodDTO DoGoodStrategy(OrderGoodDTO orderGoodDTO) {
+        Integer ByNum = orderGoodDTO.getNum();
+        Double price = orderGoodDTO.getPrice();
+        Double totalPrice = orderGoodDTO.getTotalPrice();
+        if (ByNum >= 10) {
+            Integer a = ByNum / 10;
+            Double value1 = BigDecimalUtil.multiplication(a, 10);
+            Double value2 = BigDecimalUtil.multiplication(price, 0.2);
+            Double value3 = BigDecimalUtil.multiplication(value1, value2);
+            totalPrice = BigDecimalUtil.subtraction(totalPrice, value3, 2);
+            orderGoodDTO.setTotalPrice(totalPrice);
+        }
+        return orderGoodDTO;
+    }
+}

+ 18 - 0
PCS/src/main/java/cn/cslg/permission/factory/strategy/StrategyFatcory.java

@@ -0,0 +1,18 @@
+package cn.cslg.permission.factory.strategy;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+@Component
+public class StrategyFatcory {
+    @Autowired
+    private Map<String, StrategyImp> strategyImpMap;
+
+
+    public StrategyImp getClass(String strategyType) {
+        StrategyImp bean1 = strategyImpMap.get(strategyType);
+        System.out.println(bean1);
+        return bean1;
+    }
+}

+ 7 - 0
PCS/src/main/java/cn/cslg/permission/factory/strategy/StrategyImp.java

@@ -0,0 +1,7 @@
+package cn.cslg.permission.factory.strategy;
+
+import cn.cslg.permission.common.model.qiaobi.payOrder.OrderGoodDTO;
+
+public interface StrategyImp {
+    public OrderGoodDTO DoGoodStrategy(OrderGoodDTO o);
+}

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

@@ -0,0 +1,18 @@
+package cn.cslg.permission.mapper.qiaobi;
+
+import cn.cslg.permission.domain.qiaobi.AssoStartegyGoods;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author admin
+* @description 针对表【ASSO_STARTEGY_GOODS(策略和商品关联表)】的数据库操作Mapper
+* @createDate 2025-06-29 12:04:53
+* @Entity generator.domain.AssoStartegyGoods
+*/
+public interface AssoStartegyGoodsMapper extends BaseMapper<AssoStartegyGoods> {
+
+}
+
+
+
+

+ 22 - 0
PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/MarketStrategyMapper.java

@@ -0,0 +1,22 @@
+package cn.cslg.permission.mapper.qiaobi;
+
+import cn.cslg.permission.common.model.qiaobi.payOrder.OrderGoodDTO;
+import cn.cslg.permission.common.model.qiaobi.strategy.QueryGoodsStrategyVO;
+import cn.cslg.permission.domain.qiaobi.MarketStrategy;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * @author admin
+ * @description 针对表【MARKET_STRATEGY(营销策略)】的数据库操作Mapper
+ * @createDate 2025-06-29 11:58:03
+ * @Entity generator.domain.MarketStrategy
+ */
+public interface MarketStrategyMapper extends BaseMapper<MarketStrategy> {
+  public List<QueryGoodsStrategyVO> queryStrategyByGoodsId(List<Integer> goodIds);
+}
+
+
+
+

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

@@ -0,0 +1,18 @@
+package cn.cslg.permission.mapper.qiaobi;
+
+import cn.cslg.permission.domain.qiaobi.PayOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author admin
+* @description 针对表【PAY_ORDER(订单表)】的数据库操作Mapper
+* @createDate 2025-06-29 11:31:36
+* @Entity generator.domain.PayOrder
+*/
+public interface PayOrderMapper extends BaseMapper<PayOrder> {
+
+}
+
+
+
+

+ 31 - 19
PCS/src/main/java/cn/cslg/permission/service/FunctionService.java

@@ -220,15 +220,23 @@ public class FunctionService extends ServiceImpl<FunctionMapper, Function> {
     }
 
     public String queryPageList(FunctionVO functionVO) {
+        Integer current = functionVO.getCurrent();
+        Integer size = functionVO.getSize();
+        String name = functionVO.getName();
+        if (name == null) {
+            name = "";
+        }
+        String trueName =name;
         LambdaQueryWrapper<Function> queryWrapper = new LambdaQueryWrapper<>();
         Set<Integer> ids = new HashSet<>();
         ids.add(functionVO.getApply());
         Application reApplication = applicationService.getApplicationListByIds(ids).get(0);
-        queryWrapper.and(LambdaQueryWrapper -> LambdaQueryWrapper.like(Function::getFunctionName, functionVO.getName())
+
+        queryWrapper.and(LambdaQueryWrapper -> LambdaQueryWrapper.like(Function::getFunctionName, trueName)
                 .or()
-                .like(Function::getFunctionPath, functionVO.getName())
+                .like(Function::getFunctionPath, trueName)
                 .or()
-                .like(Function::getFunctionDescription, functionVO.getName()));
+                .like(Function::getFunctionDescription, trueName));
         queryWrapper
                 .eq(Function::getApplicationId, functionVO.getApply());
         List<Function> lst = this.list(queryWrapper);
@@ -278,19 +286,24 @@ public class FunctionService extends ServiceImpl<FunctionMapper, Function> {
             tree.putExtra("functionType", treeNode.getExtra().get("functionType"));
         });
         //分页
-        int endSize;
-        int startSize;
-        int current = 1;
-        int pageSize = functionVO.getCurrent() * functionVO.getSize();
-        endSize = Math.min(pageSize, tem.size());
-        startSize = (functionVO.getCurrent() - 1) * functionVO.getSize();
-        if (startSize > endSize) {              //当前端传来的页数大于总查询列表大小时做计算
-            startSize = endSize / 10 * 10;
-            current = startSize / 10 + 1;
+        if (tem == null) {
+            tem = new ArrayList<>();
         }
+        List<Tree<Integer>> pagTem = tem;
+
+        if (functionVO.getCurrent() != null && functionVO.getSize() != null) {
+            int endSize;
+            int startSize;
+            int pageSize = functionVO.getCurrent() * functionVO.getSize();
+            endSize = Math.min(pageSize, tem.size());
+            startSize = (functionVO.getCurrent() - 1) * functionVO.getSize();
+            if (startSize > endSize) {              //当前端传来的页数大于总查询列表大小时做计算
+                startSize = endSize / 10 * 10;
+                current = startSize / 10 + 1;
+            }
 
-        List<Tree<Integer>> pagTem = tem.subList(startSize, endSize);
-
+            pagTem = tem.subList(startSize, endSize);
+        }
         Map<String, Object> reMap = new HashMap<>();
         reMap.put("applyId", reApplication.getId());
         reMap.put("applyName", reApplication.getApplicationName());
@@ -414,7 +427,7 @@ public class FunctionService extends ServiceImpl<FunctionMapper, Function> {
      */
     public Function addFunctionByVo(FunctionVO functionVO) {
 
-        Integer personId =loginUtils.getId();
+        Integer personId = loginUtils.getId();
         String modifyPath = functionVO.getSign();
         List<Function> functionList = this.list(new LambdaQueryWrapper<Function>().eq(Function::getFunctionPath, modifyPath).eq(Function::getApplicationId, functionVO.getApply()));
         if (functionList.size() > 0) {
@@ -503,11 +516,10 @@ public class FunctionService extends ServiceImpl<FunctionMapper, Function> {
 
         List<FunctionCodeTreeVO> functionCodeTreeVOS = new ArrayList<>();
         //根据versionId查询功能
-        List<Function> functionList  =new ArrayList<>();
-        if (ifAll!=null&&ifAll) {
+        List<Function> functionList = new ArrayList<>();
+        if (ifAll != null && ifAll) {
             functionList = this.getFunctionByAppId(application.getId());
-        }
-        else {
+        } else {
             functionList = this.getFuncListByIds(functionIds);
 
         }

+ 20 - 0
PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoStartegyGoodsService.java

@@ -0,0 +1,20 @@
+package cn.cslg.permission.service.qiaobi;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.cslg.permission.domain.qiaobi.AssoStartegyGoods;
+import cn.cslg.permission.mapper.qiaobi.AssoStartegyGoodsMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author admin
+* @description 针对表【ASSO_STARTEGY_GOODS(策略和商品关联表)】的数据库操作Service实现
+* @createDate 2025-06-29 12:04:53
+*/
+@Service
+public class AssoStartegyGoodsService extends ServiceImpl<AssoStartegyGoodsMapper, AssoStartegyGoods> {
+
+}
+
+
+
+

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

@@ -1,18 +1,151 @@
 package cn.cslg.permission.service.qiaobi;
 
+import cn.cslg.permission.common.model.Records;
+import cn.cslg.permission.common.model.qiaobi.goods.GoodsAddDTO;
+import cn.cslg.permission.common.model.qiaobi.goods.GoodsQueryDTO;
+import cn.cslg.permission.common.model.qiaobi.goods.GoodsQueryVO;
+import cn.cslg.permission.common.model.qiaobi.version.QiaoBiVersionVO;
+import cn.cslg.permission.common.utils.StringUtils;
+import cn.cslg.permission.domain.Personnel;
+import cn.cslg.permission.domain.Version;
 import cn.cslg.permission.domain.qiaobi.Goods;
+import cn.cslg.permission.exception.ExceptionEnum;
+import cn.cslg.permission.exception.XiaoShiException;
+import cn.cslg.permission.service.PersonnelService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import cn.cslg.permission.mapper.qiaobi.GoodsMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
-* @author admin
-* @description 针对表【GOODS(商品表)】的数据库操作Service实现
-* @createDate 2025-06-20 17:06:25
-*/
+ * @author admin
+ * @description 针对表【GOODS(商品表)】的数据库操作Service实现
+ * @createDate 2025-06-20 17:06:25
+ */
 @Service
-public class GoodsService extends ServiceImpl<GoodsMapper, Goods>{
+public class GoodsService extends ServiceImpl<GoodsMapper, Goods> {
+    @Autowired
+    private PersonnelService personnelService;
+
+    @Transactional(rollbackFor = Exception.class)
+    public Integer addGoods(GoodsAddDTO goodsAddDTO) {
+        Integer id = goodsAddDTO.getId();
+        Double price = goodsAddDTO.getPrice();
+        Integer goodCount = goodsAddDTO.getGoodCount();
+        List<Integer> goodLimits = goodsAddDTO.getGoodLimits();
+        Integer goodUnit = goodsAddDTO.getGoodUnit();
+        String goodLimit = null;
+        if (goodLimits != null && goodLimits.size() > 0) {
+            goodLimit = StringUtils.join(goodLimits, ",");
+        }
+        if (id != null) {
+            UpdateWrapper<Goods> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.set("PRICE", price);
+            updateWrapper.set("GOOD_COUNT", goodCount);
+            updateWrapper.set("GOOD_LIMIT", goodLimit);
+            updateWrapper.set("GOOD_UNIT", goodUnit);
+            this.update(updateWrapper);
+        } else {
+            Goods goods = new Goods();
+            BeanUtils.copyProperties(goodsAddDTO, goods);
+            goods.setBuyLimit(goodLimit);
+            id = goods.getId();
+        }
+        return id;
+    }
+
+    public Records queryGoods(GoodsQueryDTO goodsQueryDTO) {
+        Records records = new Records();
+        Long current = goodsQueryDTO.getCurrent();
+        Long size = goodsQueryDTO.getSize();
+        String goodName = goodsQueryDTO.getGoodName();
+        Integer goodType = goodsQueryDTO.getGoodType();
+        Integer status = goodsQueryDTO.getStatus();
+        LambdaQueryWrapper<Goods> queryWrapper = new LambdaQueryWrapper<>();
+        if (goodName != null) {
+            queryWrapper.like(Goods::getGoodName, goodName);
+        }
+        if (goodType != null) {
+            queryWrapper.eq(Goods::getGoodType, goodType);
+        }
+        if (status != null) {
+            queryWrapper.eq(Goods::getStatus, status);
+        }
+        List<Goods> goods = new ArrayList<>();
+        if (current != null && size != null) {
+            IPage<Goods> goodsIPage = this.page(new Page<>(current, size), queryWrapper);
+            goods = goodsIPage.getRecords();
+            records.setCurrent(current);
+            records.setSize(size);
+            records.setTotal(goodsIPage.getTotal());
+        } else {
+            goods = this.list(queryWrapper);
+        }
+        List<GoodsQueryVO> goodsQueryVOS = this.loadGoodsQueryVO(goods);
+        records.setRecords(goodsQueryVOS);
+        return records;
+    }
+
+    public List<GoodsQueryVO> loadGoodsQueryVO(List<Goods> goodsList) {
+        List<GoodsQueryVO> goodsQueryVOS = new ArrayList<>();
+        if (goodsQueryVOS == null || goodsQueryVOS.size() == 0) {
+            return goodsQueryVOS;
+        }
+        List<Integer> createIds = goodsList.stream().map(Goods::getCreateId).collect(Collectors.toList());
+        List<Personnel> personnelList = new ArrayList<>();
+        if (createIds != null && createIds.size() > 0) {
+            personnelList = personnelService.getPersonByIds(createIds);
+        }
+        for (Goods goods : goodsList) {
+            GoodsQueryVO goodsQueryVO = new GoodsQueryVO();
+            String limits = goods.getBuyLimit();
+            Integer createId = goods.getId();
+            Personnel personnel = personnelList.stream().filter(item -> item.getId().equals(createId)).findFirst().orElse(null);
+            BeanUtils.copyProperties(goods, goodsQueryVO);
+            if (personnel != null) {
+                goodsQueryVO.setCreateName(personnel.getPersonnelName());
+            }
+            List<Integer> goodLimits = new ArrayList<>();
+            if (limits != null) {
+                String[] temStrs = StringUtils.split(limits, ",");
+                for (int i = 0; i < temStrs.length; i++) {
+                    goodLimits.add(Integer.parseInt(temStrs[i]));
+                }
+                goodsQueryVO.setGoodLimits(goodLimits);
+            }
+            goodsQueryVOS.add(goodsQueryVO);
+        }
+        return goodsQueryVOS;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void delete(List<Integer> ids) {
+        if (ids == null || ids.size() == 0) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "请选择商品");
+        }
+        //删除版本
+        this.removeByIds(ids);
+    }
+
+    public List<Goods> queryByIds(List<Integer> ids) {
+        if (ids == null || ids.size() == 0) {
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<Goods> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(Goods::getId, ids);
+        return this.list(queryWrapper);
 
+    }
 }
 
 

+ 20 - 0
PCS/src/main/java/cn/cslg/permission/service/qiaobi/MarketStrategyService.java

@@ -0,0 +1,20 @@
+package cn.cslg.permission.service.qiaobi;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.cslg.permission.domain.qiaobi.MarketStrategy;
+import cn.cslg.permission.mapper.qiaobi.MarketStrategyMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author admin
+* @description 针对表【MARKET_STRATEGY(营销策略)】的数据库操作Service实现
+* @createDate 2025-06-29 11:58:03
+*/
+@Service
+public class MarketStrategyService extends ServiceImpl<MarketStrategyMapper, MarketStrategy> {
+
+}
+
+
+
+

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

@@ -0,0 +1,37 @@
+package cn.cslg.permission.service.qiaobi;
+
+import cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderAddMessageDTO;
+import cn.cslg.permission.common.utils.BatchNoUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.cslg.permission.domain.qiaobi.PayOrder;
+import cn.cslg.permission.mapper.qiaobi.PayOrderMapper;
+import com.google.gson.JsonObject;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author admin
+ * @description 针对表【PAY_ORDER(订单表)】的数据库操作Service实现
+ * @createDate 2025-06-29 11:31:36
+ */
+@Service
+public class PayOrderService extends ServiceImpl<PayOrderMapper, PayOrder> {
+
+    public PayOrder addPayOrder(PayOrderAddMessageDTO payOrderAddMessageDTO) {
+        String tradeNo = BatchNoUtil.getOrderNo();
+        PayOrder payOrder = new PayOrder();
+        payOrder.setTradeNo(tradeNo);
+        payOrder.setOrgPrice(payOrderAddMessageDTO.getOrgTotalPrice());
+        payOrder.setTruePrice(payOrderAddMessageDTO.getTotalPrice());
+        payOrder.setOrderType(payOrderAddMessageDTO.getOrderGoodDTOList().get(0).getGoods().getGoodType());
+        payOrder.setOrderStatus(0);
+        String goodMessage = JSONObject.toJSONString(payOrderAddMessageDTO.getOrderGoodDTOList());
+        payOrder.setGoodMessage(goodMessage);
+        payOrder.insert();
+        return payOrder;
+    }
+}
+
+
+
+

+ 93 - 10
PCS/src/main/java/cn/cslg/permission/service/weixinpay/WeixinPayService.java

@@ -1,35 +1,65 @@
 package cn.cslg.permission.service.weixinpay;
 
+import cn.cslg.permission.common.model.qiaobi.payOrder.OrderGoodDTO;
+import cn.cslg.permission.common.model.qiaobi.payOrder.PayOrderAddMessageDTO;
+import cn.cslg.permission.common.model.qiaobi.strategy.QueryGoodsStrategyVO;
 import cn.cslg.permission.common.model.weixinpay.GetAuthorizationVO;
 import cn.cslg.permission.common.utils.BatchNoUtil;
+import cn.cslg.permission.common.utils.common.BigDecimalUtil;
+import cn.cslg.permission.domain.qiaobi.Goods;
+import cn.cslg.permission.domain.qiaobi.PayOrder;
+import cn.cslg.permission.exception.ExceptionEnum;
+import cn.cslg.permission.exception.XiaoShiException;
+import cn.cslg.permission.factory.strategy.StrategyFatcory;
+import cn.cslg.permission.factory.strategy.StrategyImp;
+import cn.cslg.permission.mapper.qiaobi.MarketStrategyMapper;
+import cn.cslg.permission.service.qiaobi.GoodsService;
+import cn.cslg.permission.service.qiaobi.PayOrderService;
 import com.alibaba.fastjson.JSONObject;
 import com.google.gson.Gson;
 import okhttp3.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
+import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 @Service
 public class WeixinPayService {
     @Autowired
     private AuthorizationService authorizationService;
-
-    public void getPayTickets() {
+    @Autowired
+    private MarketStrategyMapper marketStrategyMapper;
+    @Autowired
+    private GoodsService goodsService;
+    @Autowired
+    private StrategyFatcory strategyFatcory;
+    @Autowired
+    private PayOrderService payOrderService;
+    @Transactional(rollbackFor = Exception.class)
+    public String getPayTickets(PayOrderAddMessageDTO payOrderAddMessageDTO) {
+        String codeUrl="";
+        payOrderAddMessageDTO = this.calculatePrice(payOrderAddMessageDTO);
+        PayOrder payOrder = payOrderService.addPayOrder(payOrderAddMessageDTO);
         String url = "https://api.mch.weixin.qq.com/v3/pay/transactions/native";
-        String tradeNo = BatchNoUtil.getOrderNo();
+        String tradeNo = payOrder.getTradeNo();
         com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest prepayRequest = new com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest();
         String appId = "wxe5f9b6e3d532e6c3";
-        String merchantId="1718408246";
-        String notifyUrl="https://xsip.cn/xiaoshi-weixinback/weixinpay/success";
+        String merchantId = "1718408246";
+        String notifyUrl = "https://fms.xsip.cn/permission/qiaoBi/pay/success";
         prepayRequest.setAppid(appId);
         prepayRequest.setMchid(merchantId);
         prepayRequest.setOutTradeNo(tradeNo);
         prepayRequest.setDescription("商品信息");
         prepayRequest.setNotifyUrl(notifyUrl);
         com.wechat.pay.java.service.payments.nativepay.model.Amount amount = new com.wechat.pay.java.service.payments.nativepay.model.Amount();
-        amount.setTotal(1);
+        Double truePrice = payOrder.getTruePrice();
+        Double d = BigDecimalUtil.multiplication(truePrice, 100);
+        Integer IntPrice = d.intValue();
+        amount.setTotal(IntPrice);
         amount.setCurrency("CNY");
         prepayRequest.setAmount(amount);
         String param = new Gson().toJson(prepayRequest);
@@ -52,15 +82,68 @@ public class WeixinPayService {
             Response response = okHttpClient.newCall(request).execute();
             // 判断请求是否成功
 //            if (response.isSuccessful()) {
-                // 打印服务端返回结果
-                String a = Objects.requireNonNull(response.body()).string();
-                JSONObject jsonObject = JSONObject.parseObject(a);
-
+            // 打印服务端返回结果
+            String a = Objects.requireNonNull(response.body()).string();
+            JSONObject jsonObject = JSONObject.parseObject(a);
+           Object codeUrlObject=   jsonObject.get("code_url");
+           if(codeUrlObject==null){
+             throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR,"请求微信支付接口错误,请联系管理员排查");
+           }
+             codeUrl =codeUrlObject.toString();
 //            }
 
         } catch (Exception e) {
             e.printStackTrace();
         }
+        return codeUrl;
+    }
 
+    /**
+     * 计算商品总价
+     *
+     * @param payOrderAddMessageDTO
+     * @return
+     */
+    public PayOrderAddMessageDTO calculatePrice(PayOrderAddMessageDTO payOrderAddMessageDTO) {
+        Double totalPrice = 0d;
+        Double orgTotalPrice = 0d;
+        if (payOrderAddMessageDTO == null || payOrderAddMessageDTO.getOrderGoodDTOList() == null || payOrderAddMessageDTO.getOrderGoodDTOList().isEmpty()) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "请选择商品");
+        }
+        List<OrderGoodDTO> orderGoodDTOList = payOrderAddMessageDTO.getOrderGoodDTOList();
+        List<Integer> goodsIds = orderGoodDTOList.stream().map(OrderGoodDTO::getGoodId).collect(Collectors.toList());
+        if (goodsIds == null || goodsIds.isEmpty()) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "请选择商品");
+        }
+        List<Goods> goods = goodsService.queryByIds(goodsIds);
+        List<QueryGoodsStrategyVO> queryGoodsStrategyVOS = marketStrategyMapper.queryStrategyByGoodsId(goodsIds);
+        for (OrderGoodDTO item : orderGoodDTOList) {
+            Integer temGoodId = item.getGoodId();
+            Goods goods1 = goods.stream().filter(tem -> tem.getId().equals(temGoodId)).findFirst().orElse(null);
+            if (goods1 == null) {
+                throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "有伪造的商品数据");
+            }
+            item.setPrice(goods1.getPrice());
+            item.setGoods(goods1);
+            if (item.getNum() == null || item.getNum() <= 0) {
+                throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "商品数量不能小于0");
+
+            }
+            Double orgPrice = BigDecimalUtil.multiplication(item.getPrice(), item.getNum());
+            orgTotalPrice = BigDecimalUtil.add(orgPrice, orgTotalPrice);
+            Double goodsTotalPrice = BigDecimalUtil.multiplication(item.getPrice(), item.getNum());
+            item.setTotalPrice(goodsTotalPrice);
+            QueryGoodsStrategyVO queryGoodsStrategyVO = queryGoodsStrategyVOS.stream().filter(tem -> tem.getGoodsId().equals(temGoodId)).findFirst().orElse(null);
+            item.setQueryGoodsStrategyVO(queryGoodsStrategyVO);
+            if (queryGoodsStrategyVO != null) {
+                String methodName = queryGoodsStrategyVO.getStrategyName();
+                StrategyImp strategyImp = strategyFatcory.getClass(methodName);
+                item = strategyImp.DoGoodStrategy(item);
+            }
+            totalPrice = BigDecimalUtil.add(totalPrice, item.getTotalPrice());
+        }
+        payOrderAddMessageDTO.setTotalPrice(totalPrice);
+        payOrderAddMessageDTO.setOrgTotalPrice(orgTotalPrice);
+        return payOrderAddMessageDTO;
     }
 }

+ 8 - 0
PCS/src/main/resources/mapper/AssoStartegyGoodsMapper.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.cslg.permission.mapper.qiaobi.AssoStartegyGoodsMapper">
+
+
+</mapper>

+ 19 - 0
PCS/src/main/resources/mapper/MarketStrategyMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.cslg.permission.mapper.qiaobi.MarketStrategyMapper">
+    <select id="queryStrategyByGoodsId" resultType="cn.cslg.permission.common.model.qiaobi.strategy.QueryGoodsStrategyVO">
+        select B.*,A.GOODS_ID as goodsId from ASSO_STARTEGY_GOODS as A left join MARKET_STRATEGY as B on A.STARTEGY_ID=B.ID
+        <where>
+            <if test="goodIds!=null and goodIds.size()>0">
+                A.GOODS_ID in(
+                <foreach collection="goodIds" item="n" separator=",">
+                    #{n}
+                </foreach>
+                )
+            </if>
+            or 1!=1
+        </where>
+    </select>
+</mapper>

+ 31 - 0
PCS/src/main/resources/mapper/PayOrderMapper.xml

@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.cslg.permission.mapper.qiaobi.PayOrderMapper">
+
+    <resultMap id="BaseResultMap" type="cn.cslg.permission.domain.qiaobi.PayOrder">
+            <id property="id" column="ID" jdbcType="INTEGER"/>
+            <result property="tradeNo" column="TRADE_NO" jdbcType="VARCHAR"/>
+            <result property="orderStatus" column="ORDER_STATUS" jdbcType="INTEGER"/>
+            <result property="orgPrice" column="ORG_PRICE" jdbcType="DOUBLE"/>
+            <result property="discount" column="DISCOUNT" jdbcType="DOUBLE"/>
+            <result property="truePrice" column="TRUE_PRICE" jdbcType="DOUBLE"/>
+            <result property="discountReason" column="DISCOUNT_REASON" jdbcType="VARCHAR"/>
+            <result property="payTime" column="PAY_TIME" jdbcType="TIMESTAMP"/>
+            <result property="createId" column="CREATE_ID" jdbcType="INTEGER"/>
+            <result property="createTime" column="CREATE_TIME" jdbcType="TIMESTAMP"/>
+            <result property="goodCount" column="GOOD_COUNT" jdbcType="INTEGER"/>
+            <result property="goodMessage" column="GOOD_MESSAGE" jdbcType="VARCHAR"/>
+            <result property="orderType" column="ORDER_TYPE" jdbcType="INTEGER"/>
+            <result property="marketStartegy" column="MARKET_STARTEGY" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        ID,TRADE_NO,ORDER_STATUS,
+        ORG_PRICE,DISCOUNT,TRUE_PRICE,
+        DISCOUNT_REASON,PAY_TIME,CREATE_ID,
+        CREATE_TIME,GOOD_COUNT,GOOD_MESSAGE,
+        ORDER_TYPE,MARKET_STARTEGY
+    </sql>
+</mapper>

+ 3 - 1
PCS/src/test/java/cn/cslg/permission/qiaobi/MailSendTest.java

@@ -3,6 +3,7 @@ package cn.cslg.permission.qiaobi;
 import cn.cslg.permission.common.core.business.LoginCacheKeyUtil;
 import cn.cslg.permission.common.model.qiaobi.tenant.CompanyPersonSignUpDTO;
 import cn.cslg.permission.common.utils.RedisUtil;
+import cn.cslg.permission.controller.qiaobi.QiaoApplitionController;
 import cn.cslg.permission.service.email.MailSendService;
 import cn.cslg.permission.service.qiaobi.QiaoBiPersonService;
 import org.junit.Test;
@@ -15,7 +16,7 @@ import org.springframework.test.context.junit4.SpringRunner;
 @RunWith(SpringRunner.class)
 public class MailSendTest {
     @Autowired
-    private MailSendService mailSendService;
+    private QiaoApplitionController qiaoApplitionController;
 @Test
 public void CompanyPersonSignUp(){
 
@@ -28,5 +29,6 @@ public void CompanyPersonSignUp(){
 
 
 
+
 }
 }

+ 27 - 0
PCS/src/test/java/cn/cslg/permission/qiaobi/QiaoBiApplicationTest.java

@@ -0,0 +1,27 @@
+package cn.cslg.permission.qiaobi;
+
+import cn.cslg.permission.common.model.vo.FunctionVO;
+import cn.cslg.permission.controller.qiaobi.QiaoApplitionController;
+import cn.cslg.permission.service.FunctionService;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class QiaoBiApplicationTest {
+    @Autowired
+    private QiaoApplitionController qiaoApplitionController;
+    @Autowired
+    private FunctionService functionService;
+    @Test
+    public void queryFunction() {
+        FunctionVO functionVO =new FunctionVO();
+        functionVO.setApply(14);
+      String re=  functionService.queryPageList(functionVO);
+      System.out.println(re);
+    }
+}