瀏覽代碼

Merge branch 'mp-server-test' into 'master'

Mp server test

See merge request quanshu/mp-server!798
zhong chunping 2 年之前
父節點
當前提交
4892d7dcc4

+ 1 - 1
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/SaleSiteMgrController.java

@@ -334,7 +334,7 @@ public class SaleSiteMgrController extends BaseApiController {
 		}
 
 		boolean rtn = channelService.update(new LambdaUpdateWrapper<Channel>()
-			.set(Channel::getSiteName, saleSiteEditParam.getSiteName())
+			.set(Channel::getName, saleSiteEditParam.getName())
 			.eq(Channel::getChannelId, saleSiteEditParam.getChannelId()));
 
 		if (!rtn) {

+ 34 - 19
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/UserDeliverOrderMgrController.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.qs.mp.admin.domain.Supplier;
 import com.qs.mp.admin.domain.param.UserDeliverOrderQueryParam;
 import com.qs.mp.admin.domain.param.UserDeliverOrderShipParam;
+import com.qs.mp.admin.domain.param.UserDeliverOrderSmsParam;
 import com.qs.mp.admin.service.ISupplierService;
 import com.qs.mp.common.annotation.Log;
 import com.qs.mp.common.core.domain.AjaxResult;
@@ -14,6 +15,7 @@ import com.qs.mp.common.enums.BusinessType;
 import com.qs.mp.common.enums.DeliverOrderStatusEnum;
 import com.qs.mp.common.enums.DeliverTypeEnum;
 import com.qs.mp.common.enums.ErrorCodeEnum;
+import com.qs.mp.common.jsms.JSMSUtils;
 import com.qs.mp.common.utils.DateUtils;
 import com.qs.mp.user.domain.UserDeliverOrder;
 import com.qs.mp.user.domain.UserDeliverOrderItem;
@@ -59,23 +61,30 @@ public class UserDeliverOrderMgrController extends BaseApiController {
 	@Autowired
 	private IUserDeliverOrderItemService userDeliverOrderItemService;
 
-	@Autowired
-	private ISupplierService supplierService;
-
-//	@Autowired
-//	private IUserPrizeStorageService userPrizeStorageService;
-//
-//	@Autowired
-//	private IUserAddrService userAddrService;
-//
-//	@Autowired
-//	private IWalletService walletService;
-
-	@Autowired
-	private MapperFacade mapperFacade;
+	@PostMapping("/sendSMS")
+	@ApiOperation("发送短信")
+	@PreAuthorize("@ss.hasPermi('order:deliver:sendSMS')")
+	public AjaxResult sendSMS(@RequestBody List<UserDeliverOrderSmsParam> paramList) {
+		for (UserDeliverOrderSmsParam userDeliverOrderSmsParam : paramList) {
+			String orderNo = userDeliverOrderSmsParam.getOrderId()
+				.substring(userDeliverOrderSmsParam.getOrderId().length() - 4);
+			String mobile = userDeliverOrderSmsParam.getMobile();
+			StringBuilder sb = new StringBuilder();
+			for (int i = 0; i < userDeliverOrderSmsParam.getGoodsNameList().size(); i++) {
+				sb.append(userDeliverOrderSmsParam.getGoodsNameList().get(i));
+				if (i != userDeliverOrderSmsParam.getGoodsNameList().size() - 1) {
+					sb.append(",");
+				} else {
+					sb.append(";");
+				}
+			}
+			// 截取最长长度
+			String context = sb.substring(0, Math.min(sb.length(), 200));
+			JSMSUtils.sendDeliverSMS(mobile, orderNo, context);
+		}
+		return AjaxResult.success();
+	}
 
-//	@Autowired
-//	private RedisCache redisCache;
 
 	/**
 	 * 用户提货订单列表
@@ -368,11 +377,17 @@ public class UserDeliverOrderMgrController extends BaseApiController {
 							deliverOrderExcel.setTel(deliverOrder.getTel());
 							deliverOrderExcel.setDeliveryFlowId(userDeliverOrderItem.getDeliveryFlowId());
 							deliverOrderExcel.setCompanyName(userDeliverOrderItem.getCompanyName());
+
+
+							int cost = 0;
+							Integer skuCost = userDeliverOrderItem.getSkuCost();
 							Integer goodsCost = userDeliverOrderItem.getGoodsCost();
-							if (Objects.isNull(goodsCost)) {
-								goodsCost = 0;
+							if (skuCost != null) {
+								cost = skuCost;
+							} else if (goodsCost != null){
+								cost = goodsCost;
 							}
-							deliverOrderExcel.setGoodsCost(BigDecimal.valueOf(goodsCost).divide(BigDecimal.valueOf(100),2, RoundingMode.HALF_UP));
+							deliverOrderExcel.setGoodsCost(BigDecimal.valueOf(cost).divide(BigDecimal.valueOf(100),2, RoundingMode.HALF_UP));
 
 							String address = deliverOrder.getProvince() + deliverOrder.getCity()
 									+ deliverOrder.getArea() + deliverOrder.getAddress();

+ 123 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserTicketController.java

@@ -124,6 +124,7 @@ public class UserTicketController extends BaseApiController {
     /**
      * 查看盲票详情
      */
+    // TODO: 下个版本删除
     @PostMapping("/mall/ticket/detail")
     @ApiOperation(value = "查看盲票详情", notes = "根据盲票组ID,获取盲票信息")
     @ApiResponses(
@@ -212,6 +213,128 @@ public class UserTicketController extends BaseApiController {
     return AjaxResult.success(ticketBoxVO);
   }
 
+
+  /**
+   * 查看盲票详情
+   */
+  @PostMapping("/mall/ticket/detail/new")
+  @ApiOperation(value = "查看盲票详情(新)", notes = "根据盲票组ID,获取盲票信息")
+  @ApiResponses(
+      @ApiResponse(code = 200, message = "成功", response = TicketBoxVO.class)
+  )
+  public AjaxResult getInfoNew(@RequestBody TicketBoxParam param) {
+    if (StringUtils.isBlank(param.getBoxId())) {
+      return AjaxResult.error("参数异常,盲票组ID缺失");
+    }
+    TicketBox ticketBox = ticketBoxService.getById(param.getBoxId());
+    TicketBoxVO ticketBoxVO = mapperFacade.map(ticketBox, TicketBoxVO.class);
+
+
+    // 设置经销商佣金比
+    if (hostHolder.getUser() != null) {
+      Long channelId = hostHolder.getUser().getChannelId();
+      if (channelId != null && channelId > 0) {
+        Channel channel = channelService.getById(channelId);
+        if (channel != null) {
+          ticketBoxVO.setChannelCommRate(channel.getCommRate());
+        }
+      }
+    }
+
+
+
+    // 设置奖项标签信息
+    QueryWrapper<TicketAwards> queryWrapper = new QueryWrapper<>();
+    queryWrapper.eq("box_id",ticketBox.getBoxId());
+    queryWrapper.isNotNull("awards_label");
+    queryWrapper.ne("awards_label", "");
+    queryWrapper.groupBy("awards_label");
+    StringBuilder sortField = new StringBuilder("FIELD(awards_label,'");
+    int index = 0;
+    for (AwardsLabelEnum awardsLabelEnum : AwardsLabelEnum.values()) {
+      index++;
+      if (index == AwardsLabelEnum.values().length) {
+        sortField.append(awardsLabelEnum.getValue()).append("'");
+      }else {
+        sortField.append(awardsLabelEnum.getValue()).append("','");
+      }
+    }
+    sortField.append(")");
+    queryWrapper.orderByAsc(sortField.toString());
+    List<TicketAwardsLabelVO> ticketAwardsLabelVOS = ticketAwardsService.groupSumQuantityByQueryWrapper(queryWrapper);
+    if (CollectionUtils.isNotEmpty(ticketAwardsLabelVOS)) {
+      for (TicketAwardsLabelVO ticketAwardsLabelVO : ticketAwardsLabelVOS) {
+        AwardsLabelEnum awardsLabelEnum = AwardsLabelEnum.getByValue(ticketAwardsLabelVO.getLabelTitle());
+        if (Objects.isNull(awardsLabelEnum)) {
+          continue;
+        }
+        ticketAwardsLabelVO.setPicUrl(awardsLabelEnum.getPicUrl());
+        Integer quantity = ticketBox.getQuantity();
+        int num = ticketAwardsLabelVO.getQuantity();
+        ticketAwardsLabelVO.setHitRate(BigDecimal.valueOf(num).divide(BigDecimal.valueOf(quantity), 3, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)));
+      }
+    }
+
+    if (CollectionUtils.isNotEmpty(ticketAwardsLabelVOS)) {
+      // 精度问题处理
+      int maxIndex = 0;
+      BigDecimal maxHitRate = BigDecimal.valueOf(100);
+      for (int i = 0; i < ticketAwardsLabelVOS.size(); i++) {
+        TicketAwardsLabelVO ticketAwardsLabelVO = ticketAwardsLabelVOS.get(i);
+        if (BigDecimal.ZERO.equals(ticketAwardsLabelVO.getHitRate())) {
+          ticketAwardsLabelVO.setHitRate(BigDecimal.valueOf(0.1));
+        }
+        if (ticketAwardsLabelVO.getHitRate().compareTo(ticketAwardsLabelVOS.get(maxIndex).getHitRate()) > 0) {
+          maxIndex = i;
+        }
+        maxHitRate = maxHitRate.subtract(ticketAwardsLabelVO.getHitRate());
+      }
+      if (maxHitRate.compareTo(BigDecimal.ZERO) > 0) {
+        TicketAwardsLabelVO ticketAwardsLabelVO = ticketAwardsLabelVOS.get(maxIndex);
+        ticketAwardsLabelVO.setHitRate(ticketAwardsLabelVO.getHitRate().subtract(maxHitRate));
+      } else {
+        TicketAwardsLabelVO ticketAwardsLabelVO = ticketAwardsLabelVOS.get(maxIndex);
+        ticketAwardsLabelVO.setHitRate(ticketAwardsLabelVO.getHitRate().add(maxHitRate));
+      }
+    }
+
+    ticketBoxVO.setTicketAwardsLabelList(ticketAwardsLabelVOS);
+
+
+    // 轮播图的十个奖品
+    StringBuilder sb = new StringBuilder("FIELD(t1.awards_label,'");
+    int i = 0;
+    for (AwardsLabelEnum awardsLabelEnum : AwardsLabelEnum.values()) {
+      i++;
+      if (i == AwardsLabelEnum.values().length) {
+        sb.append(awardsLabelEnum.getValue()).append("'");
+      }else {
+        sb.append(awardsLabelEnum.getValue()).append("','");
+      }
+    }
+    sb.append(")");
+
+    List<TicketAwardsPrizeVO> ticketAwardsPrizeVOS = ticketAwardsPrizeService.listPrizeVO(new QueryWrapper<TicketAwardsPrize>()
+        .eq("t1.box_id", ticketBox.getBoxId())
+        .eq("t2.is_deleted", 0)
+        .orderByAsc(sb.toString())
+        .orderByAsc("t1.sort")
+        .orderByDesc("t2.sort_weight")
+        .orderByDesc("t2.value")
+        .last("limit 10"));
+    ticketBoxVO.setPrizeList(ticketAwardsPrizeVOS);
+    return AjaxResult.success(ticketBoxVO);
+  }
+
+
+  @PostMapping("/ticket/prize/list/{boxId}")
+  @ApiOperation("查询盲票下奖品列表")
+  public TableDataInfo listPrize(@PathVariable("boxId") String boxId) {
+      startPage();
+      List<TicketAwardsPrizeVO> ticketAwardsPrizeVOS = ticketAwardsPrizeService.listPrizeVO(boxId);
+      return getDataTable(ticketAwardsPrizeVOS);
+  }
+
   /**
    * 扫码查看盲票幸运数字
    */

+ 3 - 1
mp-admin/src/main/resources/application-8100.yml

@@ -142,4 +142,6 @@ export:
 
 shipping:
   user: 1
-  channel: 2
+  channel: 2
+bind:
+  channelId: 1528

+ 3 - 1
mp-admin/src/main/resources/application-8200.yml

@@ -142,4 +142,6 @@ export:
 
 shipping:
   user: 1
-  channel: 2
+  channel: 2
+bind:
+  channelId: 1528

+ 2 - 1
mp-admin/src/main/resources/application-dev.yml

@@ -137,4 +137,5 @@ export:
 shipping:
     user: 4
     channel: 7
-
+bind:
+    channelId: 2

+ 3 - 1
mp-admin/src/main/resources/application-test.yml

@@ -140,4 +140,6 @@ export:
 
 shipping:
   user: 4
-  channel: 7
+  channel: 7
+bind:
+  channelId: 2

+ 33 - 6
mp-common/src/main/java/com/qs/mp/common/jsms/JSMSUtils.java

@@ -26,6 +26,8 @@ import com.qs.mp.common.enums.ServerEnvEnum;
 import com.qs.mp.common.utils.LogUtil;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import org.apache.commons.collections4.map.HashedMap;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
@@ -52,19 +54,44 @@ public class JSMSUtils {
 //        testSendTemplateSMS();
     }
 
+    /**
+     * 提货短信发送
+     * @param mobile    手机号
+     * @param orderNo   订单尾号
+     * @param context   内容
+     */
+    public static SendSMSResult sendDeliverSMS(String mobile,String orderNo ,String context) {
+        SMSClient client = new SMSClient(masterSecret, appkey);
+        Map<String, String> map = new HashedMap<>();
+        map.put("number", orderNo);
+        map.put("context", context);
+        SMSPayload payload = SMSPayload.newBuilder().setMobileNumber(mobile).setTempId(209720).setTempPara(map).build();
+        try {
+                SendSMSResult res = client.sendTemplateSMS(payload);
+                logger.info(res.toString());
+                return res;
+        } catch (APIConnectionException e) {
+            logger.error("Connection error. Should retry later. " + e.getMessage());
+        } catch (APIRequestException e) {
+            logger.error("Error response from JPush server. Should review and fix it. " + e.getMessage());
+        }
+        return null;
+    }
+
+
     public static SendSMSResult sendSMSCode(String mobile) {
         SMSClient client = new SMSClient(masterSecret, appkey);
         SMSPayload payload = SMSPayload.newBuilder().setMobileNumber(mobile).setTempId(1).build();
         try {
-            if (ServerEnvEnum.PROD.getCode().equals(env)) {
+//            if (ServerEnvEnum.PROD.getCode().equals(env)) {
                 SendSMSResult res = client.sendSMSCode(payload);
                 logger.info(res.toString());
                 return res;
-            } else {
-                logger.info("非生产环境,不发送短信验证码!" + mobile);
-                return (new GsonBuilder()).excludeFieldsWithoutExposeAnnotation().create().fromJson("{\"msg_id\":\"123456789\"}", SendSMSResult.class);
-
-            }
+//            } else {
+//                logger.info("非生产环境,不发送短信验证码!" + mobile);
+//                return (new GsonBuilder()).excludeFieldsWithoutExposeAnnotation().create().fromJson("{\"msg_id\":\"123456789\"}", SendSMSResult.class);
+//
+//            }
         } catch (APIConnectionException e) {
             logger.error("Connection error. Should retry later. " + e.getMessage());
         } catch (APIRequestException e) {

+ 3 - 1
mp-framework/src/main/java/com/qs/mp/framework/config/SecurityConfig.java

@@ -148,7 +148,9 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                     "/api/v1/mp/user/marketing/userInfo/*",
                     "/api/v1/mp/user/exchange/category/listTree",
                     "/api/v1/mp/user/marketing/recent",
-                    "/api/v1/mp/open/link/**"
+                    "/api/v1/mp/open/link/**",
+                    "/api/v1/mp/user/mall/ticket/detail/new",
+                    "/api/v1/mp/user/mall/ticket/prize/list/*"
                 ).permitAll()
                 // 除上面外的所有请求全部需要鉴权认证
                 .anyRequest().authenticated()

+ 1 - 1
mp-quartz/src/main/java/com/qs/mp/quartz/task/AsyncConsumeTask.java

@@ -76,7 +76,7 @@ public class AsyncConsumeTask {
             // 盲票支付后相关任务处理
             asyncTaskService.ticketPay(asyncTask);
         } else if (AsyncTaskTypeEnum.TICKET_GENERATE.getValue().equals(asyncTask.getType())) {
-            // 盲票支付后相关任务处理
+            // 盲票创建后相关任务处理
             asyncTaskService.ticketGenerate(asyncTask);
         }
 

+ 31 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/UserDeliverOrderSmsParam.java

@@ -0,0 +1,31 @@
+package com.qs.mp.admin.domain.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.List;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * 用户提货订单短信发送入参类
+ * @author Cup
+ * @date 2022/7/5
+ */
+@ApiModel("用户提货订单短信发送入参类")
+@Data
+public class UserDeliverOrderSmsParam {
+
+    @NotBlank(message = "订单号不能为空")
+    @ApiModelProperty("订单号")
+    private String orderId;
+
+    @NotBlank(message = "手机号不能为空")
+    @ApiModelProperty("手机号")
+    private String mobile;
+
+    @NotNull(message = "商品名称不能为空")
+    @ApiModelProperty("商品名称列表")
+    private List<String> goodsNameList;
+
+}

+ 1 - 1
mp-service/src/main/java/com/qs/mp/channel/domain/param/SaleSiteEditParam.java

@@ -22,6 +22,6 @@ public class SaleSiteEditParam {
 
     @NotBlank(message = "门店名称不能为空")
     @ApiModelProperty("门店名称")
-    private String siteName;
+    private String name;
 
 }

+ 38 - 36
mp-service/src/main/java/com/qs/mp/user/domain/vo/UserDeliverOrderItemVO.java

@@ -14,51 +14,53 @@ import lombok.Data;
  */
 @Data
 @ApiModel("用户提货订单项VO")
-public class UserDeliverOrderItemVO  extends UserDeliverOrderItem {
+public class UserDeliverOrderItemVO extends UserDeliverOrderItem {
 
-	@ApiModelProperty("商品编号")
-	private String goodsCode;
+    @ApiModelProperty("商品编号")
+    private String goodsCode;
 
-	@ApiModelProperty("sku编号")
-	private String skuCode;
+    @ApiModelProperty("sku编号")
+    private String skuCode;
 
-	@ApiModelProperty("金额")
-	private Integer price;
+    @ApiModelProperty("金额")
+    private Integer price;
 
-	@JSONField(serialize = false)
-	@ApiModelProperty("商品价值")
-	private Integer goodsValue;
+    @JSONField(serialize = false)
+    @ApiModelProperty("商品价值")
+    private Integer goodsValue;
 
-	@ApiModelProperty("商品成本")
-	private Integer goodsCost;
+    @ApiModelProperty("商品成本")
+    private Integer goodsCost;
 
-	@JSONField(serialize = false)
-	@ApiModelProperty("sku价值")
-	private Integer skuValue;
+    @JSONField(serialize = false)
+    @ApiModelProperty("sku价值")
+    private Integer skuValue;
 
-	@ApiModelProperty("供应商名称")
-	private String supplierName;
+    @ApiModelProperty("sku成本")
+    private Integer skuCost;
 
-	  // 物流公司名称
-	@ApiModelProperty("物流公司名称")
-	  private  String companyName;
+    @ApiModelProperty("供应商名称")
+    private String supplierName;
 
-	  /**
-	   * 公司主页
-	   */
-	  @ApiModelProperty("公司主页")
-	  private String companyHomeUrl;
+    @ApiModelProperty("物流公司名称")
+    private String companyName;
 
-	  /**
-	   * 物流查询接口
-	   */
-	  @ApiModelProperty("物流查询接口")
-	  private String queryUrl;
+    /**
+     * 公司主页
+     */
+    @ApiModelProperty("公司主页")
+    private String companyHomeUrl;
 
-	public Integer getPrice() {
-		if (this.skuValue == null) {
-			return this.goodsValue;
-		}
-		return skuValue;
-	}
+    /**
+     * 物流查询接口
+     */
+    @ApiModelProperty("物流查询接口")
+    private String queryUrl;
+
+    public Integer getPrice() {
+        if (this.skuValue == null) {
+            return this.goodsValue;
+        }
+        return skuValue;
+    }
 }

+ 12 - 0
mp-service/src/main/java/com/qs/mp/user/service/impl/UserTicketOrderServiceImpl.java

@@ -56,6 +56,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.aop.framework.AopContext;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
@@ -74,6 +75,10 @@ public class UserTicketOrderServiceImpl extends
 
     protected final Logger logger = LoggerFactory.getLogger(this.getClass());
 
+
+    @Value("${bind.channelId}")
+    private Long bindChannelId;
+
     @Autowired
     private ITicketBoxService ticketBoxService;
 
@@ -213,6 +218,13 @@ public class UserTicketOrderServiceImpl extends
                         userTicketOrder.setShareInfo(JSONObject.toJSONString(userShareVO));
                     }
                 }
+            } else {
+                // 野生用户绑定固定的经销商
+                UserShareVO tempUserShareVO = new UserShareVO();
+                tempUserShareVO.setSuid(bindChannelId);
+                tempUserShareVO.setType(UserShareVO.SHARE_TYPE_SITE);
+                userTicketOrder.setChannelId(bindChannelId);
+                userTicketOrder.setShareInfo(JSONObject.toJSONString(tempUserShareVO));
             }
         }
         save(userTicketOrder);

+ 1 - 1
mp-service/src/main/resources/mapper/user/UserDeliverOrderItemMapper.xml

@@ -47,7 +47,7 @@
 
     <select id="selectUserDeliverOrderItemVOListByQueryWrapper"
             resultType="com.qs.mp.user.domain.vo.UserDeliverOrderItemVO">
-        select t1.*, t2.company_name ,t2.company_home_url ,t2.query_url,t3.goods_code,t3.value goodsValue,t3.cost goodsCost,t4.value skuValue,t4.sku_code,t5.name supplierName
+        select t1.*, t2.company_name ,t2.company_home_url ,t2.query_url,t3.goods_code,t3.value goodsValue,t3.cost goodsCost,t4.value skuValue,t4.cost skuCost,t4.sku_code,t5.name supplierName
         from mp_user_deliver_order_item t1
         left join mp_delivery_company t2 on t1.delivery_id = t2.delivery_id
         left join mp_goods t3 on t1.goods_id = t3.goods_id