Bläddra i källkod

车票兑换码

zoujiajian 1 år sedan
förälder
incheckning
87ecbd53a3

+ 4 - 0
netflix-dao/src/main/java/com/cyksj/mapper/GoodsDonSkuMapper.java

@@ -27,4 +27,8 @@ public interface GoodsDonSkuMapper  extends BaseMapper<GoodsDonSku> {
 	GoodsDonSku checkAndReturnMinPriceUserOwnsSku(@Param("goodsId") Long goodsId, @Param("dsUserId") Long dsUserId);
 
 	OriSkuDto selectRenewOriSku(Long skuId);
+
+	String selectExchangeTitle(@Param("ids") List<Long> ids);
+
+	String selectGIdsBySkuIds(@Param("ids") List<Long> ids);
 }

+ 4 - 4
netflix-dao/src/main/java/com/cyksj/model/entity/ExchangeCode.java

@@ -17,14 +17,14 @@ public class ExchangeCode extends BaseEntity{
 	private String code;
 
 	/**
-	 * 平台id
+	 * 平台ids
 	 */
-	private Long goodsId;
+	private String goodsIds;
 
 	/**
-	 * 规格id
+	 * 规格ids
 	 */
-	private Long skuId;
+	private String skuIds;
 
 	/**
 	 * 使用状态

+ 6 - 13
netflix-dao/src/main/java/com/cyksj/model/excel/ExcelExchangeCodeData.java

@@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
 import lombok.Getter;
 import lombok.Setter;
@@ -18,9 +19,8 @@ import java.util.Date;
  */
 @Getter
 @Setter
-@SearchBean(tables = "exchange_code ec left join user u on u.id = ec.user_id" +
-		" left join goods_don gd on ec.goods_id = gd.id" +
-		" left join goods_don_sku gdk on gdk.id = ec.sku_id")
+@SearchBean(tables = "exchange_code ec left join user u on u.id = ec.user_id",
+		where = "1=1 :condition:")
 public class ExcelExchangeCodeData {
 
 	/**
@@ -39,19 +39,12 @@ public class ExcelExchangeCodeData {
 	private Long goodsId;
 
 	/**
-	 * 平台名称
+	 * 平台规格
 	 */
-	@ExcelProperty("平台")
-	@DbField("gd.title")
+	@ExcelProperty("平台规格")
+	@DbIgnore
 	private String title;
 
-	/**
-	 * 规格名称,金额
-	 */
-	@ExcelProperty("规格名称")
-	@DbField("concat(gdk.spec_val,'',cast(gdk.price/100 as decimal(10,2)))")
-	private String specVal;
-
 	/**
 	 * 使用状态str
 	 */

+ 4 - 6
netflix-dao/src/main/java/com/cyksj/model/request/ExchangeCodeReq.java

@@ -12,15 +12,13 @@ import lombok.Setter;
 @Getter
 @Setter
 public class ExchangeCodeReq {
-	/**
-	 * 平台id
-	 */
-	private Long goodsId;
+
+	private Long goodsIds;
 
 	/**
-	 * 规格id
+	 * 规格ids
 	 */
-	private Long skuId;
+	private String skuIds;
 
 	/**
 	 * 数量

+ 13 - 17
netflix-dao/src/main/java/com/cyksj/model/views/ExchangeCodeView.java

@@ -1,6 +1,7 @@
 package com.cyksj.model.views;
 
 import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
 import lombok.Getter;
 import lombok.Setter;
@@ -15,10 +16,8 @@ import java.util.Date;
  */
 @Getter
 @Setter
-@SearchBean(tables = "exchange_code ec left join user u on u.id = ec.user_id" +
-		" left join goods_don gd on ec.goods_id = gd.id" +
-		" left join goods_don_sku gdk on gdk.id = ec.sku_id",
-where = "ec.type = 0")
+@SearchBean(tables = "exchange_code ec left join user u on u.id = ec.user_id",
+		where = "ec.type = 0 :condition:")
 public class ExchangeCodeView {
 	@DbField("ec.id")
 	private Long id;
@@ -26,24 +25,15 @@ public class ExchangeCodeView {
 	@DbField("ec.code")
 	private String code;
 
-	@DbField("ec.goods_id")
-	private Long goodsId;
-
-	@DbField("ec.sku_id")
-	private Long skuId;
+	@DbField("ec.sku_ids")
+	private String skuIds;
 
 	/**
-	 * 平台名称
+	 * 平台规格
 	 */
-	@DbField("gd.title")
+	@DbIgnore
 	private String title;
 
-	/**
-	 * 规格名称,金额
-	 */
-	@DbField("concat(gdk.spec_val,'',cast(gdk.price/100 as decimal(10,2)))")
-	private String specVal;
-
 	/**
 	 * 使用状态
 	 */
@@ -71,6 +61,12 @@ public class ExchangeCodeView {
 	@DbField("u.nickname")
 	private String nickName;
 
+	/**
+	 * 兑换形式 1兑换码 2兑换链接
+	 */
+	@DbField("ec.code_type")
+	private Integer codeType;
+
 	/**
 	 * 生成日期
 	 */

+ 16 - 0
netflix-dao/src/main/resources/mapper/GoodsDonSkuMapper.xml

@@ -55,4 +55,20 @@
         where id = #{skuId}
         limit 1
     </select>
+
+    <select id="selectExchangeTitle" resultType="java.lang.String">
+        select GROUP_CONCAT(g.title, ifnull(sku.spec_val,''),cast(gdk.price/100 as decimal(10,2))) from goods_don_sku sku inner join goods_don g on g.id = sku.goods_id
+        where sku.id in
+        <foreach collection="ids" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </select>
+
+    <select id="selectGIdsBySkuIds" resultType="java.lang.String">
+        select distinct sku.goods_id from goods_don_sku sku
+        where sku.id in
+        <foreach collection="ids" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </select>
 </mapper>

+ 2 - 2
netflix-service/src/main/java/com/cyksj/service/exchange/ExchangeCodeService.java

@@ -22,12 +22,12 @@ public interface ExchangeCodeService extends IService<ExchangeCode> {
 	/**
 	 * 生成兑换码
 	 */
-	List<ExcelExchangeCodeData> createExchangeCode(ExchangeCodeReq exchangeCodeReq);
+	List<ExcelExchangeCodeData> createExchangeCode(ExchangeCodeReq exchangeCodeReq) throws Exception;
 
 	/**
 	 * 兑换码兑换
 	 */
-	Result<String> getTicketByExchangeCode(ExchangeCodeTicket exchangeCodeTicket, Long userId);
+	Result<String> getTicketByExchangeCode(ExchangeCodeTicket exchangeCodeTicket, Long userId) throws Exception;
 
 	/**
 	 * 获取兑换码

+ 25 - 26
netflix-service/src/main/java/com/cyksj/service/exchange/impl/ExchangeCodeServiceImpl.java

@@ -93,32 +93,30 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 
 	@Override
 	@Transactional(rollbackFor = Throwable.class)
-	public List<ExcelExchangeCodeData> createExchangeCode(ExchangeCodeReq exchangeCodeReq) {
-		GoodsDon goodsDon = goodsDonMapper.selectById(exchangeCodeReq.getGoodsId());
-		if (goodsDon == null) {
-			throw BusinessRuntimeException.getInstance("所选平台已被删除");
-		}
-		if (Constant.realGoodsType.contains(goodsDon.getType())) {
-			throw BusinessRuntimeException.getInstance("该类商品不支持生成兑换码");
+	public List<ExcelExchangeCodeData> createExchangeCode(ExchangeCodeReq exchangeCodeReq) throws Exception {
+		String skuIds = exchangeCodeReq.getSkuIds();
+		if (StrUtil.isEmpty(skuIds)) {
+			throw BusinessRuntimeException.getInstance("请选择对应规格");
 		}
-		GoodsDonSku goodsDonSku = goodsDonSkuMapper.selectById(exchangeCodeReq.getSkuId());
-		if (goodsDonSku == null) {
+		List<Long> skuList = Jsons.parseList(skuIds, Long.class);
+		Integer skuCount = goodsDonSkuMapper.selectCount(Wrappers.lambdaQuery(GoodsDonSku.class)
+				.in(GoodsDonSku::getId, skuList));
+		if (skuCount != skuList.size()) {
 			throw BusinessRuntimeException.getInstance("所选规格已被删除");
 		}
-		if (!goodsDonSku.getGoodsId().equals(exchangeCodeReq.getGoodsId())) {
-			throw BusinessRuntimeException.getInstance("规格与平台不匹配");
-		}
+		String goodsIds = goodsDonSkuMapper.selectGIdsBySkuIds(skuList);
 		List<ExcelExchangeCodeData> data = new ArrayList<>(exchangeCodeReq.getNumber());
+		GoodsDonSku sku = goodsDonSkuMapper.selectById(skuList.get(0));
 		for (int i = 0; i < exchangeCodeReq.getNumber(); i++) {
 			StringBuilder sb = new StringBuilder(32);
-			sb.append(goodsDon.getSecondType() == 1 ? "YQ" : "FY");
-			sb.append(getFillByGoodsId(exchangeCodeReq.getGoodsId()));
-			sb.append(getFillByMonth(exchangeCodeReq.getSkuId()));
+			sb.append("YH");
+			sb.append(getFillByGoodsId(sku.getGoodsId()));
+			sb.append(getFillByMonth(sku.getMonths()));
 			//随即补充12位随即数,组成20位兑换码
 			StringUtil.getRandomStr(sb, 12);
 			ExchangeCode exchangeCode = new ExchangeCode();
-			exchangeCode.setGoodsId(exchangeCodeReq.getGoodsId());
-			exchangeCode.setSkuId(exchangeCodeReq.getSkuId());
+			exchangeCode.setSkuIds(exchangeCodeReq.getSkuIds());
+			exchangeCode.setGoodsIds(goodsIds);
 			exchangeCode.setCode(sb.toString());
 			exchangeCode.setUseStatus(false);
 			exchangeCode.setType(exchangeCodeReq.getType());
@@ -126,10 +124,8 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 			exchangeCodeMapper.insert(exchangeCode);
 			ExcelExchangeCodeData excelExchangeCodeData = new ExcelExchangeCodeData();
 			BeanUtils.copyProperties(exchangeCode, excelExchangeCodeData);
-			excelExchangeCodeData.setTitle(goodsDon.getTitle());
-			String specVal = goodsDonSku.getSpecVal();
-			BigDecimal price = goodsDonSku.getPrice();
-			excelExchangeCodeData.setSpecVal(String.format("%s%s", specVal, price.divide(BigDecimal.valueOf(100))));
+			String title = goodsDonSkuMapper.selectExchangeTitle(skuList);
+			excelExchangeCodeData.setTitle(title);
 			excelExchangeCodeData.setUseStatusStr(exchangeCode.getUseStatus() ? "已使用" : "未使用");
 			data.add(excelExchangeCodeData);
 		}
@@ -139,7 +135,7 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 	@Override
 	@Transactional(rollbackFor = Throwable.class)
 	@NoSubmit
-	public Result<String> getTicketByExchangeCode(ExchangeCodeTicket exchangeCodeTicket, Long userId) {
+	public Result<String> getTicketByExchangeCode(ExchangeCodeTicket exchangeCodeTicket, Long userId) throws Exception {
 		if (StrUtil.isEmpty(exchangeCodeTicket.getCode())) {
 			throw BusinessRuntimeException.getInstance("兑换码有误,请使用正确的兑换码");
 		}
@@ -233,8 +229,11 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 		if (orderDon != null && orderDon.getStatus() == OrderDon.Status.refund) {
 			throw BusinessRuntimeException.getInstance("您的订单已退款,无法使用该兑换码");
 		}
+		List<Long> skuIds = Jsons.parseList(exchangeCode.getSkuIds(), Long.class);
+		skuIds.forEach(skuId -> {
+			getGroupTripsTicket(yhsId, goodsDonSkuMapper.selectById(skuId), userId, orderDon, OrderDon.Type.EX_CODE, exchangeCodeTicket.getCode());
+		});
 		//生成车票订单
-		getGroupTripsTicket(yhsId, goodsDonSkuMapper.selectById(exchangeCode.getSkuId()), userId, orderDon, OrderDon.Type.EX_CODE, exchangeCodeTicket.getCode());
 		log.info("用户:{}通过兑换码:{}兑换成功", userId, exchangeCodeTicket.getCode());
 		if (exchangeCode.getType() == 1) {
 			luckyDrawRecordMapper.updateExCodeStatus(userId, exchangeCode.getCode());
@@ -246,8 +245,8 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 	public String getExCode(Long goodsId, Long skuId, Integer type) {
 		ExchangeCodeReq exchangeCodeReq = new ExchangeCodeReq();
 		exchangeCodeReq.setNumber(1);
-		exchangeCodeReq.setGoodsId(goodsId);
-		exchangeCodeReq.setSkuId(skuId);
+//		exchangeCodeReq.setGoodsId(goodsId);
+		exchangeCodeReq.setSkuIds(List.of(skuId).toString());
 		if (type != null) {
 			exchangeCodeReq.setType(type);
 		}
@@ -280,7 +279,7 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 	/**
 	 * 根据月份长度获取填充的字符串
 	 */
-	private String getFillByMonth(Long skuMonth) {
+	private String getFillByMonth(Integer skuMonth) {
 		String goodsIdStr = String.valueOf(skuMonth);
 		if (goodsIdStr.length() == 1) {
 			return String.format("%s%s%s", 0, 0, skuMonth);

+ 7 - 4
netflix-web/src/main/java/com/cyksj/web/controller/external/ExternalController.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Assert;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.common.util.Jsons;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.GoodsDonMapper;
@@ -30,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 /**
  * 项目名: yhlxj
@@ -77,7 +79,7 @@ public class ExternalController {
 	 */
 	@PutMapping("/refund/{id}")
 	@Transactional(rollbackFor = Throwable.class)
-	public Result<String> refund(@PathVariable Long id) {
+	public Result<String> refund(@PathVariable Long id) throws Exception {
 		ExchangeCode exchangeCode = exchangeCodeMapper.selectById(id);
 		Assert.notNull(exchangeCode, "系统异常");
 		if (!exchangeCode.getUseStatus()) {
@@ -89,6 +91,8 @@ public class ExternalController {
 		if (StrUtil.equals(exchangeCode.getOrderStatus(), "refund")) {
 			throw BusinessRuntimeException.getInstance("兑换码已退");
 		}
+		String skuIds = exchangeCode.getSkuIds();
+		List<Long> skuIdList = Jsons.parseList(skuIds, Long.class);
 		OrderDon orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
 				.eq(OrderDon::getExCode, exchangeCode.getCode())
 				.notIn(OrderDon::getStatus, Constant.noOrderAllStatus)
@@ -97,7 +101,7 @@ public class ExternalController {
 			orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
 					.eq(OrderDon::getUserId, exchangeCode.getUserId())
 					.eq(OrderDon::getType, OrderDon.Type.EX_CODE)
-					.eq(OrderDon::getSkuId, exchangeCode.getSkuId())
+					.eq(OrderDon::getSkuId, skuIdList.get(0))
 					.notIn(OrderDon::getStatus, Constant.noOrderAllStatus)
 					.last("limit 1"));
 		}
@@ -123,8 +127,7 @@ public class ExternalController {
 				//重新生成兑换码
 				ExchangeCodeReq exchangeCodeReq = new ExchangeCodeReq();
 				exchangeCodeReq.setNumber(1);
-				exchangeCodeReq.setGoodsId(orderDon.getGoodsId());
-				exchangeCodeReq.setSkuId(orderDon.getSkuId());
+				exchangeCodeReq.setSkuIds(List.of(orderDon.getSkuId()).toString());
 				exchangeCodeService.createExchangeCode(exchangeCodeReq);
 			} catch (Exception e) {
 			}

+ 46 - 7
netflix-web/src/main/java/com/cyksj/web/controller/manage/exchange/ExchangeCodeController.java

@@ -3,12 +3,16 @@ package com.cyksj.web.controller.manage.exchange;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.excel.support.ExcelTypeEnum;
 import com.cyksj.common.annotation.Log;
 import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.common.util.Jsons;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.BusinessType;
 import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.GoodsDonMapper;
+import com.cyksj.mapper.GoodsDonSkuMapper;
 import com.cyksj.mapper.manage.cms.CmsUserMapper;
 import com.cyksj.model.entity.CmsUser;
 import com.cyksj.model.excel.ExcelExchangeCodeData;
@@ -18,6 +22,7 @@ import com.cyksj.service.exchange.ExchangeCodeService;
 import com.cyksj.web.util.EasyExcelUtils;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapBuilder;
 import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -47,14 +52,18 @@ public class ExchangeCodeController {
 
 	private final CmsUserMapper cmsUserMapper;
 
+	private final GoodsDonSkuMapper skuMapper;
+
+	private final GoodsDonMapper goodsDonMapper;
+
 	/**
 	 * 生成兑换码 并导出
 	 */
 	@GetMapping("/createAndExport")
 	@SaCheckPermission("exchangeCode:add")
 	@Log(module = "兑换码/生成兑换码", businessType = BusinessType.POST, isSaveRequestData = true)
-	public void createAndExportCode(ExchangeCodeReq exchangeCodeReq, HttpServletResponse response) {
-		if (ObjectUtil.hasEmpty(exchangeCodeReq.getGoodsId(), exchangeCodeReq.getSkuId(), exchangeCodeReq.getNumber())) {
+	public void createAndExportCode(ExchangeCodeReq exchangeCodeReq, HttpServletResponse response) throws Exception {
+		if (ObjectUtil.hasEmpty(exchangeCodeReq.getSkuIds(), exchangeCodeReq.getNumber())) {
 			throw BusinessRuntimeException.getInstance("必填项为空");
 		}
 		long adminId = StpUtil.getLoginIdAsLong();
@@ -69,8 +78,27 @@ public class ExchangeCodeController {
 	 */
 	@GetMapping("/get")
 	@SaCheckPermission("exchangeCode:view")
-	public Result<SearchResult<ExchangeCodeView>> getExchangeCodeView() {
-		return GatewayResponse.SUCCESS.newBuilder().toResult(beanSearcher.search(ExchangeCodeView.class, MapUtils.flat(request.getParameterMap())));
+	public Result<SearchResult<ExchangeCodeView>> getExchangeCodeView(Long goodsId, Long skuId) {
+		String condition = StrUtil.EMPTY;
+		if (goodsId != null) {
+			condition = String.format(" and JSON_CONTAINS(goods_ids,'%s')", goodsId);
+		}
+		if (skuId != null) {
+			condition += String.format(" and JSON_CONTAINS(sku_ids,'%s')", skuId);
+		}
+		MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
+		if (StrUtil.isNotEmpty(condition)) {
+			builder.put("condition", condition);
+		}
+		SearchResult<ExchangeCodeView> search = beanSearcher.search(ExchangeCodeView.class, builder.build());
+		search.getDataList().forEach(data -> {
+			try {
+				List<Long> skuIds = Jsons.parseList(data.getSkuIds(), Long.class);
+				data.setTitle(skuMapper.selectExchangeTitle(skuIds));
+			} catch (Exception e) {
+			}
+		});
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 	}
 
 	/**
@@ -78,8 +106,19 @@ public class ExchangeCodeController {
 	 */
 	@GetMapping("/export")
 	@SaCheckPermission("exchangeCode:export")
-	public void exportExchangeCode(HttpServletResponse response) {
-		List<ExcelExchangeCodeData> data = beanSearcher.searchAll(ExcelExchangeCodeData.class, MapUtils.flat(request.getParameterMap()));
-		EasyExcelUtils.createExcelStreamMutilByEasyExcel(response, ExcelExchangeCodeData.class, data, "银河兑换码","银河兑换码", ExcelTypeEnum.XLSX, null);
+	public void exportExchangeCode(HttpServletResponse response, Long goodsId, Long skuId) {
+		String condition = StrUtil.EMPTY;
+		if (goodsId != null) {
+			condition = String.format(" and JSON_CONTAINS(goods_ids,'%s')", goodsId);
+		}
+		if (skuId != null) {
+			condition += String.format(" and JSON_CONTAINS(sku_ids,'%s')", skuId);
+		}
+		MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
+		if (StrUtil.isNotEmpty(condition)) {
+			builder.put("condition", condition);
+		}
+		List<ExcelExchangeCodeData> data = beanSearcher.searchAll(ExcelExchangeCodeData.class, builder.build());
+		EasyExcelUtils.createExcelStreamMutilByEasyExcel(response, ExcelExchangeCodeData.class, data, "银河兑换码", "银河兑换码", ExcelTypeEnum.XLSX, null);
 	}
 }

+ 1 - 1
netflix-web/src/main/java/com/cyksj/web/controller/user/UserController.java

@@ -115,7 +115,7 @@ public class UserController {
      * 兑换码兑换车票
      */
     @PostMapping("/get/ticket")
-    public Result<String> getTicketByExchangeCode(@RequestBody ExchangeCodeTicket exchangeCodeTicket) {
+    public Result<String> getTicketByExchangeCode(@RequestBody ExchangeCodeTicket exchangeCodeTicket) throws Exception {
         Long userId = StpUserUtil.getLoginIdAsLong();
         return exchangeCodeService.getTicketByExchangeCode(exchangeCodeTicket, userId);
     }