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("导出成功");
}
}