package com.dsh.guns.modular.system.controller.code;
|
|
import cn.hutool.core.collection.CollUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.dsh.course.feignClient.account.AppUserClient;
|
import com.dsh.course.feignClient.account.model.TAppUser;
|
import com.dsh.course.feignClient.activity.PayHuiminClient;
|
import com.dsh.course.feignClient.activity.model.HuiminPayQuery;
|
import com.dsh.course.feignClient.activity.model.TPayHuimin;
|
import com.dsh.guns.core.base.controller.BaseController;
|
import com.dsh.guns.core.common.constant.factory.PageFactory;
|
import com.dsh.guns.modular.system.model.AppUserByNameAndPhoneDTO;
|
import com.dsh.guns.modular.system.model.SalesDetailVO;
|
import com.dsh.guns.modular.system.model.TOperator;
|
import com.dsh.guns.modular.system.model.TStore;
|
import com.dsh.guns.modular.system.service.IStoreService;
|
import com.dsh.guns.modular.system.service.TOperatorService;
|
import com.dsh.guns.modular.system.util.DateUtil;
|
import com.dsh.guns.modular.system.util.ExcelUtil;
|
import com.dsh.guns.modular.system.util.ResultUtil;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.ui.Model;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.io.OutputStream;
|
import java.math.BigDecimal;
|
import java.util.Collections;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Objects;
|
import java.util.stream.Collectors;
|
|
/**
|
* 惠民卡控制器
|
*
|
* @author fengshuonan
|
* @Date 2025-03-29 17:41:48
|
*/
|
@Controller
|
@RequestMapping("/tPayHuimin")
|
public class TPayHuiminController extends BaseController {
|
|
private String PREFIX = "/system/tPayHuimin/";
|
|
@Autowired
|
private PayHuiminClient payHuiminClient;
|
@Autowired
|
private TOperatorService operatorService;
|
@Autowired
|
private IStoreService storeService;
|
@Autowired
|
private AppUserClient appUserClient;
|
|
|
/**
|
* 跳转到惠民卡首页
|
*/
|
@RequestMapping("")
|
public String index(Model model) {
|
//查询运营商列表
|
model.addAttribute("operatorList", operatorService.list(new QueryWrapper<TOperator>().eq("state", 1)));
|
model.addAttribute("storeList", storeService.list(new QueryWrapper<TStore>().eq("state", 1)));
|
return PREFIX + "tPayHuimin.html";
|
}
|
|
/**
|
* 跳转到添加惠民卡
|
*/
|
@RequestMapping("/tPayHuimin_add")
|
public String tPayHuiminAdd() {
|
return PREFIX + "tPayHuimin_add.html";
|
}
|
|
/**
|
* 获取惠民卡列表
|
*/
|
@RequestMapping(value = "/list")
|
@ResponseBody
|
public Object list(HuiminPayQuery query) {
|
Page<TPayHuimin> tPayHuiminPage = new PageFactory<TPayHuimin>().defaultPage();
|
query.setCurrent(tPayHuiminPage.getCurrent());
|
query.setSize(tPayHuiminPage.getSize());
|
List<Integer> appUserIds = Collections.emptyList();
|
if (StringUtils.isNotBlank(query.getUserName()) || StringUtils.isNotBlank(query.getPhone())){
|
AppUserByNameAndPhoneDTO appUserByNameAndPhoneDTO = new AppUserByNameAndPhoneDTO();
|
appUserByNameAndPhoneDTO.setUserName(query.getUserName());
|
appUserByNameAndPhoneDTO.setPhone(query.getPhone());
|
List<TAppUser> tAppUsers = appUserClient.queryAPPUserByNameAndPhone(appUserByNameAndPhoneDTO);
|
appUserIds = tAppUsers.stream()
|
.map(TAppUser::getId)
|
.collect(Collectors.toList());
|
if (CollUtil.isEmpty(appUserIds)){
|
return new Page<>();
|
}
|
}
|
query.setAppUserIds(appUserIds);
|
Page<SalesDetailVO> salesDetailVOPage = payHuiminClient.selectPage(query);
|
List<SalesDetailVO> records = salesDetailVOPage.getRecords();
|
if (CollUtil.isNotEmpty(records)) {
|
List<Integer> operatorIdList = records.stream()
|
.map(SalesDetailVO::getOperatorId)
|
.collect(Collectors.toList());
|
List<Integer> storeIdList = records.stream()
|
.map(SalesDetailVO::getStoreId)
|
.collect(Collectors.toList());
|
Map<Integer, String> operatorMap = operatorService.listByIds(operatorIdList).stream()
|
.collect(Collectors.toMap(TOperator::getId, TOperator::getName));
|
Map<Integer, String> storeMap = storeService.listByIds(storeIdList).stream()
|
.collect(Collectors.toMap(TStore::getId, TStore::getName));
|
records.forEach(item->{
|
item.setOperatorName(operatorMap.getOrDefault(item.getOperatorId(),""));
|
item.setStoreName(storeMap.getOrDefault(item.getStoreId(),""));
|
});
|
}
|
return super.packForBT(salesDetailVOPage);
|
}
|
|
/**
|
* 获取统计数据
|
* @param query
|
* @return
|
*/
|
@RequestMapping("/getStaticsData")
|
@ResponseBody
|
public ResultUtil<Map<String, BigDecimal>> getStaticsData(HuiminPayQuery query) {
|
Map<String, BigDecimal> map = new HashMap<>();
|
map.put("totalAmount",BigDecimal.ZERO);
|
map.put("refundAmount",BigDecimal.ZERO);
|
List<Integer> appUserIds = Collections.emptyList();
|
if (StringUtils.isNotBlank(query.getUserName()) || StringUtils.isNotBlank(query.getPhone())){
|
AppUserByNameAndPhoneDTO appUserByNameAndPhoneDTO = new AppUserByNameAndPhoneDTO();
|
appUserByNameAndPhoneDTO.setUserName(query.getUserName());
|
appUserByNameAndPhoneDTO.setPhone(query.getPhone());
|
List<TAppUser> tAppUsers = appUserClient.queryAPPUserByNameAndPhone(appUserByNameAndPhoneDTO);
|
appUserIds = tAppUsers.stream()
|
.map(TAppUser::getId)
|
.collect(Collectors.toList());
|
if (CollUtil.isEmpty(appUserIds)){
|
return ResultUtil.success(map);
|
}
|
}
|
query.setAppUserIds(appUserIds);
|
map = payHuiminClient.getStaticsData(query);
|
return ResultUtil.success(map);
|
}
|
|
/**
|
* 退款
|
* @param id
|
* @return
|
*/
|
@GetMapping("/refund/{id}")
|
@ResponseBody
|
public ResultUtil<?> refund(@PathVariable("id") Integer id) {
|
return payHuiminClient.refund(id);
|
}
|
|
/**
|
* 导出售卖明细
|
* @param query
|
*/
|
@GetMapping("/export")
|
public void exportData(HuiminPayQuery query, HttpServletResponse response) {
|
List<SalesDetailVO> records = payHuiminClient.exportData(query);
|
records = records.stream().filter(Objects::nonNull).collect(Collectors.toList());
|
if (CollUtil.isNotEmpty(records)) {
|
List<Integer> operatorIdList = records.stream()
|
.map(SalesDetailVO::getOperatorId)
|
.collect(Collectors.toList());
|
List<Integer> storeIdList = records.stream()
|
.map(SalesDetailVO::getStoreId)
|
.collect(Collectors.toList());
|
Map<Integer, String> operatorMap = operatorService.listByIds(operatorIdList).stream()
|
.collect(Collectors.toMap(TOperator::getId, TOperator::getName));
|
Map<Integer, String> storeMap = storeService.listByIds(storeIdList).stream()
|
.collect(Collectors.toMap(TStore::getId, TStore::getName));
|
records.forEach(item -> {
|
item.setOperatorName(operatorMap.getOrDefault(item.getOperatorId(), ""));
|
item.setStoreName(storeMap.getOrDefault(item.getStoreId(), ""));
|
});
|
}
|
String[] titleArr = {"惠民卡名称", "惠民卡类型", "售卖金额", "所属运营商", "可用门店", "购买用户", "联系电话", "购买时间", "绑定人员", "已用次数", "有效期", "状态"};
|
String[][] values = new String[records.size()][];
|
for (int i = 0; i < records.size(); i++) {
|
SalesDetailVO salesDetailVO = records.get(i);
|
values[i] = new String[titleArr.length];
|
values[i][0] = salesDetailVO.getHuiMinName();
|
values[i][1] = salesDetailVO.getHuiMinType() == 1 ? "年度卡" : "年内卡";
|
values[i][2] = salesDetailVO.getSalesMoney().toString();
|
values[i][3] = salesDetailVO.getOperatorName();
|
values[i][4] = salesDetailVO.getStoreName();
|
values[i][5] = salesDetailVO.getUserName();
|
values[i][6] = salesDetailVO.getPhone();
|
values[i][7] = DateUtil.format(salesDetailVO.getPaymentTime(), "yyyy-MM-dd HH:mm:ss");
|
values[i][8] = salesDetailVO.getStudentName();
|
values[i][9] = salesDetailVO.getUseTimes().toString();
|
values[i][10] = DateUtil.format(salesDetailVO.getEndTime(), "yyyy-MM-dd HH:mm:ss");
|
values[i][11] = salesDetailVO.getStatus() == 2 ? "使用中" : "已退款";
|
}
|
try {
|
HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook("售卖明细", titleArr, values, null);
|
ExcelUtil.setResponseHeader(response, "售卖明细.xls");
|
OutputStream os = response.getOutputStream();
|
wb.write(os);
|
os.flush();
|
os.close();
|
} catch (IOException e) {
|
throw new RuntimeException(e);
|
}
|
}
|
}
|