Procházet zdrojové kódy

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

Dev

See merge request quanshu/mp-server!102
zhong chunping před 3 roky
rodič
revize
77411d3de7

+ 12 - 3
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/GoodsMgrController.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.google.common.html.HtmlEscapers;
 import com.qs.mp.admin.domain.Coupon;
 import com.qs.mp.admin.domain.Goods;
 import com.qs.mp.admin.domain.GoodsCategory;
@@ -29,6 +30,8 @@ import com.qs.mp.common.core.page.TableDataInfo;
 import com.qs.mp.common.enums.ChannelRoleEnum;
 import com.qs.mp.common.enums.CouponStatusEnum;
 import com.qs.mp.common.enums.ErrorCodeEnum;
+import com.qs.mp.common.enums.GoodsStatusEnum;
+import com.qs.mp.common.utils.html.EscapeUtil;
 import com.qs.mp.system.domain.SysUser;
 import com.qs.mp.system.service.ISysUserService;
 import com.qs.mp.utils.SecurityUtils;
@@ -38,10 +41,14 @@ import io.swagger.annotations.ApiOperation;
 import ma.glasnost.orika.MapperFacade;
 
 import java.math.BigDecimal;
+import java.net.URI;
+import java.net.URLDecoder;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.codec.Decoder;
+import org.apache.commons.lang3.StringEscapeUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -156,7 +163,9 @@ public class GoodsMgrController extends BaseApiController {
 		if(titleCount > 0) {
 			return AjaxResult.error("商品名称" + goods.getTitle() + "已存在!");
 		}
-		
+		String description = URLDecoder.decode(goodsParam.getDescription());
+		goods.setDescription(description);
+		goods.setStatus(GoodsStatusEnum.PUT_INIT);
 		// 多SKU
 		List<GoodsSku> skuList = goodsParam.getSkuList();
 		if(goods.getMultiSku() == 1) { // 
@@ -245,9 +254,9 @@ public class GoodsMgrController extends BaseApiController {
 	@PostMapping("/status")
 	public AjaxResult goodsStatus(@RequestBody Goods goods) {
 		String goodsId = (null != goods && StringUtils.isNotBlank(goods.getGoodsId()))?goods.getGoodsId():"";
-		String status = (null != goods && StringUtils.isNotBlank(goods.getStatus()))?goods.getStatus():"";
+		GoodsStatusEnum status = (null != goods && null != goods.getStatus())?goods.getStatus():null;
 		if (StringUtils.isBlank(goodsId)
-				|| StringUtils.isBlank(status)) {
+				|| null == status) {
 			return error(ErrorCodeEnum.ERROR_CODE_1001);
 		}
 		try {

+ 63 - 2
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/TicketBoxMgrController.java

@@ -5,21 +5,28 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qs.mp.admin.domain.Ticket;
 import com.qs.mp.admin.domain.TicketBox;
+import com.qs.mp.admin.domain.excel.TicketExcel;
+import com.qs.mp.admin.domain.param.BathIdParam;
 import com.qs.mp.admin.domain.param.TicketBoxCreateParam;
 import com.qs.mp.admin.service.ITicketBoxService;
+import com.qs.mp.admin.service.ITicketService;
 import com.qs.mp.channel.domain.Channel;
 import com.qs.mp.channel.domain.param.ChannelParam;
 import com.qs.mp.channel.domain.vo.ChannelVO;
 import com.qs.mp.channel.service.IChannelService;
 import com.qs.mp.channel.service.IChannelUserRelService;
+import com.qs.mp.common.annotation.Log;
 import com.qs.mp.common.constant.UserConstants;
 import com.qs.mp.common.core.domain.AjaxResult;
 import com.qs.mp.common.core.page.TableDataInfo;
+import com.qs.mp.common.enums.BusinessType;
 import com.qs.mp.common.enums.ChannelRoleEnum;
 import com.qs.mp.common.enums.ErrorCodeEnum;
 import com.qs.mp.common.enums.TicketTypeEnum;
 import com.qs.mp.common.utils.LogUtil;
+import com.qs.mp.system.domain.SysUser;
 import com.qs.mp.system.service.ISysUserService;
+import com.qs.mp.utils.ExcelUtil;
 import com.qs.mp.web.controller.common.BaseApiController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -30,12 +37,15 @@ import java.util.Map;
 import ma.glasnost.orika.MapperFacade;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Component;
 import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
 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 org.springframework.web.multipart.MultipartFile;
 
 /**
  * @auther zhongcp
@@ -58,8 +68,10 @@ public class TicketBoxMgrController extends BaseApiController {
 	private ISysUserService userService;
 
 	@Autowired
-	private MapperFacade mapperFacade;
+	private ITicketService ticketService;
 
+	@Autowired
+	private MapperFacade mapperFacade;
 
 	/**
 	 * 查询所有盲票组列表
@@ -75,6 +87,7 @@ public class TicketBoxMgrController extends BaseApiController {
 
 	/**
 	 * 新增盲票
+	 * 
 	 * @param
 	 * @return
 	 */
@@ -82,7 +95,7 @@ public class TicketBoxMgrController extends BaseApiController {
 	@PostMapping("/create")
 	public AjaxResult create(@Validated @RequestBody TicketBoxCreateParam param) {
 		if (param.getType() == TicketTypeEnum.OFFLINE) {
-			if (param.getPkgSalePrice() == null || param.getPkgSalePrice() == 0 ) {
+			if (param.getPkgSalePrice() == null || param.getPkgSalePrice() == 0) {
 				return AjaxResult.error("采购单价必须大于0");
 			}
 			if (param.getPkgUnit() == null || param.getPkgUnit() == 0) {
@@ -93,4 +106,52 @@ public class TicketBoxMgrController extends BaseApiController {
 		return rtn ? AjaxResult.success() : AjaxResult.error("创建失败");
 	}
 
+	@Log(title = "盲票导出", businessType = BusinessType.EXPORT)
+	@PostMapping("/export")
+	public AjaxResult exportTicket(@RequestBody BathIdParam ids) {
+		if (null == ids || null == ids.getIds() || ids.getIds().size() == 0) {
+			return AjaxResult.error("请选择需要导出的盲票组");
+		}
+		LambdaQueryWrapper<Ticket> queryWrapper = new LambdaQueryWrapper<Ticket>();
+		queryWrapper.in(Ticket::getBoxId, ids.getIds());
+		List<Ticket> list = ticketService.list(queryWrapper);
+		if (null == list || list.size() == 0) {
+			return AjaxResult.error("选择的盲票组中没有可导出的数据");
+		}
+		List<TicketExcel> excelList = new ArrayList<TicketExcel>();
+		for (Ticket ticket : list) {
+			if (null != ticket && StringUtils.isNotBlank(ticket.getSerialNo())
+					&& StringUtils.isNotBlank(ticket.getDrawNum())
+					&& StringUtils.isNotBlank(ticket.getCipherLuckyNum())) {
+				TicketExcel ticketExcel = new TicketExcel();
+				ticketExcel.setSerialNo(ticket.getSerialNo());
+				ticketExcel.setUrl("http://wwww.baidu.com?no=" + ticket.getSerialNo());
+				ticketExcel.setDrawNum(ticket.getDrawNum());
+				ticketExcel.setCipherLuckyNum(ticket.getCipherLuckyNum());
+				excelList.add(ticketExcel);
+			}
+		}
+		ExcelUtil<TicketExcel> util = new ExcelUtil<TicketExcel>(TicketExcel.class);
+		return util.exportExcel(excelList, "用户数据", true);
+	}
+
+	@Log(title = "盲票导入", businessType = BusinessType.IMPORT)
+	@PostMapping("/importTicket")
+	public AjaxResult importTicket(MultipartFile file, boolean updateSupport) {
+		// 获取文件内的盲票数据列表
+		try {
+			ExcelUtil<TicketExcel> util = new ExcelUtil<TicketExcel>(TicketExcel.class);
+			List<TicketExcel> ticketExcelList = util.importExcel(file.getInputStream());
+			if(null == ticketExcelList || ticketExcelList.size() == 0) {
+				return AjaxResult.error("导入失败,选择的导入文件中没有有效的数据");
+			}
+			// 数据处理 TODO
+		} catch (Exception e) {
+			return AjaxResult.error("导入失败,请联系管理员");
+		}
+		
+        String message = "导入成功";
+		return AjaxResult.success(message);
+	}
+
 }

+ 3 - 1
mp-service/src/main/java/com/qs/mp/admin/domain/Goods.java

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.qs.mp.common.enums.GoodsStatusEnum;
+
 import java.io.Serializable;
 import java.util.Date;
 import lombok.Data;
@@ -106,7 +108,7 @@ public class Goods implements Serializable {
    */
   @TableField("status")
   @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
-  private String status;
+  private GoodsStatusEnum status;
 
   /**
    * 逻辑删除标识

+ 40 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/excel/TicketExcel.java

@@ -0,0 +1,40 @@
+package com.qs.mp.admin.domain.excel;
+
+import com.qs.mp.common.annotation.Excel;
+
+import lombok.Data;
+
+/**
+ * @author zhongcp
+ * @Date 2022/3/7
+ */
+@Data
+public class TicketExcel {
+
+  /**
+   * 序列号
+   */
+  @Excel(name = "SERIAL_NO")
+  private String serialNo;
+  
+
+  /**
+   * URL
+   */
+  @Excel(name = "URL")
+  private String url;
+  
+  
+  /**
+   * 抽奖数字描述(json格式,包含数字、奖项)
+   */
+  @Excel(name = "DRAW_NUM")
+  private String drawNum;
+
+  /**
+   * 加密幸运数字
+   */
+  @Excel(name = "LUCKY_NUM")
+  private String cipherLuckyNum;
+
+}

+ 20 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/BathIdParam.java

@@ -0,0 +1,20 @@
+package com.qs.mp.admin.domain.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+import lombok.Data;
+
+/**
+ * @describe 商铺表实体类
+ * @auther ygp
+ * @create 2021-09-03 22:45:37
+ */
+@Data
+@ApiModel("IDBO")
+public class BathIdParam {
+
+	@ApiModelProperty(value = "IDS")   
+	private List<String> ids;
+}