package com.matrix.system.shopXcx.api.action; import com.alibaba.fastjson.JSONObject; import com.matrix.biz.bean.BizUser; import com.matrix.biz.dao.BizUserDao; import com.matrix.component.rabbitmq.RabiitMqTemplate; import com.matrix.component.redis.RedisUserLoginUtils; import com.matrix.core.pojo.AjaxResult; import com.matrix.core.tools.DateUtil; import com.matrix.core.tools.StringUtils; import com.matrix.system.common.bean.SysUsers; import com.matrix.system.common.dao.SysUsersDao; import com.matrix.system.common.interceptor.HostInterceptor; import com.matrix.system.common.tools.LocationUtil; import com.matrix.system.constance.Dictionary; import com.matrix.system.hive.bean.*; import com.matrix.system.hive.dao.*; import com.matrix.system.hive.plugin.message.StringUtil; import com.matrix.system.hive.plugin.util.CollectionUtils; import com.matrix.core.tools.DateUtil; import com.matrix.system.hive.service.CodeService; import com.matrix.system.hive.service.SysProjUseService; import com.matrix.system.hive.service.SysWorkBeatuistaffService; import com.matrix.system.hive.service.SysWorktimeService; import com.matrix.system.shopXcx.bean.ShopProduct; import com.matrix.system.shopXcx.dao.ShopProductDao; import com.matrix.system.shopXcx.dto.YYDayOfWeek; import com.matrix.system.shopXcx.dto.YYmonth; import com.matrix.system.shopXcx.mqTask.DTO.UserProjInfo; import com.matrix.system.shopXcx.mqTask.MQTaskRouting; import com.matrix.system.shopXcx.shopEnum.TemplateMsgType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; /** * @author jiangyouyao * @description 预约信息action * @date 2019-06-06 10:15 */ @CrossOrigin(origins = "*", maxAge = 3600) @Controller @RequestMapping(value = "wxapi/yuyue") public class YuyueAction { @Autowired SysShopInfoDao shopInfoDao; @Autowired private SysVipInfoDao vipDap; @Autowired private OnlinebookingDao onlinebookingDao; @Autowired RedisUserLoginUtils redisUserLoginUtils; @Autowired ShopProductDao productDao; @Autowired SysUsersDao staffInfoDao; @Autowired BizUserDao bizUserDao; @Autowired RabiitMqTemplate rabiitMqTemplate; @Autowired ShoppingGoodsAssembleDao shoppingGoodsAssembleDao; @Autowired ShoppingGoodsDao shoppingGoodsDao; @Value("${evn}") private String evn; /** * 获取门店列表 * * @return */ @RequestMapping(value = "/getShopList/{locX}/{locY}") public @ResponseBody AjaxResult getShopList(@PathVariable("locX") String locX, @PathVariable("locY") String locY) { SysShopInfo sysShopInfo=new SysShopInfo(); sysShopInfo.setIsOpenNet(SysShopInfo.OPEN_NET); sysShopInfo.setCompanyId(HostInterceptor.getCompanyId()); List shopList = shopInfoDao.selectByModel(sysShopInfo); if ("X".equals(locX) || "Y".equals(locY)) { return new AjaxResult(AjaxResult.STATUS_SUCCESS, shopList); } Double distance = null; SysShopInfo nearestShop = null; AjaxResult ajaxResult = new AjaxResult("200", shopList); if (CollectionUtils.isNotEmpty(shopList)) { for (SysShopInfo shopInfo : shopList) { Double shopX = Double.parseDouble(shopInfo.getLongitude()); Double shopY = Double.parseDouble(shopInfo.getLatitude()); Double disResult = LocationUtil.getDistance(Double.parseDouble(locX), Double.parseDouble(locY), shopX, shopY); shopInfo.setDistance(new BigDecimal(disResult).setScale(1, BigDecimal.ROUND_HALF_UP)); if (distance == null || distance > disResult) { distance = disResult; nearestShop = shopInfo; } } } ajaxResult.putInMap("shopInfo", nearestShop); return ajaxResult; } @RequestMapping(value = "/findShopInfoById/{id}") @ResponseBody public AjaxResult findShopInfoById(@PathVariable Long id) { SysShopInfo shopInfo = shopInfoDao.selectById(id); AjaxResult ajaxResult = new AjaxResult(AjaxResult.STATUS_SUCCESS,"获取成功"); ajaxResult.putInMap("shopInfo", shopInfo); return ajaxResult; } /** * 获取预约时间表 * * @return */ @RequestMapping(value = "/getTimeList") public @ResponseBody AjaxResult getTimeList() { return new AjaxResult("200", YYmonth.buildMonth(3)); } /** * 获取预约日期 * * @return */ @RequestMapping(value = "/getYYDayAndWeek") public @ResponseBody AjaxResult getYYDayAndWeek(String time) { Date date = DateUtil.stringToDate(time, DateUtil.DATE_FORMAT_DD); List yyDayOfWeeks = YYDayOfWeek.build(date, 4); return new AjaxResult("200", yyDayOfWeeks); } @Resource private SysWorkBeatuistaffService sysWorkBeatuistaffService; @Resource private com.matrix.system.common.service.SysUsersService SysUsersService; @Autowired private SysWorktimeService sysWorkTimeService; /** * 查询空闲美疗师 */ @RequestMapping(value = "/getPaiBanBeauticianList") public @ResponseBody AjaxResult showPaiBanBeauticianList(@RequestBody SysBeauticianState sysBeauticianState) { if(StringUtils.isNotBlank(sysBeauticianState.getBbeginTime())&& StringUtils.isNotBlank(sysBeauticianState.getEendTime())){ sysBeauticianState.setBeginTime(DateUtil.stringToDate(sysBeauticianState.getBbeginTime(), DateUtil.DATE_FORMAT_MM)); sysBeauticianState.setEndTime(DateUtil.stringToDate(sysBeauticianState.getEendTime(), DateUtil.DATE_FORMAT_MM)); String codes = DateUtil.dateToString(sysBeauticianState.getBeginTime(),DateUtil.DATE_FORMAT_NO_SPLITE_DD); List staffs = SysUsersService.findByCodeBeaStateShop(sysBeauticianState.getShopId(), sysBeauticianState, codes); return new AjaxResult(AjaxResult.STATUS_SUCCESS, staffs); }else{ return AjaxResult.buildSuccessInstance(""); } } @Resource private SysProjUseService projUseService; /** * 获取用户已购项目列表 * * @return */ @RequestMapping(value = "/getUserPro/{phone}") public @ResponseBody AjaxResult getUserPro(@PathVariable String phone) { SysVipInfo vipInfo = vipDap.selectByPhone(phone); // 根据时间获取一段排班码 Map taocanProjMap = new HashMap<>(); List userProjInfoList = new ArrayList(); SysProjUse sysProjUse = new SysProjUse(); sysProjUse.setVipId(vipInfo.getId()); sysProjUse.setIsOver(Dictionary.DELETED_N); sysProjUse.setIsOver(Dictionary.DELETED_N); sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_YX); // 查询出该会员的所有可消耗的选择 List sysProjUseList = projUseService.findByModel(sysProjUse); for (int i = 0; i < sysProjUseList.size(); i++) { if (sysProjUseList.get(i).getTaocanId() != null) { String flag = sysProjUseList.get(i).getPlatformFlag(); if (taocanProjMap.keySet().contains(flag)) { ((UserProjInfo) taocanProjMap.get(flag)).getChildPro().add(coversion(sysProjUseList.get(i))); } else { SysProjUse pru = sysProjUseList.get(i); UserProjInfo taocan = new UserProjInfo(); taocan.setId(pru.getId()); taocan.setName(pru.getProjName()); taocan.setType(pru.getType()); if (pru.getSurplusCount() > 10000) { taocan.setSurplusCount("不限"); } else { taocan.setSurplusCount(pru.getSurplusCount() + ""); } taocan.setChildPro(new ArrayList()); taocan.getChildPro().add(coversion(pru)); taocanProjMap.put(flag, taocan); } } else { userProjInfoList.add(coversion(sysProjUseList.get(i))); } } AjaxResult result = new AjaxResult(); result.setStatus("200"); result.setMapInfo(taocanProjMap); result.setRows(userProjInfoList); return result; } @Autowired private CodeService codeService; /** * 创建预约订单 * * @param onlinebooking * @return */ @RequestMapping(value = "/createServiceOrder") public @ResponseBody AjaxResult createServiceOrder(@RequestBody Onlinebooking onlinebooking) { BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class); bizUser = bizUserDao.findByOpenId(bizUser.getOpenId()); SysVipInfo vipInfo = vipDap.selectByPhone(bizUser.getPhoneNumber()); onlinebooking.setOrderNo(codeService.getServiceOrderCode()); onlinebooking.setVipName(vipInfo.getVipName()); onlinebooking.setVipId(vipInfo.getId()); onlinebooking.setBizUserId(bizUser.getOpenId()); onlinebooking.setStatus(Dictionary.ONLINEBOOKING_DFW); onlinebooking.setCreateTime(new Date()); onlinebooking.setTime(DateUtil.stringToDate(onlinebooking.getTimeStr(), DateUtil.DATE_FORMAT_MM)); onlinebookingDao.insert(onlinebooking); //发送消息通知 JSONObject msg = new JSONObject(); msg.put("templateMsgType", TemplateMsgType.APPOINTMENT_SUCCESS.getCode()); msg.put("content", onlinebooking.getId()); rabiitMqTemplate.sendMsg(MQTaskRouting.SEND_TEMPLATE_MSG+evn, msg.toJSONString()); return new AjaxResult(AjaxResult.STATUS_SUCCESS, Collections.singletonList(onlinebooking)); } /** * 根据id查询预约订单的详情 * * @param id * @return */ @RequestMapping(value = "/getServiceOrderById/{id}") public @ResponseBody AjaxResult getServiceOrderById(@PathVariable Long id) { Onlinebooking onlinebooking = onlinebookingDao.selectById(id); ShopProduct shopProduct = productDao.selectById(onlinebooking.getProductId()); onlinebooking.setShopProduct(shopProduct); if (onlinebooking.getStaffId() != null) { SysUsers shopstaffInfo = staffInfoDao.selectById(Long.parseLong(onlinebooking.getStaffId() + "")); onlinebooking.setStaffInfo(shopstaffInfo); } SysShopInfo shopInfo = shopInfoDao.selectById(onlinebooking.getShopId()); onlinebooking.setShopInfo(shopInfo); AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, "查询成功"); result.putInMap("serviceOrder", onlinebooking); return result; } /** * 订单列表查询 * * @return */ @RequestMapping(value = "/getServiceOrderList") public @ResponseBody AjaxResult getServiceOrderList(@RequestBody Onlinebooking onlinebooking) { BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class); onlinebooking.setBizUserId(bizUser.getOpenId()); List list = onlinebookingDao.selectInPageForWx(onlinebooking); //相关数据赋值 list.stream().forEach(order -> { ShopProduct shopProduct = productDao.selectById(order.getProductId()); order.setShopProduct(shopProduct); if (order.getStaffId() != null) { SysUsers shopstaffInfo = staffInfoDao.selectById(Long.parseLong(order.getStaffId() + "")); order.setStaffInfo(shopstaffInfo); } SysShopInfo shopInfo = shopInfoDao.selectById(order.getShopId()); order.setShopInfo(shopInfo); }); AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, "查询成功"); result.setRows(list); return result; } /** * 取消预约订单 * * @param * @return */ @RequestMapping(value = "/cancelOrderById") public @ResponseBody AjaxResult cancelOrderById(@RequestBody Onlinebooking onlinebooking) { AjaxResult result = new AjaxResult(); if (onlinebooking.getId() == null) { result.setStatus(AjaxResult.STATUS_FAIL); result.setInfo("请求参数错误"); } else { onlinebooking.setStatus(Dictionary.ONLINEBOOKING_YQX); onlinebookingDao.update(onlinebooking); result.setStatus(AjaxResult.STATUS_SUCCESS); result.setInfo("订单取消成功"); } return result; } /** * 删除订单 * * @param * @return */ @RequestMapping(value = "/removeOrderById/{id}") public @ResponseBody AjaxResult removeOrderById(@PathVariable Long id) { onlinebookingDao.deleteById(id); AjaxResult result = new AjaxResult(); result.setStatus(AjaxResult.STATUS_SUCCESS); result.setInfo("删除成功"); return result; } private UserProjInfo coversion(SysProjUse pUse) { UserProjInfo projInfo = new UserProjInfo(); projInfo.setId(pUse.getId()); projInfo.setName(shoppingGoodsDao.selectById(pUse.getProjId()).getName()); projInfo.setSurplusCount(pUse.getSurplusCount() + ""); projInfo.setType(pUse.getType()); return projInfo; } private int dateToCodeInt(Date date) { return Integer.parseInt(DateUtil.dateToString(date, DateUtil.HHmm)); } }