package com.szwl.controller; 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.gexin.fastjson.JSON; import com.szwl.feign.SzwlFeign; import com.szwl.feign.bean.TAdminParam; import com.szwl.model.bean.CoinOrderVO; import com.szwl.model.bo.JsonMessage; import com.szwl.model.bo.R; import com.szwl.model.bo.ResponseModel; import com.szwl.model.entity.*; import com.szwl.model.query.OrderStatisticsDTO; import com.szwl.model.query.Pageable; import com.szwl.model.query.TCoinOrderParam; import com.szwl.model.utils.JsonUtils; import com.szwl.service.*; import com.szwl.service.es.EsTCoinOrderService; import com.szwl.util.HuifuUtils; import com.szwl.util.IDGenerator; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; /** *

* 前端控制器 *

* * @author wuhs * @since 2023-08-29 */ @Slf4j @RestController @RequestMapping("/tCoinOrder") public class TCoinOrderController { @Resource SzwlFeign szwlFeign; @Autowired EsTCoinOrderService esTCoinOrderService; @Autowired TCoinOrderService coinOrderService; @Autowired TOrderDetailsService orderDetailsService; @Autowired TNameDictionaryService nameDictionaryService; // @Resource // EsFeign esFeign; @Resource TAdminService adminService; @Resource TEquipmentService equipmentService; @ApiOperation(value = "测试feign") @GetMapping("/testFeign") public ResponseModel testFeign(String name) { List list = R.getDataIfSuccess(szwlFeign.testList(new TAdminParam().setName(name))); return R.ok(list); } // @ApiOperation(value = "同步订单到es中") // @PostMapping("/saveOrderAbroadToEs") // public ResponseModel saveToEs(@RequestBody TCoinOrder coinOrder){ // if(coinOrder==null){ // return R.fail(ResponseCodesEnum.A0001); // } // esFeign.saveOrderAbroadToEs(coinOrder); // return R.ok("同步es成功"); // } @ApiOperation(value = "上传线下/海外纸币器订单") @PostMapping("/newSaveCoinOrder") @ResponseBody public Object newSaveCoinOrder(@RequestBody CoinOrderVO coinOrderVO) { String clientId = coinOrderVO.getClientId(); String name = coinOrderVO.getName(); Integer payType = coinOrderVO.getPayType(); BigDecimal price = coinOrderVO.getPrice(); String sn = coinOrderVO.getSn(); // no: 商品名称-编号-数量,玫瑰精灵-A01-1,雪糕-I01-1 String no = coinOrderVO.getNo(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(TCoinOrder::getSn, sn); List coinOrders = coinOrderService.list(queryWrapper); if (coinOrders.size() > 0) { try { esTCoinOrderService.insertData(coinOrders.get(0)); } catch (Exception e) { e.printStackTrace(); } return JsonMessage.success("添加线下订单成功"); } TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId)); String machineType = equipment.getMachineType(); // 设备类型 Long adminId = equipment.getAdminId(); if (adminId == null) { return JsonMessage.error("找不到设备商家"); } String adminIdStr = String.valueOf(adminId); // 根据 adminId 获取admin信息中的公司类型 TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(adminIdStr)); String companyType = admin.getCompanyType(); TCoinOrder coinOrder = new TCoinOrder(); coinOrder.setId(IDGenerator.coinOrderID()); coinOrder.setType(null); coinOrder.setClientId(clientId); coinOrder.setAdminId(adminId); coinOrder.setProductName(name); coinOrder.setPayType(payType); coinOrder.setPrice(price); coinOrder.setSn(sn); // 线下纸币器订单都是已付款 coinOrder.setStatus(1); // 0或null 非空中云汇 coinOrder.setIsAir("0"); coinOrder.setEquipmentId(equipment.getId()); // 保存订单明细 TOrderDetails tOrderDetails = new TOrderDetails(); tOrderDetails.setOrderSn(sn); tOrderDetails.setEquipmentId(equipment.getId()); tOrderDetails.setRefundStatus("1"); tOrderDetails.setAdminId(adminId); // 设备类型 if (StringUtils.isEmpty(machineType) || machineType.equals("0")) { coinOrder.setMachineType("0"); tOrderDetails.setMachineType("0"); } else { coinOrder.setMachineType(machineType); tOrderDetails.setMachineType(machineType); } // 公司平台 if (StringUtils.isNotEmpty(companyType) && companyType.equals("1")) { coinOrder.setCompanyType(companyType); tOrderDetails.setCompanyType(companyType); } else { coinOrder.setCompanyType("0"); tOrderDetails.setCompanyType("0"); } // 商品数量 if (coinOrderVO.getProductNumber() == null || coinOrderVO.getProductNumber() == 0) { coinOrderVO.setProductNumber(1); } else { coinOrder.setProductNumber(coinOrderVO.getProductNumber()); } if (StringUtils.isNotEmpty(coinOrderVO.getCreateDate())) { java.text.SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date1 = null; try { date1 = formatter.parse(coinOrderVO.getCreateDate()); } catch (ParseException e) { e.printStackTrace(); } coinOrder.setCreateDate(date1); coinOrder.setModifyDate(date1); coinOrder.setPayDate(date1); tOrderDetails.setCreateDate(date1); } else { coinOrder.setCreateDate(new Date()); coinOrder.setModifyDate(new Date()); coinOrder.setPayDate(new Date()); tOrderDetails.setCreateDate(new Date()); } coinOrderService.save(coinOrder); try { String[] split = no.split(","); for (String s : split) { String[] strings = s.split("-"); // 商品名称 String goodName = strings[0]; // 商品编号 String goodNo = strings[1]; // 商品数量 Integer productNumber = Integer.valueOf(strings[2]); tOrderDetails.setId(HuifuUtils.initDetailsId()); tOrderDetails.setProductNumber(productNumber); tOrderDetails.setProductName(goodName); tOrderDetails.setProductNo(goodNo); orderDetailsService.save(tOrderDetails); } } catch (Exception e) { e.printStackTrace(); } try { // 推送微信订单 // 判断是否开启订单推送功能 if (admin != null && StringUtils.isNotEmpty(admin.getOrderNotice()) && admin.getOrderNotice().equals("1")) { String openId = R.getDataIfSuccess(szwlFeign.getOpenId(adminId)); // 获取openId if (StringUtils.isNotEmpty(openId)) { coinOrderService.sendWechatMessage(openId, equipment, coinOrder, admin.getCompanyType()); } } esTCoinOrderService.insertData(coinOrder); } catch (Exception e) { e.printStackTrace(); } return JsonMessage.success("添加线下订单成功"); } /** * 保存 线下/海外纸币器 订单 * * @param coinOrderVO * @return */ @PostMapping("/saveCoinOrder") @ResponseBody public Object saveCoinOrder(@RequestBody CoinOrderVO coinOrderVO) { String clientId = coinOrderVO.getClientId(); String name = coinOrderVO.getName(); Integer payType = coinOrderVO.getPayType(); BigDecimal price = coinOrderVO.getPrice(); String sn = coinOrderVO.getSn(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(TCoinOrder::getSn, sn); List coinOrders = coinOrderService.list(queryWrapper); if (coinOrders.size() > 0) { try { esTCoinOrderService.insertData(coinOrders.get(0)); } catch (Exception e) { e.printStackTrace(); } return JsonMessage.success("添加线下订单成功"); } TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId)); String machineType = equipment.getMachineType(); // 设备类型 Long adminId = equipment.getAdminId(); if (adminId == null) { return JsonMessage.error("找不到设备商家"); } String adminIdStr = String.valueOf(adminId); // 根据 adminId 获取admin信息中的公司类型 TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(adminIdStr)); String companyType = admin.getCompanyType(); TCoinOrder coinOrder = new TCoinOrder(); coinOrder.setId(IDGenerator.coinOrderID()); coinOrder.setType(null); coinOrder.setClientId(clientId); coinOrder.setAdminId(adminId); coinOrder.setProductName(name); coinOrder.setPayType(payType); coinOrder.setPrice(price); coinOrder.setSn(sn); // 线下纸币器订单都是已付款 coinOrder.setStatus(1); // 0或null 非空中云汇 coinOrder.setIsAir("0"); coinOrder.setEquipmentId(equipment.getId()); // 保存订单明细 TOrderDetails tOrderDetails = new TOrderDetails(); tOrderDetails.setOrderSn(sn); tOrderDetails.setEquipmentId(equipment.getId()); tOrderDetails.setRefundStatus("1"); tOrderDetails.setAdminId(adminId); // 设备类型 if (StringUtils.isEmpty(machineType) || machineType.equals("0")) { coinOrder.setMachineType("0"); tOrderDetails.setMachineType("0"); } else { coinOrder.setMachineType(machineType); tOrderDetails.setMachineType(machineType); } // 公司平台 if (StringUtils.isNotEmpty(companyType) && companyType.equals("1")) { coinOrder.setCompanyType(companyType); tOrderDetails.setCompanyType(companyType); } else { coinOrder.setCompanyType("0"); tOrderDetails.setCompanyType("0"); } // 商品数量 if (coinOrderVO.getProductNumber() == null || coinOrderVO.getProductNumber() == 0) { coinOrderVO.setProductNumber(1); } else { coinOrder.setProductNumber(coinOrderVO.getProductNumber()); } if (StringUtils.isNotEmpty(coinOrderVO.getCreateDate())) { java.text.SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date1 = null; try { date1 = formatter.parse(coinOrderVO.getCreateDate()); } catch (ParseException e) { e.printStackTrace(); } coinOrder.setCreateDate(date1); coinOrder.setModifyDate(date1); coinOrder.setPayDate(date1); tOrderDetails.setCreateDate(date1); } else { coinOrder.setCreateDate(new Date()); coinOrder.setModifyDate(new Date()); coinOrder.setPayDate(new Date()); tOrderDetails.setCreateDate(new Date()); } coinOrderService.save(coinOrder); try { if (name.contains("-")) { HashMap map = new HashMap<>(); String[] split = name.split(","); for (String s : split) { String[] strings = s.split("-"); map.put(strings[0], Integer.valueOf(strings[1])); } for (String key : map.keySet()) { // key:"A01",value:"1" // 找到商品名称对应设备的商品信息 Integer productNumber = map.get(key); tOrderDetails.setId(HuifuUtils.initDetailsId()); tOrderDetails.setProductNumber(productNumber); tOrderDetails.setProductName(key); TProduct product = R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipment.getId()), key)); if (product == null) { // 找到对应的商品名称的字典 LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.eq(TNameDictionary::getName, key); List list = nameDictionaryService.list(wrapper); if (list.size() > 0) { tOrderDetails.setProductNo(list.get(0).getNo()); } else { tOrderDetails.setProductNo("A01"); } } else { tOrderDetails.setProductNo(product.getNo()); } orderDetailsService.save(tOrderDetails); } } else { tOrderDetails.setId(HuifuUtils.initDetailsId()); tOrderDetails.setProductName(name); tOrderDetails.setProductNumber(1); if (name.contains("DIY")) { tOrderDetails.setProductNo("A99"); } else { TProduct product = R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipment.getId()), name)); if (product == null) { // 找到对应的商品名称的字典 LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.eq(TNameDictionary::getName, name); List list = nameDictionaryService.list(wrapper); if (list.size() > 0) { tOrderDetails.setProductNo(list.get(0).getNo()); } else { tOrderDetails.setProductNo("A01"); } } else { tOrderDetails.setProductNo(product.getNo()); } } orderDetailsService.save(tOrderDetails); } } catch (Exception e) { e.printStackTrace(); } try { // 推送微信订单 // 判断是否开启订单推送功能 if (admin != null && StringUtils.isNotEmpty(admin.getOrderNotice()) && admin.getOrderNotice().equals("1")) { String openId = R.getDataIfSuccess(szwlFeign.getOpenId(adminId)); // 获取openId if (StringUtils.isNotEmpty(openId)) { coinOrderService.sendWechatMessage(openId, equipment, coinOrder, admin.getCompanyType()); } } esTCoinOrderService.insertData(coinOrder); } catch (Exception e) { e.printStackTrace(); } return JsonMessage.success("添加线下订单成功"); } //设备查询线下订单记录 @RequestMapping(value = "/findCoinOrder", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") @ResponseBody public String list(String clientId, String sn, String productName, Integer payType, Date begin, Date end, Pageable pageable) { LambdaQueryWrapper query = Wrappers.lambdaQuery(); if (StringUtils.isNotEmpty(sn)) { query.eq(TCoinOrder::getSn, sn); } if (StringUtils.isNotEmpty(productName)) { query.eq(TCoinOrder::getProductName, productName); } if (payType != null) { query.eq(TCoinOrder::getPayType, payType); } if (begin != null && end != null) { query.gt(TCoinOrder::getPayDate, begin); query.lt(TCoinOrder::getPayDate, end); } query.eq(TCoinOrder::getClientId, clientId); int size = pageable.getPageSize(); int current = pageable.getPageNumber(); Page page = new Page<>(current, size, true); IPage iPage = coinOrderService.page(page, query); long total = page.getTotal(); JSONObject jsonObject = new JSONObject(); jsonObject.put("total", total); jsonObject.put("coinorders", JSON.toJSONString(iPage.getRecords())); return jsonObject.toJSONString(); } //设备查询线下订单记录 @RequestMapping(value = "/newFindCoinOrder", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") @ResponseBody public String newFindCoinOrder(String clientId, String sn, String productName, Integer payType, String begin, String end, Pageable pageable) { LambdaQueryWrapper query = Wrappers.lambdaQuery(); java.text.SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date1 = null; Date date2 = null; try { date1 = formatter.parse(begin); date2 = formatter.parse(end); } catch (ParseException e) { e.printStackTrace(); } if (StringUtils.isNotEmpty(sn)) { query.eq(TCoinOrder::getSn, sn); } if (StringUtils.isNotEmpty(productName)) { query.eq(TCoinOrder::getProductName, productName); } if (payType != null) { query.eq(TCoinOrder::getPayType, payType); } if (begin != null && end != null) { query.gt(TCoinOrder::getPayDate, begin); query.lt(TCoinOrder::getPayDate, end); } query.eq(TCoinOrder::getClientId, clientId); int size = pageable.getPageSize(); int current = pageable.getPageNumber(); Page page = new Page<>(current, size, true); IPage iPage = coinOrderService.page(page, query); long total = page.getTotal(); JSONObject jsonObject = new JSONObject(); jsonObject.put("total", total); jsonObject.put("coinorders", JSON.toJSONString(iPage.getRecords())); return jsonObject.toJSONString(); } //设备查看线下汇总统计 @RequestMapping(value = "/listCoin", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") @ResponseBody public Object findByTime(String clientId, String startTime, String endTime) { java.text.SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date1 = null; Date date2 = null; try { date1 = formatter.parse(startTime); date2 = formatter.parse(endTime); } catch (ParseException e) { e.printStackTrace(); } List list = coinOrderService.findTotalByTime(clientId, date1, date2); JSONObject jsonObject = new JSONObject(); jsonObject.put("code", 0); jsonObject.put("data", JsonUtils.toJson(list)); jsonObject.put("errmsg", ""); return jsonObject; } @PostMapping("/fixOrder") public ResponseModel fixOrder(@RequestBody TCoinOrderParam param) { LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.gt(TCoinOrder::getCreateDate, param.getCreateDate_start()); query.lt(TCoinOrder::getCreateDate, param.getCreateDate_end()); List list = coinOrderService.list(query); ArrayList snList = new ArrayList<>(); for (TCoinOrder coinOrder : list) { String sn = coinOrder.getSn(); if (!snList.contains(sn)) { LambdaQueryWrapper snQuery = Wrappers.lambdaQuery(); snQuery.eq(TCoinOrder::getSn, sn); query.gt(TCoinOrder::getCreateDate, param.getCreateDate_start()); query.lt(TCoinOrder::getCreateDate, param.getCreateDate_end()); List coinOrderList = coinOrderService.list(snQuery); if (coinOrderList.size() > 1) { snList.add(sn); } } } if (snList.size() > 0) { for (String s : snList) { try { LambdaQueryWrapper snQuery = Wrappers.lambdaQuery(); snQuery.eq(TCoinOrder::getSn, s); List coinOrderList = coinOrderService.list(snQuery); if (coinOrderList.size() > 1) { for (int i = 1; i < coinOrderList.size(); i++) { TCoinOrder coinOrder = coinOrderList.get(i); Long id = coinOrder.getId(); coinOrderService.removeById(id); esTCoinOrderService.deleteTableById(String.valueOf(id)); } } } catch (Exception e) { log.error("ElasticsearchRunner deleteData 发生错误:{}", e); } } } return R.ok(snList); } }