CustomController.java 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609
  1. package com.willalp.web.controller.app;
  2. import cn.hutool.core.date.DateUtil;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.toolkit.IdWorker;
  6. import com.willalp.canteen.domain.*;
  7. import com.willalp.canteen.domain.req.CustomMenuSaveReq;
  8. import com.willalp.canteen.domain.req.CustomOrderPaymentReq;
  9. import com.willalp.canteen.domain.req.CustomReq;
  10. import com.willalp.canteen.domain.resp.CuisineListResp;
  11. import com.willalp.canteen.domain.resp.CustomGetOrderResp;
  12. import com.willalp.canteen.domain.resp.UsableOrderResp;
  13. import com.willalp.canteen.domain.vo.CustomGetOrderVo;
  14. import com.willalp.canteen.domain.vo.GetFoodUpLoadItemVo;
  15. import com.willalp.canteen.domain.vo.GetFoodUpLoadVo;
  16. import com.willalp.canteen.service.*;
  17. import com.willalp.common.core.controller.BaseController;
  18. import com.willalp.common.core.domain.AjaxResult;
  19. import com.willalp.common.core.domain.entity.SysUser;
  20. import com.willalp.common.core.domain.model.LoginUser;
  21. import com.willalp.common.core.redis.RedisCache;
  22. import com.willalp.common.enums.ConsumeChangeEnum;
  23. import com.willalp.common.enums.NumberRuleEnum;
  24. import com.willalp.common.enums.PartternIdEnum;
  25. import com.willalp.common.exception.base.BaseException;
  26. import com.willalp.common.utils.PeriodUtil;
  27. import com.willalp.common.utils.StringUtils;
  28. import com.willalp.common.utils.bean.BeanUtils;
  29. import com.willalp.device.domain.vo.DeviceInitVo;
  30. import com.willalp.device.service.IDeviceService;
  31. import com.willalp.integral.domain.Integral;
  32. import com.willalp.integral.service.IIntegralService;
  33. import com.willalp.number.domain.req.NumberRuleReq;
  34. import com.willalp.number.service.IHsSysNumberRuleService;
  35. import com.willalp.system.domain.SysUserOrganization;
  36. import com.willalp.system.service.ISysConfigService;
  37. import com.willalp.system.service.ISysUserOrganizationService;
  38. import com.willalp.system.service.ISysUserService;
  39. import org.apache.commons.logging.Log;
  40. import org.apache.commons.logging.LogFactory;
  41. import org.springframework.beans.factory.annotation.Autowired;
  42. import org.springframework.transaction.annotation.Transactional;
  43. import org.springframework.web.bind.annotation.RequestBody;
  44. import org.springframework.web.bind.annotation.RequestMapping;
  45. import org.springframework.web.bind.annotation.ResponseBody;
  46. import org.springframework.web.bind.annotation.RestController;
  47. import java.math.BigDecimal;
  48. import java.util.*;
  49. import java.util.concurrent.TimeUnit;
  50. import java.util.stream.Collectors;
  51. /**
  52. * @author hs
  53. */
  54. @RestController
  55. @RequestMapping("/custom")
  56. public class CustomController extends BaseController {
  57. private static final Log LOG = LogFactory.getLog(CustomController.class);
  58. @Autowired
  59. IHsCanteenMenuService hsCanteenMenuService;
  60. @Autowired
  61. IHsCanteenMenuRegisterService hsCanteenMenuRegisterService;
  62. @Autowired
  63. IHsCanteenMenuCustomService hsCanteenMenuCustomService;
  64. @Autowired
  65. ISysUserService sysUserService;
  66. @Autowired
  67. IHsSysNumberRuleService hsSysNumberRuleService;
  68. @Autowired
  69. IHsCanteenMenuService canteenMenuService;
  70. @Autowired
  71. IHsCanteenOrderService hsCanteenOrderService;
  72. @Autowired
  73. IHsCanteenOrderDetailService hsCanteenOrderDetailService;
  74. @Autowired
  75. IIntegralService integralService;
  76. @Autowired
  77. ISysUserOrganizationService sysUserOrganizationService;
  78. @Autowired
  79. private RedisCache redisCache;
  80. @Autowired
  81. private IDeviceService deviceService;
  82. @Autowired
  83. private ISysConfigService sysConfigService;
  84. private final String IC_CARD = "IC_CARD";
  85. private final String HS_CODE = "HS_CODE";
  86. /**
  87. * 设备初始化并绑定就餐地验证
  88. *
  89. * @param dn 就餐地编码
  90. * @return
  91. */
  92. @RequestMapping("/uploadsr")
  93. @ResponseBody
  94. public AjaxResult initDevice(String dn, String bodyText) {
  95. if (StringUtils.isNotBlank(dn)) {
  96. if (StringUtils.isNotBlank(bodyText) && !StringUtils.equals("null", bodyText)) {
  97. try {
  98. int length = bodyText.length();
  99. String type = null;
  100. String dataStr = null;
  101. JSONObject jsonObject = new JSONObject();
  102. //IC卡
  103. if (length == 8) {
  104. type = IC_CARD;
  105. dataStr = bodyText;
  106. System.out.println("使用IC卡:" + bodyText);
  107. } else
  108. //HS码
  109. if (length > 8) {
  110. type = HS_CODE;
  111. dataStr = bodyText;
  112. LOG.debug("使用HS码:" + bodyText);
  113. }
  114. // else if (length > 86) {
  115. // //同时刷卡扫码
  116. // if (bodyText.indexOf("{") != 0) {
  117. // type = IC_CARD;
  118. // dataStr = bodyText.substring(0, bodyText.indexOf("{"));
  119. // } else {
  120. // type = HS_CODE;
  121. // dataStr = bodyText.substring(bodyText.indexOf("{"), bodyText.indexOf("}") + 1);
  122. // }
  123. // System.out.println(bodyText);
  124. // System.out.println("同时使用:" + dataStr);
  125. // } else {
  126. // return AjaxResult.error("无效的非法结果");
  127. // }
  128. jsonObject.put("type", type);
  129. jsonObject.put("data", dataStr);
  130. redisCache.setCacheObject(dn, jsonObject, 20, TimeUnit.SECONDS);
  131. return AjaxResult.error("无效二维码,请使用[HS码]再次扫描");
  132. } catch (Exception e) {
  133. e.printStackTrace();
  134. }
  135. }
  136. }
  137. return AjaxResult.success();
  138. }
  139. /**
  140. * 设备初始化并绑定就餐地验证
  141. *
  142. * @param deviceInitVo 初始化参数
  143. * @return
  144. */
  145. @RequestMapping("/init")
  146. @ResponseBody
  147. public AjaxResult initDevice(@RequestBody DeviceInitVo deviceInitVo) {
  148. String deviceNo = deviceService.deviceInit(deviceInitVo);
  149. AjaxResult success = AjaxResult.success();
  150. success.put("data", deviceNo);
  151. return success;
  152. }
  153. /**
  154. * 消费机获取自由消费菜单
  155. *
  156. * @param customName
  157. * @return
  158. */
  159. @RequestMapping("/menu")
  160. @ResponseBody
  161. public AjaxResult getCustomMenu(String customName) {
  162. //获取自由菜单
  163. HsCanteenMenu menu = new HsCanteenMenu();
  164. menu.setPatternId(PartternIdEnum.FREEDOM.getValue());
  165. try {
  166. menu = hsCanteenMenuService.selectHsCanteenMenuList(menu).get(0);
  167. } catch (Exception e) {
  168. throw new BaseException("菜单不存在");
  169. }
  170. //菜单菜品
  171. HsCanteenMenuRegister register = new HsCanteenMenuRegister();
  172. register.setMenuNumber(menu.getMenuNumber());
  173. List<CuisineListResp> regs = new ArrayList<>();
  174. regs = hsCanteenMenuRegisterService.selectCuisineList(register, 0, 0);
  175. //定制菜单
  176. if (customName != null && customName != "") {
  177. HsCanteenMenuCustom custom = new HsCanteenMenuCustom();
  178. custom.setCustomName(customName);
  179. custom.setMenuNumber(menu.getMenuNumber());
  180. List<HsCanteenMenuCustom> customs = new ArrayList<>();
  181. customs = hsCanteenMenuCustomService.selectHsCanteenMenuCustomList(custom);
  182. List<String> numbers = customs.stream().map(o -> o.getCuisineNumber()).collect(Collectors.toList());
  183. regs = regs.stream().filter(o -> numbers.contains(o.getCuisineNumber())).collect(Collectors.toList());
  184. }
  185. regs = regs.stream().map(item -> {
  186. if (item.getCuisinePicture() != null) {
  187. item.setCuisinePicture("http://" + getIp() + item.getCuisinePicture());
  188. }
  189. return item;
  190. }).collect(Collectors.toList());
  191. return AjaxResult.success(regs);
  192. }
  193. /**
  194. * 定制菜单保存
  195. *
  196. * @param req
  197. * @return
  198. */
  199. @RequestMapping("/save")
  200. @ResponseBody
  201. public AjaxResult saveCustomMenu(CustomMenuSaveReq req) {
  202. List<HsCanteenMenuCustom> customs = new ArrayList<>();
  203. req.getCuisines().stream().forEach(o -> {
  204. HsCanteenMenuCustom custom = new HsCanteenMenuCustom();
  205. custom.setCustomId(IdWorker.getIdStr());
  206. custom.setMenuNumber(req.getMenuNumber());
  207. custom.setCustomName(req.getCustomName());
  208. custom.setCuisineNumber(o);
  209. custom.setJgid(req.getJgid());
  210. customs.add(custom);
  211. });
  212. try {
  213. hsCanteenMenuCustomService.saveBatch(customs);
  214. } catch (Exception e) {
  215. throw new BaseException("保存失败");
  216. }
  217. return AjaxResult.success("保存成功");
  218. }
  219. /**
  220. * 定制菜单删除内容
  221. *
  222. * @param customIds
  223. * @return
  224. */
  225. @RequestMapping("/delete")
  226. @ResponseBody
  227. public AjaxResult remove(Long[] customIds) {
  228. hsCanteenMenuCustomService.removeByIds(Arrays.asList(customIds));
  229. return AjaxResult.success();
  230. }
  231. /**
  232. * 下单
  233. *
  234. * @param req
  235. * @return
  236. */
  237. @RequestMapping("/order")
  238. @ResponseBody
  239. @Transactional(rollbackFor = Exception.class)
  240. public AjaxResult customOrder(CustomOrderPaymentReq req) {
  241. Date date = new Date();
  242. //可记账不可记账菜品
  243. List<HsCanteenOrderDetail> freeRegs = new ArrayList<>();
  244. List<HsCanteenOrderDetail> regs = new ArrayList<>();
  245. List<Integral> integrals = new ArrayList<>();//消费记录
  246. List<HsCanteenOrder> orders = new ArrayList<>();//订单
  247. List<HsCanteenOrderDetail> details = new ArrayList<>();//订单明细
  248. BigDecimal orderTotal = BigDecimal.ZERO;
  249. //获取用户
  250. SysUserOrganization user = new SysUserOrganization();
  251. user.setLoginName(req.getUserNumber());
  252. user.setOrganizationCode(req.getJgid());
  253. List<SysUserOrganization> userList = sysUserOrganizationService.selectSysUserOrganizationList(user);
  254. if (userList.size() == 0) {
  255. return AjaxResult.error("用户信息不存在");
  256. }
  257. user = userList.get(0);
  258. //收费菜单
  259. HsCanteenMenu customMenu = new HsCanteenMenu();
  260. customMenu.setPatternId(PartternIdEnum.FREEDOM.getValue());
  261. List<HsCanteenMenu> customMenus = new ArrayList<>();
  262. customMenus = hsCanteenMenuService.selectHsCanteenMenuList(customMenu);
  263. if (customMenus.size() > 0) {
  264. customMenu = customMenus.get(0);
  265. }
  266. //菜品分类判断是否可以记账
  267. HsCanteenMenu freeMenu = new HsCanteenMenu();
  268. freeMenu.setPatternId(PartternIdEnum.FREE_CREDIT.getValue());//消费模式
  269. //时间段
  270. String morningStr = sysConfigService.selectConfigByKey("morning");
  271. String noonStr = sysConfigService.selectConfigByKey("noon");
  272. String nightStr = sysConfigService.selectConfigByKey("night");
  273. Integer periodId = PeriodUtil.judgmentPeriod(date, morningStr.split(","), noonStr.split(","), nightStr.split(","));
  274. freeMenu.setPeriodId(periodId);//时段
  275. freeMenu.setUseDate(date);//使用时段
  276. List<HsCanteenMenu> freeMenus = new ArrayList<>();
  277. freeMenus = hsCanteenMenuService.selectHsCanteenMenuList(freeMenu);
  278. if (freeMenus.size() > 0) {//过滤所属角色菜单
  279. SysUserOrganization finalUser = user;
  280. freeMenus = freeMenus.stream().filter(o ->
  281. Arrays.asList(o.getConsumerType().split(",")).contains(finalUser.getUserType()))
  282. .collect(Collectors.toList());
  283. if (freeMenus.size() > 0) {
  284. List<HsCanteenMenuRegister> freeCuisines = new ArrayList<>();
  285. HsCanteenMenuRegister freeCuisine = new HsCanteenMenuRegister();
  286. freeCuisine.setMenuNumber(freeMenus.get(0).getMenuNumber());
  287. freeCuisines = hsCanteenMenuRegisterService.selectHsCanteenMenuRegisterList(freeCuisine);
  288. List<String> cuisineStr = freeCuisines.stream().map(o -> o.getCuisineNumber()).collect(Collectors.toList());
  289. req.getDetails().stream().forEach(o -> {
  290. if (cuisineStr.contains(o.getCuisineNumber())) {
  291. o.setMenuNumber(freeCuisine.getMenuNumber());
  292. freeRegs.add(o);
  293. } else {
  294. regs.add(o);
  295. }
  296. });
  297. }
  298. }
  299. if (freeRegs.size() > 0) {
  300. orderTotal = regs.stream().map(HsCanteenOrderDetail::getTotal).reduce(BigDecimal.ZERO, BigDecimal::add);
  301. if (user.getQuota().compareTo(orderTotal) < 0) {
  302. return AjaxResult.error("记账额度不足");
  303. }
  304. //生成消费记录
  305. Integral integral = new Integral();
  306. integral.setId(IdWorker.getIdStr());//积分主键
  307. integral.setMoneyType(Integer.valueOf(ConsumeChangeEnum.OFFLINEBOOKING.getValue()));//消费
  308. integral.setRechargeEquipmentCode(req.getDeviceNumber());//设备编号
  309. integral.setRechargeEquipmentName(req.getDeviceName());//设备名称
  310. integral.setLoginName(req.getUserNumber());//账号编号
  311. integral.setRechargeTime(date);//支付时间
  312. integral.setRechargeIntegral(orderTotal.negate());//积分(负数)
  313. integral.setIsDelete(0);//有效标志
  314. integral.setOrganizationCode(req.getJgid());//机构代码
  315. //记账订单
  316. HsCanteenOrder hsCanteenOrderFree = new HsCanteenOrder();
  317. BeanUtils.copyBeanProp(hsCanteenOrderFree, req);
  318. hsCanteenOrderFree.setMenuNumber(freeRegs.get(0).getMenuNumber());
  319. hsCanteenOrderFree.setOrderId(IdWorker.getIdStr());//id
  320. hsCanteenOrderFree.setPaytime(date);
  321. //获取订单编码
  322. NumberRuleReq numberRuleReq = new NumberRuleReq();
  323. numberRuleReq.setRuleId(NumberRuleEnum.ORDER.getValue());
  324. numberRuleReq.setInput(String.valueOf(DateUtil.year(date)).substring(2, 4));
  325. String number = hsSysNumberRuleService.getNumber(numberRuleReq);
  326. hsCanteenOrderFree.setOrderNumber(number);
  327. hsCanteenOrderFree.setOrderTotal(BigDecimal.ZERO);
  328. orders.add(hsCanteenOrderFree);
  329. freeRegs.stream().forEach(o -> {
  330. o.setDetailId(IdWorker.getIdStr());
  331. o.setOrderNumber(hsCanteenOrderFree.getOrderNumber());
  332. });
  333. details.addAll(freeRegs);
  334. } else {
  335. regs.addAll(req.getDetails());
  336. }
  337. if (regs.size() > 0) {//支付订单
  338. orderTotal = regs.stream().map(HsCanteenOrderDetail::getTotal).reduce(BigDecimal.ZERO, BigDecimal::add);
  339. if (user.getIntegral().compareTo(orderTotal) < 0) {
  340. return AjaxResult.error("账户积分不足");
  341. }
  342. //扣减积分
  343. user.setIntegral(user.getIntegral().subtract(orderTotal));
  344. //生成消费记录
  345. Integral integral = new Integral();
  346. integral.setId(IdWorker.getIdStr());//积分主键
  347. integral.setMoneyType(Integer.valueOf(ConsumeChangeEnum.OFFLINECONSUME.getValue()));//消费
  348. integral.setRechargeEquipmentCode(req.getDeviceNumber());//设备编号
  349. integral.setRechargeEquipmentName(req.getDeviceName());//设备名称
  350. integral.setLoginName(req.getUserNumber());//账号编号
  351. integral.setRechargeTime(date);//支付时间
  352. integral.setRechargeIntegral(orderTotal.negate());//积分(负数)
  353. integral.setIsDelete(0);//有效标志
  354. integral.setOrganizationCode(req.getJgid());//机构代码
  355. //订单
  356. HsCanteenOrder hsCanteenOrder = new HsCanteenOrder();
  357. BeanUtils.copyBeanProp(hsCanteenOrder, req);
  358. hsCanteenOrder.setOrderId(IdWorker.getIdStr());//id
  359. hsCanteenOrder.setOrderTotal(orderTotal);//订单总额
  360. hsCanteenOrder.setMenuNumber(customMenu.getMenuNumber());
  361. hsCanteenOrder.setPaytime(date);
  362. //获取订单编码
  363. NumberRuleReq numberRuleReq = new NumberRuleReq();
  364. numberRuleReq.setRuleId(NumberRuleEnum.ORDER.getValue());
  365. numberRuleReq.setInput(String.valueOf(DateUtil.year(date)).substring(2, 4));
  366. String number = hsSysNumberRuleService.getNumber(numberRuleReq);
  367. hsCanteenOrder.setOrderNumber(number);
  368. orders.add(hsCanteenOrder);
  369. //消费记录增加订单编号
  370. integral.setOrderNumber(number);
  371. integrals.add(integral);
  372. HsCanteenMenu finalCustomMenu = customMenu;
  373. regs.stream().forEach(o -> {
  374. o.setMenuNumber(finalCustomMenu.getMenuNumber());
  375. o.setDetailId(IdWorker.getIdStr());
  376. o.setOrderNumber(hsCanteenOrder.getOrderNumber());
  377. });
  378. details.addAll(regs);
  379. }
  380. try {
  381. sysUserOrganizationService.updateById(user);
  382. hsCanteenOrderService.saveBatch(orders);//订单主表
  383. hsCanteenOrderDetailService.saveBatch(details);//订单明细
  384. integralService.saveBatch(integrals);
  385. } catch (Exception e) {
  386. throw new BaseException("保存失败");
  387. }
  388. return AjaxResult.success("保存成功");
  389. }
  390. /**
  391. * 获取待取订单
  392. *
  393. * @return
  394. */
  395. @RequestMapping("/getOrder")
  396. @ResponseBody
  397. public AjaxResult getOrder(@RequestBody CustomReq req) {
  398. String token = "login_tokens:" + req.getToken();
  399. LoginUser user = redisCache.getCacheObject(token);
  400. if (user == null) {
  401. throw new BaseException("不存在用户信息");
  402. }
  403. //设备信息
  404. // Device device = new Device();
  405. // device.setDeviceNo(req.getDeviceNo());
  406. // device.setDeviceOrgId(req.getJgid());
  407. // List<Device> deviceList = deviceService.selectDeviceList(device);
  408. // if (CollectionUtil.isEmpty(deviceList)) {
  409. // return AjaxResult.error("不存在设备信息");
  410. // }
  411. // device = deviceList.get(0);
  412. //返回值
  413. UsableOrderResp usableOrderResp = new UsableOrderResp();
  414. //查询参数
  415. Date date = new Date();
  416. //时间段
  417. String morningStr = sysConfigService.selectConfigByKey("morning");
  418. String noonStr = sysConfigService.selectConfigByKey("noon");
  419. String nightStr = sysConfigService.selectConfigByKey("night");
  420. Integer periodId = PeriodUtil.judgmentPeriod(date, morningStr.split(","), noonStr.split(","), nightStr.split(","));
  421. String dateStr = DateUtil.formatDate(date);
  422. CustomGetOrderVo customGetOrderVo = new CustomGetOrderVo();
  423. customGetOrderVo.setPeriodId(periodId);
  424. customGetOrderVo.setUseDate(dateStr);
  425. customGetOrderVo.setUserNumber(user.getUsername());
  426. customGetOrderVo.setJgid(req.getJgid());
  427. customGetOrderVo.setPlaceNumber(req.getPlaceNumber());
  428. //查询订单信息
  429. CustomGetOrderResp order = new CustomGetOrderResp();
  430. List<CustomGetOrderResp> orders = hsCanteenOrderService.getOrderNow(customGetOrderVo);
  431. orders = orders.stream().filter(o -> o.getZfbz() == 0).collect(Collectors.toList());
  432. if (orders.size() > 0) {//订单详情
  433. order = orders.get(0);
  434. BeanUtils.copyBeanProp(usableOrderResp, order);
  435. HsCanteenOrderDetail detail = new HsCanteenOrderDetail();
  436. detail.setOrderNumber(order.getOrderNumber());
  437. List<HsCanteenOrderDetail> details;
  438. details = hsCanteenOrderDetailService.selectHsCanteenOrderDetailList(detail);
  439. if (details.size() > 0) {
  440. usableOrderResp.setDetails(details);
  441. HsCanteenOrder o = new HsCanteenOrder();
  442. o.setOrderNumber(order.getOrderNumber());
  443. List<HsCanteenOrder> os = new ArrayList<>();
  444. os = hsCanteenOrderService.selectHsCanteenOrderList(o);
  445. if (os.size() > 0) {
  446. o = os.get(0);
  447. o.setZfbz(2);
  448. hsCanteenOrderService.saveOrUpdate(o);
  449. }
  450. } else {
  451. throw new BaseException("此订单没有菜品");
  452. }
  453. SysUser sysUser = sysUserService.selectUserByUserName(usableOrderResp.getUserNumber());
  454. if (null != sysUser) {
  455. usableOrderResp.setNickName(sysUser.getNickName());
  456. } else {
  457. usableOrderResp.setNickName(usableOrderResp.getUserNumber());
  458. }
  459. return AjaxResult.success(usableOrderResp);
  460. } else {
  461. throw new BaseException("没有订单信息");
  462. }
  463. }
  464. /**
  465. * 完成订单
  466. *
  467. * @param orderNumber
  468. * @param jgid
  469. * @return
  470. */
  471. @RequestMapping("/completeOrder")
  472. @ResponseBody
  473. public AjaxResult CompleteOrder(String orderNumber, String jgid) {
  474. HsCanteenOrder order = new HsCanteenOrder();
  475. order.setOrderNumber(orderNumber);
  476. order.setJgid(jgid);
  477. List<HsCanteenOrder> orders = hsCanteenOrderService.selectHsCanteenOrderList(order);
  478. orders = orders.stream().filter(o -> o.getZfbz() == 0).collect(Collectors.toList());
  479. if (orders.size() > 0) {
  480. order = orders.get(0);
  481. order.setZfbz(2);
  482. hsCanteenOrderService.saveOrUpdate(order);
  483. } else {
  484. return AjaxResult.error("订单信息不存在");
  485. }
  486. return AjaxResult.success("完成订单");
  487. }
  488. /**
  489. * 已取餐未取餐数量
  490. *
  491. * @return
  492. */
  493. @RequestMapping("/getOrdersState")
  494. @ResponseBody
  495. public AjaxResult getState(@RequestBody CustomReq req) {
  496. Map<String, Object> result = new HashMap<>();
  497. Date date = new Date();
  498. //时间段
  499. String morningStr = sysConfigService.selectConfigByKey("morning");
  500. String noonStr = sysConfigService.selectConfigByKey("noon");
  501. String nightStr = sysConfigService.selectConfigByKey("night");
  502. Integer periodId = PeriodUtil.judgmentPeriod(date, morningStr.split(","),
  503. noonStr.split(","),
  504. nightStr.split(","));
  505. String dateStr = DateUtil.formatDate(date);
  506. CustomGetOrderVo customGetOrderVo = new CustomGetOrderVo();
  507. customGetOrderVo.setPeriodId(periodId);
  508. customGetOrderVo.setUseDate(dateStr);
  509. customGetOrderVo.setJgid(req.getJgid());
  510. customGetOrderVo.setPlaceNumber(req.getPlaceNumber());
  511. //查询订单信息
  512. List<CustomGetOrderResp> orders = hsCanteenOrderService.getOrderNow(customGetOrderVo);
  513. result.put("orders", orders);
  514. if (0 == orders.size()) {
  515. return AjaxResult.success(result);
  516. }
  517. CustomGetOrderResp menuNow = hsCanteenOrderService.getMenuNow(customGetOrderVo);
  518. result.put("menu", menuNow);
  519. if (menuNow != null) {
  520. List<HsCanteenOrderDetail> orderDetails = hsCanteenOrderDetailService.getBaseMapper().selectList(new QueryWrapper<HsCanteenOrderDetail>()
  521. .eq("menu_number", menuNow.getMenuNumber()));
  522. result.put("orderDetails", orderDetails);
  523. }
  524. Map<Integer, List<CustomGetOrderResp>> groupMap = orders.stream().collect(Collectors.groupingBy(CustomGetOrderResp::getZfbz));
  525. //未取餐
  526. result.put("wait", orders.size());
  527. //已取餐
  528. if (groupMap.get(2) != null) {
  529. result.put("finish", groupMap.get(2).size());
  530. } else {
  531. result.put("finish", 0);
  532. }
  533. return AjaxResult.success(result);
  534. }
  535. /**
  536. * 定时上传取餐数据
  537. *
  538. * @return
  539. */
  540. @RequestMapping("/timing/upload/getFoodData")
  541. public AjaxResult timingUpLoadGetFoodData(@RequestBody GetFoodUpLoadVo getFoodUpLoad) {
  542. List<HsCanteenOrder> ordersUpdate = new ArrayList<>(16);
  543. List<String> numbers = new ArrayList<String>();
  544. List<String> numbersUpdate = new ArrayList<String>();
  545. if (getFoodUpLoad.getList().size() <= 0) {
  546. return AjaxResult.error();
  547. }
  548. for (GetFoodUpLoadItemVo food : getFoodUpLoad.getList()) {
  549. numbers.add(food.getOrderNumber());
  550. }
  551. List<HsCanteenOrder> orders = hsCanteenOrderService.getBaseMapper().selectList(
  552. new QueryWrapper<HsCanteenOrder>().in("order_number", numbers));
  553. orders.forEach(order -> {
  554. for (GetFoodUpLoadItemVo food : getFoodUpLoad.getList()) {
  555. if (StringUtils.equals(order.getOrderNumber(), food.getOrderNumber()) &&
  556. order.getZfbz() != 2) {
  557. order.setZfbz(2);
  558. ordersUpdate.add(order);
  559. numbersUpdate.add(order.getOrderNumber());
  560. }
  561. }
  562. });
  563. if (0 < ordersUpdate.size()) {
  564. if (hsCanteenOrderService.updateBatchById(ordersUpdate)) {
  565. return AjaxResult.success(numbersUpdate);
  566. }
  567. } else {
  568. return AjaxResult.error("ALL Data Already Update Please Remove");
  569. }
  570. return AjaxResult.error();
  571. }
  572. }