BackendCouponGroupController.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. package com.fuint.module.backendApi.controller;
  2. import com.fuint.common.Constants;
  3. import com.fuint.common.dto.*;
  4. import com.fuint.common.enums.StatusEnum;
  5. import com.fuint.common.service.CouponGroupService;
  6. import com.fuint.common.service.CouponService;
  7. import com.fuint.common.util.TokenUtil;
  8. import com.fuint.common.util.XlsUtil;
  9. import com.fuint.framework.dto.ExcelExportDto;
  10. import com.fuint.framework.exception.BusinessCheckException;
  11. import com.fuint.framework.pagination.PaginationRequest;
  12. import com.fuint.framework.pagination.PaginationResponse;
  13. import com.fuint.framework.service.ExportService;
  14. import com.fuint.framework.web.BaseController;
  15. import com.fuint.framework.web.ResponseObject;
  16. import com.fuint.repository.mapper.MtCouponMapper;
  17. import com.fuint.repository.model.MtCoupon;
  18. import com.fuint.repository.model.MtCouponGroup;
  19. import com.fuint.utils.StringUtil;
  20. import io.swagger.annotations.Api;
  21. import io.swagger.annotations.ApiOperation;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.web.bind.annotation.*;
  24. import org.springframework.web.multipart.MultipartFile;
  25. import org.slf4j.Logger;
  26. import org.slf4j.LoggerFactory;
  27. import javax.annotation.Resource;
  28. import javax.servlet.http.HttpServletRequest;
  29. import javax.servlet.http.HttpServletResponse;
  30. import java.io.File;
  31. import java.io.OutputStream;
  32. import java.net.URL;
  33. import java.util.ArrayList;
  34. import java.util.HashMap;
  35. import java.util.List;
  36. import java.util.Map;
  37. /**
  38. * 卡券分组管理类controller
  39. *
  40. * Created by FSQ
  41. * CopyRight https://www.fuint.cn
  42. */
  43. @Api(tags="管理端-卡券分组相关接口")
  44. @RestController
  45. @RequestMapping(value = "/backendApi/couponGroup")
  46. public class BackendCouponGroupController extends BaseController {
  47. private static final Logger logger = LoggerFactory.getLogger(BackendCouponGroupController.class);
  48. @Resource
  49. private MtCouponMapper mtCouponMapper;
  50. /**
  51. * 卡券分组服务接口
  52. */
  53. @Autowired
  54. private CouponGroupService couponGroupService;
  55. /**
  56. * 卡券服务接口
  57. * */
  58. @Autowired
  59. CouponService couponService;
  60. /**
  61. * 导出服务接口
  62. * */
  63. @Autowired
  64. private ExportService exportService;
  65. /**
  66. * 查询卡券分组列表
  67. *
  68. * @param request
  69. * @return
  70. * @throws BusinessCheckException
  71. */
  72. @ApiOperation(value = "查询卡券分组列表")
  73. @RequestMapping(value = "/list", method = RequestMethod.GET)
  74. @CrossOrigin
  75. public ResponseObject list(HttpServletRequest request) throws BusinessCheckException {
  76. String token = request.getHeader("Access-Token");
  77. Integer page = request.getParameter("page") == null ? 1 : Integer.parseInt(request.getParameter("page"));
  78. Integer pageSize = request.getParameter("pageSize") == null ? Constants.PAGE_SIZE : Integer.parseInt(request.getParameter("pageSize"));
  79. String name = request.getParameter("name") == null ? "" : request.getParameter("name");
  80. String id = request.getParameter("id") == null ? "" : request.getParameter("id");
  81. String status = request.getParameter("status") == null ? StatusEnum.ENABLED.getKey() : request.getParameter("status");
  82. AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
  83. if (accountInfo == null) {
  84. return getFailureResult(1001, "请先登录");
  85. }
  86. PaginationRequest paginationRequest = new PaginationRequest();
  87. paginationRequest.setCurrentPage(page);
  88. paginationRequest.setPageSize(pageSize);
  89. Map<String, Object> searchParams = new HashMap<>();
  90. if (StringUtil.isNotEmpty(name)) {
  91. searchParams.put("name", name);
  92. }
  93. if (StringUtil.isNotEmpty(id)) {
  94. searchParams.put("id", id);
  95. }
  96. if (StringUtil.isNotEmpty(status)) {
  97. searchParams.put("status", status);
  98. }
  99. if (accountInfo.getMerchantId() != null && accountInfo.getMerchantId() > 0) {
  100. searchParams.put("merchantId", accountInfo.getMerchantId());
  101. }
  102. if (accountInfo.getStoreId() != null && accountInfo.getStoreId() > 0) {
  103. searchParams.put("storeId", accountInfo.getStoreId());
  104. }
  105. paginationRequest.setSearchParams(searchParams);
  106. PaginationResponse<MtCouponGroup> paginationResponse = couponGroupService.queryCouponGroupListByPagination(paginationRequest);
  107. // 计算券种类、总价值
  108. if (paginationResponse.getContent().size() > 0) {
  109. for (int i = 0; i < paginationResponse.getContent().size(); i++) {
  110. MtCouponGroup object = paginationResponse.getContent().get(i);
  111. object.setMoney(couponGroupService.getCouponMoney(object.getId().intValue()));
  112. object.setNum(couponGroupService.getCouponNum(object.getId()));
  113. }
  114. }
  115. // 统计数据
  116. List<GroupDataListDto> groupData = new ArrayList<>();
  117. if (paginationResponse.getContent().size() > 0) {
  118. for (int i = 0; i < paginationResponse.getContent().size(); i++) {
  119. Integer groupId = paginationResponse.getContent().get(i).getId();
  120. GroupDataDto data = new GroupDataDto();
  121. data.setCancelNum(0);
  122. data.setExpireNum(0);
  123. data.setUseNum(0);
  124. data.setSendNum(0);
  125. data.setUnSendNum(0);
  126. GroupDataListDto item = new GroupDataListDto();
  127. if (null != data) {
  128. item.setKey(groupId.toString());
  129. item.setData(data);
  130. groupData.add(item);
  131. }
  132. }
  133. }
  134. Map<String, Object> result = new HashMap<>();
  135. result.put("paginationResponse", paginationResponse);
  136. result.put("groupData", groupData);
  137. return getSuccessResult(result);
  138. }
  139. /**
  140. * 保存卡券分组信息
  141. *
  142. * @param request
  143. * @param reqCouponGroupDto
  144. * @return
  145. */
  146. @ApiOperation(value = "保存卡券分组信息")
  147. @RequestMapping(value = "/save", method = RequestMethod.POST)
  148. @CrossOrigin
  149. public ResponseObject save(HttpServletRequest request, @RequestBody ReqCouponGroupDto reqCouponGroupDto) throws BusinessCheckException {
  150. String token = request.getHeader("Access-Token");
  151. AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
  152. if (accountInfo == null) {
  153. return getFailureResult(1001, "请先登录");
  154. }
  155. reqCouponGroupDto.setMerchantId(accountInfo.getMerchantId());
  156. reqCouponGroupDto.setStoreId(accountInfo.getStoreId());
  157. reqCouponGroupDto.setOperator(accountInfo.getAccountName());
  158. if (reqCouponGroupDto.getId() != null && reqCouponGroupDto.getId() > 0) {
  159. couponGroupService.updateCouponGroup(reqCouponGroupDto);
  160. } else {
  161. couponGroupService.addCouponGroup(reqCouponGroupDto);
  162. }
  163. return getSuccessResult(true);
  164. }
  165. /**
  166. * 删除卡券分组
  167. *
  168. * @param request
  169. * @return
  170. */
  171. @ApiOperation(value = "删除卡券分组")
  172. @RequestMapping(value = "/delete/{id}", method = RequestMethod.GET)
  173. @CrossOrigin
  174. public ResponseObject delete(HttpServletRequest request, @PathVariable("id") Integer id) throws BusinessCheckException {
  175. String token = request.getHeader("Access-Token");
  176. AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
  177. if (accountInfo == null) {
  178. return getFailureResult(1001, "请先登录");
  179. }
  180. // 该分组已有数据,不允许删除
  181. Map<String, Object> searchParams = new HashMap<>();
  182. searchParams.put("GROUP_ID", id.toString());
  183. searchParams.put("status", StatusEnum.ENABLED.getKey());
  184. List<MtCoupon> dataList = mtCouponMapper.selectByMap(searchParams);
  185. if (dataList.size() > 0) {
  186. return getFailureResult(201, "该分组下有卡券,不能删除");
  187. }
  188. couponGroupService.deleteCouponGroup(id, accountInfo.getAccountName());
  189. return getSuccessResult(true);
  190. }
  191. /**
  192. * 更新分组状态
  193. *
  194. * @return
  195. */
  196. @ApiOperation(value = "更新分组状态")
  197. @RequestMapping(value = "/updateStatus", method = RequestMethod.POST)
  198. @CrossOrigin
  199. public ResponseObject updateStatus(HttpServletRequest request, @RequestBody Map<String, Object> params) throws BusinessCheckException {
  200. String token = request.getHeader("Access-Token");
  201. String status = params.get("status") != null ? params.get("status").toString() : StatusEnum.ENABLED.getKey();
  202. Integer id = params.get("id") == null ? 0 : Integer.parseInt(params.get("id").toString());
  203. AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
  204. if (accountInfo == null) {
  205. return getFailureResult(1001, "请先登录");
  206. }
  207. String operator = accountInfo.getAccountName();
  208. ReqCouponGroupDto groupDto = new ReqCouponGroupDto();
  209. groupDto.setOperator(operator);
  210. groupDto.setId(id);
  211. groupDto.setStatus(status);
  212. couponGroupService.updateCouponGroup(groupDto);
  213. return getSuccessResult(true);
  214. }
  215. /**
  216. * 获取分组详情
  217. *
  218. * @param request
  219. * @return
  220. */
  221. @ApiOperation(value = "获取分组详情")
  222. @RequestMapping(value = "/info/{id}", method = RequestMethod.GET)
  223. @CrossOrigin
  224. public ResponseObject info(HttpServletRequest request, @PathVariable("id") Integer id) throws BusinessCheckException {
  225. String token = request.getHeader("Access-Token");
  226. AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
  227. if (accountInfo == null) {
  228. return getFailureResult(1001, "请先登录");
  229. }
  230. MtCouponGroup mtCouponGroup = couponGroupService.queryCouponGroupById(id);
  231. Map<String, Object> resultMap = new HashMap<>();
  232. resultMap.put("groupInfo", mtCouponGroup);
  233. return getSuccessResult(resultMap);
  234. }
  235. /**
  236. * 导出模板文件
  237. *
  238. * @param request
  239. * @param response
  240. * @throws BusinessCheckException
  241. */
  242. @ApiOperation(value = "导出模板文件")
  243. @RequestMapping(value = "/exportTemplate", method = RequestMethod.GET)
  244. @CrossOrigin
  245. public void exportTemplate(HttpServletRequest request, HttpServletResponse response) throws BusinessCheckException {
  246. ClassLoader classLoader = this.getClass().getClassLoader();
  247. URL url = classLoader.getResource("");
  248. String srcTemplateFilePath = url.getPath();
  249. ExcelExportDto excelExportDto = new ExcelExportDto();
  250. excelExportDto.setSrcPath(srcTemplateFilePath);
  251. excelExportDto.setSrcTemplateFileName("template" + File.separator + "importTemplate.xlsx");
  252. String filename = "批量发券模板" + ".xlsx";
  253. try {
  254. OutputStream out = response.getOutputStream();
  255. XlsUtil.setXlsHeader(request, response, filename);
  256. excelExportDto.setOut(out);
  257. exportService.exportLocalFile(excelExportDto);
  258. } catch (Exception e) {
  259. logger.error("导出出错", e);
  260. throw new BusinessCheckException("导出出错");
  261. }
  262. }
  263. /**
  264. * 上传文件
  265. *
  266. * @param request
  267. * @throws
  268. */
  269. @ApiOperation(value = "上传文件")
  270. @RequestMapping(value = "/upload/", method = RequestMethod.POST, produces = "text/html;charset=UTF-8")
  271. @CrossOrigin
  272. public ResponseObject uploadFile(HttpServletRequest request, @RequestParam("fileInput") MultipartFile file) throws Exception {
  273. String token = request.getHeader("Access-Token");
  274. AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
  275. if (accountInfo == null) {
  276. return getFailureResult(1001, "请先登录");
  277. }
  278. String filePath = couponGroupService.saveExcelFile(file, request);
  279. String uuid = couponGroupService.importSendCoupon(file, accountInfo.getAccountName(), filePath);
  280. return getSuccessResult(uuid);
  281. }
  282. /**
  283. * 查询分组列表
  284. * */
  285. @ApiOperation(value = "查询分组列表")
  286. @RequestMapping(value = "/quickSearch", method = RequestMethod.GET)
  287. @CrossOrigin
  288. public ResponseObject quickSearch(HttpServletRequest request) throws BusinessCheckException {
  289. String token = request.getHeader("Access-Token");
  290. AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
  291. if (accountInfo == null) {
  292. return getFailureResult(1001, "请先登录");
  293. }
  294. PaginationRequest paginationRequest = new PaginationRequest();
  295. paginationRequest.setCurrentPage(Constants.PAGE_NUMBER);
  296. paginationRequest.setPageSize(Constants.MAX_ROWS);
  297. paginationRequest.setSearchParams(new HashMap<>());
  298. PaginationResponse<MtCouponGroup> paginationResponse = couponGroupService.queryCouponGroupListByPagination(paginationRequest);
  299. List<MtCouponGroup> groupList = paginationResponse.getContent();
  300. Map<String, Object> resultMap = new HashMap<>();
  301. resultMap.put("groupList", groupList);
  302. return getSuccessResult(resultMap);
  303. }
  304. }