package com.szwl.controller; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.szwl.feign.bean.PayFeign; import com.szwl.model.bo.JoinpayConstant; import com.szwl.model.bo.JsonMessage; import com.szwl.model.bo.R; import com.szwl.model.bo.ResponseModel; import com.szwl.model.dto.PromoCodeTarget; import com.szwl.model.entity.*; import com.szwl.service.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang.StringUtils; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.*; import static com.szwl.constant.ResponseCodesEnum.A0001; /** *

* 优惠码列表 前端控制器 *

* * @author wuhs * @since 2022-06-17 */ @Api(value = "/tPromoCode", tags = {"优惠码"}) @RestController @RequestMapping("/tPromoCode") public class TPromoCodeController { @Autowired TEquipmentService tEquipmentService; @Autowired TPromoCodeService promoCodeService; @Autowired TPriceService priceService; @Autowired TAdminService adminService; @Autowired TOrderService orderService; @Autowired TJoinpayMchService joinpayMchService; @Autowired PayFeign payFeign; @ApiOperation(value = "获取优惠码") @GetMapping("/getTPromoCode") public ResponseModel> getTPromoCode(@RequestParam String code) { LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.eq(TPromoCode::getCode,code); Page page = new Page<>(0, 10, true); IPage iPage = promoCodeService.page(page, query); return R.ok(iPage); } @ApiOperation(value = "修改优惠码") @GetMapping("/updatePromoCode") public void updatePromoCode(@RequestParam(value = "id")String id, @RequestParam(value = "type")String type) { TPromoCode promoCode = promoCodeService.getById(id); promoCode.setIsUse(type); promoCodeService.updateById(promoCode); } @ApiOperation(value = "生成0折优惠码") @GetMapping("/addPromoCode") public void addPromoCode(@RequestParam(value = "adminId")String adminId,@RequestParam(value = "lastUseDate")Date lastUseDate,@RequestParam(value = "number")String number) { int num = Integer.parseInt(number); List codes = new ArrayList<>(); for (int i = 0; i < num; i++) { String code = orderService.initSn(Long.valueOf(adminId)); StringBuffer str = new StringBuffer(); str.append(code.substring(0, 6)); codes.add(str.toString()); } TAdmin admin = adminService.getById(adminId); for (String code : codes) { TPromoCode promoCode = new TPromoCode(); promoCode.setCreateDate(new Date()); promoCode.setModifyDate(new Date()); promoCode.setCode(Long.parseLong(code)); promoCode.setAdminId(adminId); promoCode.setIsUse("0"); promoCode.setDiscount(0f); promoCode.setLastUseDate(lastUseDate); promoCode.setCreateDate(new Date()); promoCode.setUserName(admin.getUsername()); promoCodeService.save(promoCode); } } @ApiOperation(value = "添加优惠码") @GetMapping("/add") public ResponseModel add(Long adminId,int number,Float discount,Float month,String type,String frpCode) { if(discount==null||month==null||adminId==null||StringUtils.isEmpty(type)){ return R.fail(A0001); } TAdmin admin = adminService.getById(adminId); if(String.valueOf(admin.getId()).equals("1")){ List codes =new ArrayList<>(); for(int i=0;i query = Wrappers.lambdaQuery(); query.eq(TEquipment::getAdminId,admin.getId()); List list = tEquipmentService.list(query); TEquipment equipment = list.get(0); if(list.size()==0){ // "要有机器才能购买优惠码"; return R.fail("没有机器"); } //0折优惠码需要支付 if(type.equals("0")&&discount==0){ if(admin.getPromoCodeOpen()==null||admin.getPromoCodeOpen().equals("1")){ Long equipmentId = equipment.getId(); Double money = null; LambdaQueryWrapper query1 = Wrappers.lambdaQuery(); query1.eq(TPrice::getName,"优惠码"); List prices = priceService.list(query1); for(TPrice price:prices){ if(price.getName().equals("优惠码")){ money = price.getPrice(); } } String sn = orderService.initSn(equipmentId); String orderNo = sn; String productName = "优惠码"; BigDecimal price = BigDecimal.valueOf(money*number); BigDecimal cutPrice = price.multiply(new BigDecimal(100)).divide(new BigDecimal(100)); BigDecimal amount = cutPrice; String productDesc = ""; String commonParameter = ""; String returnUrl = null; String notifyUrl = JoinpayConstant.Notify_Url_PromoCode; String isShowPic = "1"; String openId = null; String authCode = null; String appid = null; String transactionModel = null; String tradeMerchantNo = null; String buyerId = null; String isAlt = "0"; String altType = null; String altUrl = null; BigDecimal marketingAmount = null; // frpCode = "WEIXIN_NATIVE"; TOrder order1 = new TOrder(); order1.setSn(sn); order1.setType(0); order1.setAdminId(admin.getId()); order1.setProductName(productName); order1.setPrice(price); order1.setEquipmentId(equipmentId); order1.setClientId(equipment.getClientId()); order1.setStatus(0); order1.setFrpCode(frpCode); // order1.setRefundTrxNo(String.valueOf(month)); order1.setCreateDate(new Date()); order1.setModifyDate(new Date()); payFeign.addOrder(order1); JSONArray altInfo = new JSONArray(); String result = null; try { result = joinpayMchService.uniPay( orderNo, amount, productName, productDesc, commonParameter, returnUrl, notifyUrl, frpCode, isShowPic, openId, authCode, appid, transactionModel, tradeMerchantNo, buyerId, isAlt, altType, altInfo, altUrl, marketingAmount ); } catch (Exception e) { e.printStackTrace(); return R.fail("申请支付失败"); } JSONObject resultJson = JSONObject.parseObject(result); // 汇聚支付支付申请返回支付二维码图片 String rd_Pic = resultJson.getString("rd_Pic"); if (resultJson == null || StringUtils.isBlank(rd_Pic)) { return R.fail("找不到支付图片"); } JSONObject kindData = new JSONObject(); kindData.put("sn", sn); kindData.put("price", price); kindData.put("image", rd_Pic); return R.ok(kindData); } } Long equipmentId = equipment.getId(); List codes =new ArrayList<>(); for(int i=0;i> pagePromoCode(String adminId , String code, String isUse, Date useStratDate,Date useEndDate,Date createStratDate,Date createEndDate, long current, long size ) { LambdaQueryWrapper query = Wrappers.lambdaQuery(); if(StringUtils.isNotEmpty(adminId)){ TAdmin admin = adminService.getById(adminId); if(admin.getType()==0||admin.getType()==1){ }else { query.eq(TPromoCode::getAdminId,adminId); } }else { return R.fail(A0001); } if(StringUtils.isNotEmpty(code)){ query.eq(TPromoCode::getCode,code); } if(StringUtils.isNotEmpty(isUse)){ query.like(TPromoCode::getIsUse,isUse); } if(useStratDate!=null&&useEndDate!=null){ query.gt(TPromoCode::getUseDate,useStratDate); query.lt(TPromoCode::getUseDate,useEndDate); } if(createStratDate!=null&&createEndDate!=null){ query.gt(TPromoCode::getCreateDate,createStratDate); query.lt(TPromoCode::getCreateDate,createEndDate); } Page page = new Page<>(current, size, true); IPage iPage = promoCodeService.page(page, query); return R.ok(iPage); } @ApiOperation(value = "导出优惠码列表") @GetMapping("/export") public Object export(HttpServletResponse response, String adminId , String code, String isUse, Date useStratDate, Date useEndDate, Date createStratDate, Date createEndDate, long current, long size ) { LambdaQueryWrapper query = Wrappers.lambdaQuery(); if(StringUtils.isNotEmpty(adminId)){ TAdmin admin = adminService.getById(adminId); if(admin.getType()==0||admin.getType()==1){ }else { query.eq(TPromoCode::getAdminId,adminId); } }else { return R.fail(A0001); } if(StringUtils.isNotEmpty(code)){ query.eq(TPromoCode::getCode,code); } if(StringUtils.isNotEmpty(isUse)){ query.like(TPromoCode::getIsUse,isUse); } if(useStratDate!=null&&useEndDate!=null){ query.gt(TPromoCode::getUseDate,useStratDate); query.lt(TPromoCode::getUseDate,useEndDate); } if(createStratDate!=null&&createEndDate!=null){ query.gt(TPromoCode::getCreateDate,createStratDate); query.lt(TPromoCode::getCreateDate,createEndDate); } Page page = new Page<>(current, size, true); IPage iPage = promoCodeService.page(page, query); List list = iPage.getRecords(); List promoCodeTargets = promoCodeService.findById(list); ExportParams exportParams = new ExportParams("优惠码记录", "sheet1"); Workbook workbook = ExcelExportUtil.exportExcel(exportParams, PromoCodeTarget.class, promoCodeTargets); if (workbook != null) { OutputStream os = null; try { os = response.getOutputStream(); SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("订单记录数据导出" + format.format(new Date()) + ".xls", "UTF-8")); workbook.write(os); return JsonMessage.success("导出成功"); } catch (Exception e) { e.printStackTrace(); return JsonMessage.success("导出错误"); } finally { try { os.close(); workbook.close(); } catch (IOException e) { e.printStackTrace(); } } } return JsonMessage.success("导出成功"); } }