AppController.java 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739
  1. package com.willalp.web.controller.app;
  2. import cn.hutool.core.collection.CollectionUtil;
  3. import cn.hutool.core.date.DateUtil;
  4. import cn.hutool.core.util.ArrayUtil;
  5. import cn.hutool.core.util.StrUtil;
  6. import com.baomidou.mybatisplus.core.toolkit.IdWorker;
  7. import com.willalp.app.service.IHsAppHomeService;
  8. import com.willalp.canteen.domain.*;
  9. import com.willalp.canteen.domain.req.AppGetCuisinesReq;
  10. import com.willalp.canteen.domain.req.AppOrderPaymentReq;
  11. import com.willalp.canteen.domain.req.GiftCustomPayReq;
  12. import com.willalp.canteen.domain.resp.CuisineListResp;
  13. import com.willalp.canteen.service.*;
  14. import com.willalp.common.core.controller.BaseController;
  15. import com.willalp.common.core.domain.AjaxResult;
  16. import com.willalp.common.core.domain.entity.SysUser;
  17. import com.willalp.common.core.page.TableDataInfo;
  18. import com.willalp.common.enums.ConsumeChangeEnum;
  19. import com.willalp.common.enums.NumberRuleEnum;
  20. import com.willalp.common.enums.PartternIdEnum;
  21. import com.willalp.common.enums.PlaceEnum;
  22. import com.willalp.common.exception.base.BaseException;
  23. import com.willalp.common.utils.DateUtils;
  24. import com.willalp.common.utils.SecurityUtils;
  25. import com.willalp.common.utils.bean.BeanUtils;
  26. import com.willalp.consume.domain.ConsumeMaintain;
  27. import com.willalp.consume.service.IConsumeMaintainService;
  28. import com.willalp.files.domain.HsOrgPersonnelFiles;
  29. import com.willalp.files.service.IHsOrgPersonnelFilesService;
  30. import com.willalp.framework.web.service.SysLoginService;
  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.push.service.IHsAppPushService;
  36. import com.willalp.system.domain.SysCardInfo;
  37. import com.willalp.system.domain.SysUserOrganization;
  38. import com.willalp.system.domain.req.AppLoginReq;
  39. import com.willalp.system.domain.req.AppSysReq;
  40. import com.willalp.system.domain.resp.AppUserResp;
  41. import com.willalp.system.domain.resp.OrganizationListResp;
  42. import com.willalp.system.service.*;
  43. import com.willalp.wx.domain.WxMsgTemplateTakeFood;
  44. import com.willalp.wx.enums.WxTemplateKeyEnum;
  45. import com.willalp.wx.service.WxMsgService;
  46. import com.willalp.wx.utils.WxUtils;
  47. import io.swagger.annotations.Api;
  48. import io.swagger.annotations.ApiOperation;
  49. import io.swagger.annotations.ApiParam;
  50. import org.springframework.beans.factory.annotation.Autowired;
  51. import org.springframework.transaction.annotation.Transactional;
  52. import org.springframework.web.bind.annotation.*;
  53. import javax.annotation.Resource;
  54. import java.util.*;
  55. import java.util.stream.Collectors;
  56. @Api("app接口")
  57. @RestController
  58. @RequestMapping("/app")
  59. public class AppController extends BaseController {
  60. @Autowired
  61. IHsCanteenMenuService hsCanteenMenuService;
  62. @Autowired
  63. IHsCanteenMenuRegisterService hsCanteenMenuRegisterService;
  64. @Autowired
  65. IHsSysNumberRuleService hsSysNumberRuleService;
  66. @Autowired
  67. IHsCanteenOrderService hsCanteenOrderService;
  68. @Autowired
  69. IHsCanteenOrderDetailService hsCanteenOrderDetailService;
  70. @Autowired
  71. ISysUserService sysUserService;
  72. @Autowired
  73. IIntegralService integralService;
  74. @Autowired
  75. IConsumeMaintainService consumeMaintainService;
  76. @Autowired
  77. ISysCardInfoService sysCardInfoService;
  78. @Autowired
  79. SysLoginService loginService;
  80. @Autowired
  81. ISysConfigService sysConfigService;
  82. @Autowired
  83. ISysUserOrganizationService sysUserOrganizationService;
  84. @Autowired
  85. private ISysUserService userService;
  86. @Autowired
  87. private IHsCanteenDiningPlaceService hsCanteenDiningPlaceService;
  88. @Autowired
  89. private IHsGiftService hsGiftService;
  90. @Resource
  91. private ISysNoticeService noticeService;
  92. @Resource
  93. private IHsAppHomeService hsAppHomeService;
  94. @Resource
  95. private WxMsgService wxMsgService;
  96. @Resource
  97. private WxUtils wxUtils;
  98. /**
  99. * 获取首页配置数据
  100. *
  101. * @param orgCode
  102. * @return
  103. */
  104. @ApiOperation("获取首页配置数据")
  105. @GetMapping("/getHomeConfigData")
  106. public AjaxResult getHomeConfigData(@RequestParam(value = "orgCode", required = false)
  107. @ApiParam("机构编号") String orgCode) {
  108. return AjaxResult.success(hsAppHomeService.getHomeConfigData(orgCode).get("data"));
  109. }
  110. /**
  111. * 查询菜品
  112. *
  113. * @param appGetCuisinesReq
  114. * @return
  115. */
  116. @ApiOperation("获取菜品")
  117. @RequestMapping("/cuisines")
  118. @ResponseBody
  119. public AjaxResult getMenuCuisines(@RequestBody AppGetCuisinesReq appGetCuisinesReq) {
  120. Map<String, Object> result = new HashMap<>();
  121. HsCanteenMenu hsCanteenMenu = new HsCanteenMenu();
  122. BeanUtils.copyBeanProp(hsCanteenMenu, appGetCuisinesReq);
  123. hsCanteenMenu.setConsumerType(null);
  124. List<HsCanteenMenu> menus = hsCanteenMenuService.selectHsCanteenMenuList(hsCanteenMenu);
  125. menus = menus.stream().filter(o ->
  126. Arrays.asList(o.getConsumerType().split(",")).contains(String.valueOf(appGetCuisinesReq.getConsumerType())))
  127. .collect(Collectors.toList());
  128. if (menus.size() > 0) {
  129. result.put("patternId", menus.get(0).getPatternId());
  130. result.put("menuNumber", menus.get(0).getMenuNumber());
  131. result.put("periodId", menus.get(0).getPeriodId());
  132. result.put("maxCount", menus.get(0).getMaxCount());
  133. List<CuisineListResp> registers = new ArrayList<>();
  134. Integer limit = Integer.valueOf(sysConfigService.selectConfigByKey("app.canteen.limit"));
  135. if (limit == 1) {
  136. //判断限制
  137. ConsumeMaintain consumeMaintain = new ConsumeMaintain();
  138. consumeMaintain.setMenuNumber(menus.get(0).getMenuNumber());
  139. List<ConsumeMaintain> cons = new ArrayList<>();
  140. cons = consumeMaintainService.selectConsumeMaintainList(consumeMaintain);
  141. if (cons.size() > 0) {//有限制
  142. consumeMaintain = cons.get(0);
  143. String begin = DateUtils.parseDateToStr("yyyy-MM-dd", consumeMaintain.getSendTime()) + " " + consumeMaintain.getBeginDate() + ":00";
  144. String end = DateUtils.parseDateToStr("yyyy-MM-dd", consumeMaintain.getSendTime()) + " " + consumeMaintain.getEndDate() + ":00";
  145. if (DateUtil.isIn(new Date(), DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", begin), DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", end))) {
  146. HsCanteenMenuRegister register = new HsCanteenMenuRegister();
  147. register.setMenuNumber(menus.get(0).getMenuNumber());
  148. registers = hsCanteenMenuRegisterService.selectCuisineList(register, 0, 0);
  149. } else {
  150. return AjaxResult.error("菜单不在可选时间内");
  151. }
  152. } else {
  153. return AjaxResult.error("菜单未维护限制时间");
  154. }
  155. } else {
  156. HsCanteenMenuRegister register = new HsCanteenMenuRegister();
  157. register.setMenuNumber(menus.get(0).getMenuNumber());
  158. registers = hsCanteenMenuRegisterService.selectCuisineList(register, 0, 0);
  159. }
  160. // Integer maximum = Integer.valueOf(sysConfigService.selectConfigByKey("app.canteen.maximum"));
  161. // registers = registers.stream().map(item -> {
  162. //// if (item.getCuisinePicture() != null) {
  163. //// item.setCuisinePicture("http://" + getIp() + item.getCuisinePicture());
  164. //// }
  165. // //设置菜品最大数量
  166. // item.setMaximum(maximum);
  167. // return item;
  168. // }).collect(Collectors.toList());
  169. result.put("registers", registers);
  170. return AjaxResult.success(result);
  171. }
  172. return AjaxResult.error("菜单不存在");
  173. }
  174. /**
  175. * 查询菜品
  176. *
  177. * @param appGetCuisinesReq
  178. * @return
  179. */
  180. @ApiOperation("获取菜品2")
  181. @RequestMapping("/getCuisines")
  182. @ResponseBody
  183. public AjaxResult getMenuCuisinesLimit(@RequestBody AppGetCuisinesReq appGetCuisinesReq) {
  184. List<Map<String, Object>> resp = new ArrayList<>();
  185. //根据当前日期查找符合要求菜单
  186. ConsumeMaintain consumeMaintain = new ConsumeMaintain();
  187. consumeMaintain.setOrganizationCode(appGetCuisinesReq.getJgid());
  188. List<ConsumeMaintain> cons = new ArrayList<>();
  189. cons = consumeMaintainService.selectConsumeMaintainList(consumeMaintain);
  190. cons = cons.stream().filter(o ->
  191. DateUtil.isIn(new Date(),
  192. DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", DateUtils.parseDateToStr("yyyy-MM-dd", o.getSendTime()) + " " + o.getBeginDate() + ":00"),
  193. DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", DateUtils.parseDateToStr("yyyy-MM-dd", o.getSendTime()) + " " + o.getEndDate() + ":00")
  194. )
  195. ).collect(Collectors.toList());
  196. List<String> nums = cons.stream().map(ConsumeMaintain::getMenuNumber).collect(Collectors.toList());
  197. if (nums.size() == 0) {
  198. return AjaxResult.error("当前时间无内容");
  199. }
  200. List<HsCanteenMenu> menus = hsCanteenMenuService.selectAppMenuList(nums, appGetCuisinesReq.getJgid());
  201. menus = menus.stream().filter(o ->
  202. Arrays.asList(o.getConsumerType().split(",")).contains(String.valueOf(appGetCuisinesReq.getConsumerType())))
  203. .collect(Collectors.toList());
  204. if (menus.size() == 0) {
  205. return AjaxResult.error("不存在符合条件菜单");
  206. }
  207. menus.stream().forEach(o -> {
  208. Map<String, Object> result = new HashMap<>();
  209. result.put("patternId", o.getPatternId());
  210. result.put("menuNumber", o.getMenuNumber());
  211. result.put("periodId", o.getPeriodId());
  212. result.put("menuName", o.getMenuName());
  213. result.put("useDate", o.getUseDate());
  214. result.put("jgid", o.getJgid());
  215. result.put("maxCount", o.getMaxCount());
  216. HsCanteenMenuRegister register = new HsCanteenMenuRegister();
  217. register.setMenuNumber(o.getMenuNumber());
  218. register.setJgid(o.getJgid());
  219. List<CuisineListResp> registers = hsCanteenMenuRegisterService.selectCuisineList(register, 0, 0);
  220. // if (registers.size() > 0) {
  221. // Integer maximum = Integer.valueOf(sysConfigService.selectConfigByKey("app.canteen.maximum"));
  222. // registers = registers.stream().map(item -> {
  223. // item.setMaximum(maximum);
  224. // return item;
  225. // }).collect(Collectors.toList());
  226. result.put("registers", registers);
  227. resp.add(result);
  228. // }
  229. });
  230. return AjaxResult.success(resp);
  231. }
  232. /**
  233. * 下单
  234. *
  235. * @param appOrderPaymentReq
  236. * @return
  237. */
  238. @RequestMapping("/order")
  239. @ResponseBody
  240. @Transactional(rollbackFor = Exception.class)
  241. public AjaxResult orderPayment(@RequestBody AppOrderPaymentReq appOrderPaymentReq) {
  242. HsCanteenOrder hsCanteenOrder = new HsCanteenOrder();//订单
  243. Integral integral = new Integral();//消费记录
  244. //验证订单唯一性
  245. List<HsCanteenOrder> existOrders = new ArrayList<>();
  246. HsCanteenOrder existOrder = new HsCanteenOrder();
  247. existOrder.setUserNumber(appOrderPaymentReq.getUserNumber());
  248. existOrder.setMenuNumber(appOrderPaymentReq.getMenuNumber());
  249. existOrder.setJgid(appOrderPaymentReq.getJgid());
  250. existOrders = hsCanteenOrderService.selectHsCanteenOrderList(existOrder);
  251. existOrders = existOrders.stream().filter(o -> o.getZfbz() != 1).collect(Collectors.toList());
  252. if (existOrders.size() > 0) {
  253. return AjaxResult.error("用户已有此餐订单");
  254. }
  255. //验证用户
  256. SysUserOrganization user = new SysUserOrganization();
  257. user.setLoginName(appOrderPaymentReq.getUserNumber());
  258. user.setOrganizationCode(appOrderPaymentReq.getJgid());
  259. List<SysUserOrganization> userList = sysUserOrganizationService.selectSysUserOrganizationList(user);
  260. if (userList.size() == 0) {
  261. return AjaxResult.error("用户信息不存在");
  262. }
  263. user = userList.get(0);
  264. //生成消费记录
  265. integral.setId(IdWorker.getIdStr());//积分主键
  266. integral.setRechargeEquipmentCode(appOrderPaymentReq.getDeviceNumber());//设备编号
  267. integral.setRechargeEquipmentName(appOrderPaymentReq.getDeviceName());//设备名称
  268. integral.setLoginName(appOrderPaymentReq.getUserNumber());//账号编号
  269. integral.setRechargeTime(appOrderPaymentReq.getPaytime());//支付时间
  270. integral.setRechargeIntegral(appOrderPaymentReq.getOrderTotal().negate());//积分(负数)
  271. integral.setIsDelete(0);//有效标志
  272. integral.setNickName(user.getNickName());
  273. integral.setOrganizationCode(appOrderPaymentReq.getJgid());//机构代码
  274. if (appOrderPaymentReq.getPatternId() == PartternIdEnum.RESERVE.getValue()) {//预定消费模式扣减积分
  275. if (user.getIntegral().compareTo(appOrderPaymentReq.getOrderTotal()) < 0) {
  276. return AjaxResult.error("账户积分不足");
  277. }
  278. //扣减积分
  279. user.setIntegral(user.getIntegral().subtract(appOrderPaymentReq.getOrderTotal()));
  280. //消费标志
  281. hsCanteenOrder.setConsumeSign(0);
  282. integral.setMoneyType(Integer.valueOf(ConsumeChangeEnum.ONLINECONSUME.getValue()));//消费
  283. } else {
  284. if (user.getQuota().compareTo(appOrderPaymentReq.getOrderTotal()) < 0) {
  285. return AjaxResult.error("记账额度不足");
  286. }
  287. //扣减积分
  288. user.setQuota(user.getQuota().subtract(appOrderPaymentReq.getOrderTotal()));
  289. //记账标志
  290. hsCanteenOrder.setConsumeSign(1);
  291. integral.setMoneyType(Integer.valueOf(ConsumeChangeEnum.ONLINEBOOKING.getValue()));//消费
  292. }
  293. //订单
  294. BeanUtils.copyBeanProp(hsCanteenOrder, appOrderPaymentReq);
  295. //获取id
  296. hsCanteenOrder.setOrderId(IdWorker.getIdStr());
  297. //获取订单编码
  298. NumberRuleReq numberRuleReq = new NumberRuleReq();
  299. numberRuleReq.setRuleId(NumberRuleEnum.ORDER.getValue());
  300. numberRuleReq.setInput(String.valueOf(DateUtil.year(appOrderPaymentReq.getPaytime())).substring(2, 4));
  301. String number = hsSysNumberRuleService.getNumber(numberRuleReq);
  302. hsCanteenOrder.setOrderNumber(number);
  303. //订单详情
  304. if (appOrderPaymentReq.getDetails() == null) {
  305. return AjaxResult.error("订单明细不能为空");
  306. }
  307. appOrderPaymentReq.getDetails().stream().forEach(o -> {
  308. o.setDetailId(IdWorker.getIdStr());
  309. o.setOrderNumber(hsCanteenOrder.getOrderNumber());
  310. });
  311. try {
  312. WxMsgTemplateTakeFood wxMsgTemplateTakeFood = new WxMsgTemplateTakeFood();
  313. wxMsgTemplateTakeFood.setPhrase14(wxUtils.getFormat("待取餐"));
  314. wxMsgTemplateTakeFood.setTime8(wxUtils.getFormat(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", appOrderPaymentReq.getPaytime())));
  315. StringBuilder de = new StringBuilder();
  316. for (HsCanteenOrderDetail detail : appOrderPaymentReq.getDetails()) {
  317. de.append("【").append(detail.getCuisineName()).append("】");
  318. }
  319. wxMsgTemplateTakeFood.setThing16(wxUtils.getFormat(de.toString()));
  320. wxMsgTemplateTakeFood.setAmount11(wxUtils.getFormat(String.valueOf(appOrderPaymentReq.getOrderTotal())));
  321. wxMsgService.sendQRCodeMsg(appOrderPaymentReq.getUserNumber(), wxMsgTemplateTakeFood, WxTemplateKeyEnum.TAKE_FOOD, true);
  322. sysUserOrganizationService.updateById(user);//更新账户信息
  323. hsCanteenOrderService.save(hsCanteenOrder);//订单主表
  324. hsCanteenOrderDetailService.saveBatch(appOrderPaymentReq.getDetails());//订单明细
  325. integral.setOrderNumber(hsCanteenOrder.getOrderNumber());
  326. integralService.save(integral);
  327. } catch (Exception e) {
  328. e.printStackTrace();
  329. throw new BaseException("保存失败");
  330. }
  331. return AjaxResult.success("保存成功");
  332. }
  333. /**
  334. * 获取用户
  335. *
  336. * @param sys
  337. * @return
  338. */
  339. @RequestMapping("/getUser")
  340. @ResponseBody
  341. public AjaxResult getUser(@RequestBody AppSysReq sys) {
  342. SysUser user = new SysUser();
  343. user.setUserName(sys.getUserName());
  344. if (StrUtil.isBlank(sys.getOrganizationCode())) {
  345. return AjaxResult.error("机构代码不能为空");
  346. }
  347. user.setOrganizationCode(sys.getOrganizationCode());
  348. AppUserResp userResp = sysUserService.selectAppUserList(user);
  349. if (userResp == null) {
  350. return AjaxResult.error("暂未绑定机构或绑定已到期");
  351. }
  352. // if (StrUtil.isNotBlank(user.getAvatar())) {
  353. // user.setAvatar("http://" + getIp() + user.getAvatar());
  354. // }
  355. return AjaxResult.success(userResp);
  356. }
  357. /**
  358. * 获取订单信息
  359. *
  360. * @param sys
  361. * @return
  362. */
  363. @RequestMapping("/getOrder")
  364. @ResponseBody
  365. public TableDataInfo getOrder(@RequestBody AppSysReq sys) {
  366. startPage();
  367. List<HsCanteenOrder> orders = new ArrayList<>();
  368. HsCanteenOrder order = new HsCanteenOrder();
  369. order.setUserNumber(sys.getUserName());
  370. order.setJgid(sys.getOrganizationCode());
  371. orders = hsCanteenOrderService.selectHsCanteenOrderList(order);
  372. orders.sort(Comparator.comparing(HsCanteenOrder::getPaytime).reversed());
  373. return getDataTable(getPage().setRecords(orders));
  374. }
  375. /**
  376. * 获取订单信息详情
  377. *
  378. * @param sys
  379. * @return
  380. */
  381. @RequestMapping("/getOrderDetail")
  382. @ResponseBody
  383. public TableDataInfo getOrderDetail(@RequestBody AppSysReq sys) {
  384. startPage();
  385. List<HsCanteenOrderDetail> details = new ArrayList<>();
  386. HsCanteenOrderDetail detail = new HsCanteenOrderDetail();
  387. detail.setOrderNumber(sys.getOrderNumber());
  388. detail.setJgid(sys.getOrganizationCode());
  389. details = hsCanteenOrderDetailService.selectHsCanteenOrderDetailList(detail);
  390. return getDataTable(details);
  391. }
  392. /**
  393. * 获取充值历史记录
  394. *
  395. * @param req
  396. * @return
  397. */
  398. @RequestMapping("/getRecharge")
  399. @ResponseBody
  400. public TableDataInfo getRecharge(@RequestBody AppSysReq req) {
  401. startPage();
  402. List<Integral> integrals = new ArrayList<>();
  403. Integral integral = new Integral();
  404. integral.setLoginName(req.getUserName());
  405. integral.setOrganizationCode(req.getOrganizationCode());
  406. integrals = integralService.selectIntegralList(integral);
  407. int[] typeArr = {1, 2, 3, 4, 5, 6, 7, 8};
  408. integrals = integrals.stream().filter(o -> ArrayUtil.contains(typeArr, o.getMoneyType())).collect(Collectors.toList());
  409. return getDataTable(integrals);
  410. }
  411. /**
  412. * 获取用户卡片
  413. *
  414. * @param req
  415. * @return
  416. */
  417. @RequestMapping("/getCardInfo")
  418. @ResponseBody
  419. public AjaxResult getCardInfo(@RequestBody AppSysReq req) {
  420. List<SysCardInfo> cardInfos = new ArrayList<>();
  421. SysCardInfo cardInfo = new SysCardInfo();
  422. cardInfo.setOrganizationCode(req.getOrganizationCode());
  423. cardInfo.setUserId(req.getUserName());
  424. cardInfos = sysCardInfoService.selectSysCardInfoList(cardInfo);
  425. if (cardInfos.size() > 0) {
  426. cardInfo = cardInfos.get(0);
  427. }
  428. return AjaxResult.success(cardInfo);
  429. }
  430. @Resource
  431. private IHsAppPushService pushService;
  432. /**
  433. * 登录接口(token永久有效)
  434. *
  435. * @param loginBody
  436. * @return
  437. */
  438. @RequestMapping("/login")
  439. @ResponseBody
  440. public AjaxResult login(@RequestBody AppLoginReq loginBody) {
  441. AjaxResult ajax = AjaxResult.success();
  442. if (loginBody.getLoginType().equals("1")) {
  443. SysUser info = userService.getUserByPhone(loginBody.getUsername());
  444. if (info == null) {
  445. return AjaxResult.error("用户信息不存在");
  446. }
  447. loginBody.setUsername(info.getUserName());
  448. }
  449. loginService.appLogin(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
  450. loginBody.getUuid(), ajax);
  451. return ajax;
  452. }
  453. /**
  454. * app退单接口
  455. *
  456. * @param orderNumber
  457. * @return
  458. */
  459. @RequestMapping("/back")
  460. @ResponseBody
  461. @Transactional(rollbackFor = Exception.class)
  462. public AjaxResult back(String orderNumber) {
  463. HsCanteenOrder order = new HsCanteenOrder();
  464. order.setOrderNumber(orderNumber);
  465. List<HsCanteenOrder> orders;
  466. orders = hsCanteenOrderService.selectHsCanteenOrderList(order);
  467. if (orders.size() > 0) {
  468. order = orders.get(0);
  469. //判断时间是否在时间内
  470. ConsumeMaintain consumeMaintain = new ConsumeMaintain();
  471. consumeMaintain.setMenuNumber(order.getMenuNumber());
  472. List<ConsumeMaintain> cons = new ArrayList<>();
  473. cons = consumeMaintainService.selectConsumeMaintainList(consumeMaintain);
  474. if (cons.size() > 0) {//有限制
  475. consumeMaintain = cons.get(0);
  476. String begin = DateUtils.parseDateToStr("yyyy-MM-dd", consumeMaintain.getSendTime()) + " " + consumeMaintain.getBeginDate() + ":00";
  477. String end = DateUtils.parseDateToStr("yyyy-MM-dd", consumeMaintain.getSendTime()) + " " + consumeMaintain.getEndDate() + ":00";
  478. if (!DateUtil.isIn(new Date(), DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", begin), DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", end))) {
  479. return AjaxResult.error("订单已过可退时间,请联系管理员");
  480. }
  481. }
  482. //处理订单信息
  483. if (order.getZfbz() == 1) {
  484. return AjaxResult.error("该订单已作废,不可重复作废");
  485. }
  486. try {
  487. SysUserOrganization user = new SysUserOrganization();
  488. user.setLoginName(order.getUserNumber());
  489. user.setOrganizationCode(order.getJgid());
  490. List<SysUserOrganization> userList = sysUserOrganizationService.selectSysUserOrganizationList(user);
  491. if (userList.size() == 0) {
  492. return AjaxResult.error("用户信息不存在");
  493. }
  494. user = userList.get(0);
  495. //生成作废消费记录
  496. Integral integral = new Integral();
  497. integral.setId(IdWorker.getIdStr());//积分主键
  498. integral.setMoneyType(Integer.valueOf(ConsumeChangeEnum.REFUND.getValue()));//退还
  499. integral.setRechargeEquipmentCode(order.getDeviceNumber());//设备编号
  500. integral.setRechargeEquipmentName(order.getDeviceName());//设备名称
  501. integral.setLoginName(order.getUserNumber());//账号编号
  502. integral.setRechargeTime(new Date());//作废时间
  503. integral.setRechargeIntegral(order.getOrderTotal());//积分
  504. integral.setIsDelete(0);//有效标志
  505. integral.setNickName(user.getNickName());
  506. integral.setOrganizationCode(order.getJgid());//机构代码
  507. integral.setOrderNumber(order.getOrderNumber());
  508. //更新余额
  509. if (order.getConsumeSign() == 0) {
  510. //扣减积分
  511. user.setIntegral(user.getIntegral().add(order.getOrderTotal()));
  512. } else {
  513. user.setQuota(user.getQuota().add(order.getOrderTotal()));
  514. }
  515. //订单状态
  516. order.setZfbz(1);
  517. order.setZfsj(new Date());
  518. //update
  519. hsCanteenOrderService.updateById(order);
  520. integralService.save(integral);
  521. sysUserOrganizationService.updateById(user);
  522. } catch (Exception e) {
  523. throw new BaseException("作废失败");
  524. }
  525. return AjaxResult.success("作废成功");
  526. }
  527. return AjaxResult.error("订单信息不存在");
  528. }
  529. /**
  530. * app获取用户机构
  531. *
  532. * @return
  533. */
  534. @RequestMapping("/getOrganization")
  535. @ResponseBody
  536. public AjaxResult getOrganizationByUserName(@RequestBody AppSysReq req) {
  537. List<OrganizationListResp> resp = sysUserOrganizationService.getOrganizationByUserName(req.getUserName());
  538. return AjaxResult.success(resp);
  539. }
  540. @RequestMapping("/add")
  541. @ResponseBody
  542. public AjaxResult add(@RequestBody SysUser user) {
  543. // if (StringUtils.isNotEmpty(user.getPhonenumber())
  544. // && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
  545. // return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
  546. // } else if (StringUtils.isNotEmpty(user.getEmail())
  547. // && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
  548. // return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
  549. // }
  550. user.setCreateBy("app");
  551. user.setUserType("1");
  552. user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
  553. HsOrgPersonnelFiles opf = new HsOrgPersonnelFiles();
  554. opf.setUserCode(user.getUserName());
  555. opf.setPhone(user.getPhonenumber());
  556. opf.setOrgCode("G00000007");
  557. orgPersonnelFilesService.save(opf);
  558. return AjaxResult.success(userService.insertUser(user));
  559. }
  560. @RequestMapping("/getPlace")
  561. @ResponseBody
  562. public AjaxResult getPlace(@RequestBody AppSysReq req) {
  563. HsCanteenDiningPlace place = new HsCanteenDiningPlace();
  564. List<HsCanteenDiningPlace> list;
  565. place.setJgid(req.getOrganizationCode());
  566. place.setPlaceType(PlaceEnum.CANTEEN.getValue());
  567. place.setParentId(null);
  568. list = hsCanteenDiningPlaceService.selectHsCanteenDiningPlaceList(place);
  569. List<Long> ids = list.stream().map(HsCanteenDiningPlace::getParentId).collect(Collectors.toList());
  570. list = list.stream().filter(o -> !ids.contains(o.getId())).collect(Collectors.toList());
  571. return AjaxResult.success(list);
  572. }
  573. /**
  574. * 积分商城礼品列表
  575. *
  576. * @param req
  577. * @return
  578. */
  579. @RequestMapping("/getGift")
  580. @ResponseBody
  581. public AjaxResult getGift(@RequestBody AppSysReq req) {
  582. HsGift hsGift = new HsGift();
  583. hsGift.setJgid(req.getOrganizationCode());
  584. List<HsGift> gifts = hsGiftService.selectHsGiftList(hsGift);
  585. return AjaxResult.success(gifts);
  586. }
  587. /**
  588. * 积分商城下单
  589. *
  590. * @param req
  591. * @return
  592. */
  593. @Transactional(rollbackFor = Exception.class)
  594. @RequestMapping("giftOrder")
  595. @ResponseBody
  596. public AjaxResult giftOrder(@RequestBody GiftCustomPayReq req) {
  597. //验证用户
  598. SysUserOrganization user = new SysUserOrganization();
  599. user.setLoginName(req.getUserNumber());
  600. user.setOrganizationCode(req.getJgid());
  601. List<SysUserOrganization> userList = sysUserOrganizationService.selectSysUserOrganizationList(user);
  602. if (userList.size() == 0) {
  603. return AjaxResult.error("用户信息不存在");
  604. }
  605. user = userList.get(0);
  606. if (user.getIntegral().compareTo(req.getOrderTotal()) < 0) {
  607. return AjaxResult.error("账户积分不足");
  608. }
  609. //扣减积分
  610. user.setIntegral(user.getIntegral().subtract(req.getOrderTotal()));
  611. //生成消费记录
  612. Integral integral = new Integral();
  613. integral.setId(IdWorker.getIdStr());//积分主键
  614. integral.setRechargeEquipmentCode(req.getDeviceNumber());//设备编号
  615. integral.setRechargeEquipmentName(req.getDeviceName());//设备名称
  616. integral.setLoginName(req.getUserNumber());//账号编号
  617. integral.setRechargeTime(new Date());//支付时间
  618. integral.setRechargeIntegral(req.getOrderTotal().negate());//积分(负数)
  619. integral.setIsDelete(0);//有效标志
  620. integral.setNickName(user.getNickName());
  621. integral.setOrganizationCode(req.getJgid());//机构代码
  622. integral.setMoneyType(Integer.valueOf(ConsumeChangeEnum.Gift.getValue()));
  623. //消费标志
  624. HsCanteenOrder hsCanteenOrder = new HsCanteenOrder();
  625. hsCanteenOrder.setConsumeSign(0);
  626. //订单
  627. BeanUtils.copyBeanProp(hsCanteenOrder, req);
  628. //获取id
  629. hsCanteenOrder.setOrderId(IdWorker.getIdStr());
  630. hsCanteenOrder.setPaytime(integral.getRechargeTime());
  631. //获取订单编码
  632. NumberRuleReq numberRuleReq = new NumberRuleReq();
  633. numberRuleReq.setRuleId(NumberRuleEnum.ORDER.getValue());
  634. numberRuleReq.setInput(String.valueOf(DateUtil.year(hsCanteenOrder.getPaytime())).substring(2, 4));
  635. String number = hsSysNumberRuleService.getNumber(numberRuleReq);
  636. hsCanteenOrder.setOrderNumber(number);
  637. //订单详情
  638. if (req.getHsGifts() == null) {
  639. return AjaxResult.error("订单明细不能为空");
  640. }
  641. List<HsGift> hsGifts = new ArrayList<>();
  642. for (HsCanteenOrderDetail o : req.getHsGifts()) {
  643. HsGift gift = new HsGift();
  644. gift.setGiftNumber(o.getCuisineNumber());
  645. gift.setJgid(o.getJgid());
  646. List<HsGift> temp = hsGiftService.selectHsGiftList(gift);
  647. if (CollectionUtil.isEmpty(temp)) {
  648. return AjaxResult.error(o.getCuisineName() + "礼品不存在");
  649. }
  650. gift = temp.get(0);
  651. if (gift.getAmount() < o.getAmount()) {
  652. return AjaxResult.error(o.getCuisineName() + "数量不足");
  653. }
  654. gift.setAmount(gift.getAmount() - o.getAmount());
  655. hsGifts.add(gift);
  656. o.setDetailId(IdWorker.getIdStr());
  657. o.setOrderNumber(hsCanteenOrder.getOrderNumber());
  658. }
  659. try {
  660. sysUserOrganizationService.updateById(user);//更新账户信息
  661. hsCanteenOrderService.save(hsCanteenOrder);//订单主表
  662. hsCanteenOrderDetailService.saveBatch(req.getHsGifts());//订单明细
  663. integral.setOrderNumber(hsCanteenOrder.getOrderNumber());
  664. integralService.save(integral);
  665. hsGiftService.updateBatchById(hsGifts);
  666. } catch (Exception e) {
  667. e.printStackTrace();
  668. throw new BaseException("保存失败");
  669. }
  670. return AjaxResult.success();
  671. }
  672. /**
  673. * 获取通知公告
  674. *
  675. * @param orgNo 机构编号
  676. * @return
  677. */
  678. @GetMapping("/notice")
  679. public AjaxResult appNoticeList(@RequestParam String orgNo) {
  680. return AjaxResult.success(noticeService.selectNoticeList(null));
  681. }
  682. @Resource
  683. private IHsOrgPersonnelFilesService orgPersonnelFilesService;
  684. }