package com.matrix.system.hive.action; import cn.hutool.core.collection.CollUtil; import com.matrix.component.rabbitmq.RabiitMqTemplate; import com.matrix.core.constance.MatrixConstance; import com.matrix.core.exception.GlobleException; import com.matrix.core.pojo.AjaxResult; import com.matrix.core.pojo.PaginationVO; import com.matrix.core.tools.DateUtil; import com.matrix.core.tools.StringUtils; import com.matrix.core.tools.WebUtil; import com.matrix.core.tools.excl.ExcelSheetPO; import com.matrix.core.tools.excl.ExcelUtil; import com.matrix.core.tools.excl.ExcelVersion; import com.matrix.system.common.bean.SysUsers; import com.matrix.system.common.dao.SysCompanyDao; import com.matrix.system.common.tools.ResponseHeadUtil; import com.matrix.system.constance.Dictionary; import com.matrix.system.hive.bean.*; import com.matrix.system.hive.dao.*; import com.matrix.system.hive.plugin.util.CollectionUtils; import com.matrix.system.hive.service.*; import com.matrix.system.shopXcx.mqTask.MQTaskRouting; import com.matrix.system.wechart.templateMsg.UniformMsgParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.math.BigDecimal; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * 线下订单 * * @author jiangyouyao * @date 2016-09-08 */ @Controller @RequestMapping(value = "admin/order") public class OrderController extends BaseController { @Resource private SysOrderService orderService; @Autowired ShoppingGoodsDao shoppingGoodsDao; @Autowired private CodeService codeService; @Autowired private SysOrderItemDao orderItemDao; @Resource private MoneyCardUseService cardUseService; @Autowired private MoneyCardUseDao moneyCardUseDao; @Autowired private SysOrderItemService orderItemService; @Autowired private SysOrderDao sysOrderDao; @Autowired private AchieveNewService achieveNewService; @Autowired SysShopInfoDao shopInfoDao; @Autowired private SysVipInfoService sysVipInfoService; @Autowired private SysOrderFlowService sysOrderFlowService; @Autowired private SysOrderFlowDao sysOrderFlowDao; @Autowired RabiitMqTemplate rabiitMqTemplate; @Autowired private SysProjServicesDao sysProjServicesDao; @Value("${evn}") private String evn; /** * 计算订单金额 */ @RequestMapping(value = "/calculationOrder") public @ResponseBody AjaxResult calculationOrder(@RequestBody SysOrder sysOrder) { BigDecimal total = BigDecimal.ZERO; BigDecimal zkTotal = BigDecimal.ZERO; //默认排序 List items = sysOrder.getItems(); for (int i = 0; i < items.size(); i++) { SysOrderItem item = items.get(i); zkTotal = zkTotal.add(new BigDecimal(item.getZkPrice() * item.getCount())); total = total.add(new BigDecimal(item.getPrice() * item.getCount())); } SysOrder sysOrderResult = new SysOrder(); sysOrderResult.setZkTotal(zkTotal.setScale(2,BigDecimal.ROUND_DOWN).doubleValue()); sysOrderResult.setTotal(total.doubleValue()); return AjaxResult.buildSuccessInstance(Arrays.asList(sysOrderResult)); } /** * 订单支付 */ @RequestMapping(value = "/payOrder") @Transactional(rollbackFor = Exception.class) public @ResponseBody AjaxResult payOrder(@RequestBody SysOrder sysOrder) { SysUsers user = getMe(); sysOrder.setShopId(user.getShopId()); sysOrder.setOrderType(SysOrder.ORDER_TYPE_SEAL); sysOrder.setIsHasRefund(SysOrder.IS_HAS_REFUND_N); //校验订单是否满足结算调价,新订单则保存订单,已有订单则删除后更新 sysOrder = orderService.checkAndSaveOrder(sysOrder); orderService.updateReceiptMoney(sysOrder); //发送微信公众号提醒 UniformMsgParam uniformMsgParam=new UniformMsgParam(user.getCompanyId(),UniformMsgParam.GZH_GMCG); uniformMsgParam.put("orderId",sysOrder.getId()); rabiitMqTemplate.sendMsg(MQTaskRouting.SEND_UNIFORM_TEMPLATE_MSG+evn,uniformMsgParam.toJSONString()); //处理用户购买的产品 return AjaxResult.buildSuccessInstance(Arrays.asList(sysOrder), "订单结算成功"); } /** * 退款 * * @param sysOrder * @return */ @RequestMapping(value = "/refundOrder") @ResponseBody public AjaxResult refundOrder(@RequestBody SysOrder sysOrder) { //储值卡订单不能通过退款渠道退款 if(CollectionUtils.isNotEmpty(sysOrder.getItems())){ List orderItem = orderItemService.findByOrderId(sysOrder.getItems().get(0).getOrderId()); if(orderItem.size()==1){ if(orderItem.get(0).getShoppingGoods().getCode().equals("vipCzk")){ return AjaxResult.buildFailInstance("充值订单请直接冲负数金额退款!"); } } } orderService.refundOrderMoney(sysOrder); //处理用户购买的产品 return AjaxResult.buildSuccessInstance(Arrays.asList(sysOrder), "订单退款成功"); } /** * 订单保存接口 */ @RequestMapping(value = "/saveOrder") @Transactional(rollbackFor = Exception.class) public @ResponseBody AjaxResult saveOrder(@RequestBody SysOrder sysOrder) { SysUsers user = getMe(); sysOrder.setShopId(user.getShopId()); //校验保存订单 sysOrder = orderService.checkAndSaveOrder(sysOrder); //处理用户购买的产品 return AjaxResult.buildSuccessInstance(Arrays.asList(sysOrder), "订单保存成功"); } /** * 列表显示 */ @RequestMapping(value = "/showList") public @ResponseBody AjaxResult showList(SysOrder sysOrder, PaginationVO pageVo) { //默认排序 if (StringUtils.isBlank(pageVo.getSort())) { pageVo.setSort("order_time"); } if (StringUtils.isBlank(pageVo.getOrder())) { pageVo.setOrder("desc"); } sysOrder.setShopId(getMe().getShopId()); return new AjaxResult(AjaxResult.STATUS_SUCCESS, orderService.findInPage(sysOrder, pageVo), orderService.findTotal(sysOrder)); } /** * 展示员工创建的订单列表显示 */ @RequestMapping(value = "/showStaffOrder") public @ResponseBody AjaxResult showStaffOrder(SysOrder sysOrder, PaginationVO pageVo) { sysOrder.setStaffId(getMe().getSuId()); return showList(sysOrder, pageVo); } @Resource SysCompanyDao companyDao; /** * 收款 */ @RequestMapping(value = "/printOrder") public @ResponseBody ModelAndView printOrder(SysOrder order) throws GlobleException { ModelAndView mv = new ModelAndView("admin/hive/beautySalon/print-order"); SysUsers user=(SysUsers)WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); String comRegisterCode = companyDao.selectById(user.getCompanyId()).getComRegisterCode(); if(StringUtils.isNotBlank(comRegisterCode)){ mv.addObject("page",comRegisterCode); }else { mv.addObject("page","taiyan"); } return mv; } /** * 收款 */ @RequestMapping(value = "/sk") public @ResponseBody AjaxResult sk(SysOrder order) throws GlobleException { orderService.updateReceiptMoney(order); return new AjaxResult(AjaxResult.STATUS_SUCCESS, "收款成功"); } /** * 更新订单的 */ @RequestMapping(value = "/updateOrderTime") public @ResponseBody AjaxResult updateOrderTime(SysOrder sysOrder) { sysOrderDao.updateOrderTime(sysOrder.getPayTime(), sysOrder.getId()); // 修改业绩时间 // 更新业绩时间 AchieveNew achieveNew = new AchieveNew(); achieveNew.setOrderId(sysOrder.getId()); achieveNew.setDatatime(sysOrder.getPayTime()); achieveNewService.modifyAchieveTime(achieveNew); //更新收款流水时间 sysOrderFlowDao.updateTimeByOrderId(sysOrder.getId(),sysOrder.getPayTime()); return new AjaxResult(AjaxResult.STATUS_SUCCESS, "修改成功"); } /** * 根据订单ID查询订单信息 */ @RequestMapping(value = "/getShopOrder") public @ResponseBody AjaxResult getShopOrder(Long id) { SysOrder order = orderService.findById(id); order.setItems(orderItemDao.selectByOrderId(id)); AjaxResult result = AjaxResult.buildSuccessInstance(""); result.putInMap("order", order); MoneyCardUse cardUseInfo = cardUseService.findByVipId(order.getVipId()); if (cardUseInfo == null) { cardUseInfo=sysVipInfoService.addVipDefaultCard(order.getVipId()); } //打印需求加入门店信息 result.putInMap("shopInfo", shopInfoDao.selectById(order.getShopId())); result.putInMap("moneyCar", cardUseInfo); //查询会有所有有效的会员卡 result.putInMap("totalMoney", moneyCardUseDao.selectVipCardTotalMoney(order.getVipId())); return result; } /** * 根据订单ID查询订单信息 */ @RequestMapping(value = "/findOrderById/{id}") @ResponseBody public AjaxResult findOrderById(@PathVariable Long id) { SysOrder order = orderService.findById(id); order.setItems(orderItemDao.selectByOrderId(id)); return AjaxResult.buildSuccessInstance(Arrays.asList(order)); } //=======================================页面转发================================== /** * 根据订单ID查询订单信息 */ @RequestMapping(value = "/findOrderDetailById") public String findOrderDetailById(Long id) { SysOrder order = orderService.findById(id); order.setItems(orderItemDao.selectByOrderId(id)); WebUtil.getRequest().setAttribute("order", order); return "admin/hive/mobile/order-history-msg"; } /** * 跳转 收款页面 * * @author jyy */ @RequestMapping(value = "/editFormSk1") public String editFormSk1(Long id) { // 根据id查到对应的订单信息 SysOrder order = orderService.findById(id); //查询出订单明细 List sysOrderItems = orderItemDao.selectByOrderId(id); order.setItems(sysOrderItems); WebUtil.getRequest().setAttribute("order", order); MoneyCardUse moneyCardUse = new MoneyCardUse(); moneyCardUse.setVipId(order.getVipId()); moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX); List cards = cardUseService.findByModel(moneyCardUse); WebUtil.getRequest().setAttribute("cards", cards); return "admin/hive/beautySalon/sk-form"; } /** * 查询订单信息 * * @throws GlobleException * @author jyy */ @RequestMapping(value = "/getOrder") public String getOrder(Long id) { SysOrder order = orderService.findById(id); MoneyCardUse moneyCardUse = new MoneyCardUse(); moneyCardUse.setVipId(order.getVipId()); moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX); List cards = cardUseService.findByModel(moneyCardUse); WebUtil.getRequest().setAttribute("cards", cards); WebUtil.getRequest().setAttribute("order", order); return "admin/hive/beautySalon/point-order"; } @RequestMapping(value = "/findOrderDetailByIdOrNo") @ResponseBody public AjaxResult findOrderDetailByIdOrNo(SysOrder orderVo) { // 根据id查到对应的订单信息 SysOrder order=null; if(orderVo.getId()!=null){ order = orderService.findById(orderVo.getId()); }else if(StringUtils.isNotBlank(orderVo.getOrderNo())){ List byModel = orderService.findByModel(orderVo); if(byModel.size()==1){ order=orderService.findById(byModel.get(0).getId()); } } List sysOrderItems = orderItemDao.selectByOrderId(order.getId()); order.setItems(sysOrderItems); SysVipInfo vipInfo = sysVipInfoService.findById(order.getVipId()); // 根据会员Id查到会员有效的会员卡 // 根据订单号查找订单条目 List orderItems = orderItemService.findByOrderId(order.getId()); MoneyCardUse moneyCardUse = new MoneyCardUse(); moneyCardUse.setVipId(order.getVipId()); List cards = cardUseService.findByModel(moneyCardUse); List flows = sysOrderFlowService.findByOrderId(order.getId()); order.setFlows(flows); List payMethods = sysOrderFlowService.findPayMethodsAmount(order.getId()); List achieveList = achieveNewService.findOrderItemAchieve(order.getId()); AjaxResult ajaxResult = AjaxResult.buildSuccessInstance("获取成功"); ajaxResult.putInMap("orderItems", orderItems); ajaxResult.putInMap("order", order); ajaxResult.putInMap("cards", cards); ajaxResult.putInMap("vipInfo", vipInfo); ajaxResult.putInMap("payMethods", payMethods); ajaxResult.putInMap("achieveList", achieveList); return ajaxResult; } /** * 跳转 消费流水详情页面 * * @author jyy */ @RequestMapping(value = "/orderItem") public String orderItem(SysOrder orderVo) { if(orderVo.getId()!=null){ WebUtil.getRequest().setAttribute("orderParam", orderVo.getId()); WebUtil.getRequest().setAttribute("orderId", orderVo.getId()); }else if(StringUtils.isNotBlank(orderVo.getOrderNo())){ WebUtil.getRequest().setAttribute("orderParam", orderVo.getOrderNo()); WebUtil.getRequest().setAttribute("orderNo", orderVo.getOrderNo()); } return "admin/hive/beautySalon/orderXq-form"; } @RequestMapping(value = "/toUpdateTime") public String toUpdateTime(Long id) { // 根据id查到对应的订单信息 SysOrder order = orderService.findById(id); WebUtil.getRequest().setAttribute("order", order); return "admin/hive/beautySalon/updateOrderTime"; } //=======================================页面转发END================================== /** * 取消订单 */ @Transactional(rollbackFor = Exception.class) @RequestMapping(value = "/cancelOrder") public @ResponseBody AjaxResult cancelOrder(Long id, Integer del) { AjaxResult result = new AjaxResult(); SysOrder order = orderService.findById(id); if (order == null) { return new AjaxResult(AjaxResult.STATUS_FAIL, "订单不存在!"); } List items = orderItemDao.selectByOrderId(id); for (SysOrderItem item : items) { List sysProjServices = sysProjServicesDao.selectProjServicesByOrderItemId(item.getId()); if (CollUtil.isNotEmpty(sysProjServices)) { return new AjaxResult(AjaxResult.STATUS_FAIL, "订单存在进行中的服务单无法取消/删除"); } } orderService.cancelOrder(id); // if (del > 0) { // orderService.removeById(id); // result.setInfo("删除成功!"); // } else { result.setInfo("取消成功!"); // } result.setStatus(AjaxResult.STATUS_SUCCESS); return result; } @RequestMapping(value = "/exportExcel") public void report(ModelMap model, HttpServletRequest request, HttpServletResponse response, SysOrder sysOrder) throws Exception { SysUsers sysUsers = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); sysOrder.setShopId(sysUsers.getShopId()); doExportOrder(response, sysOrder); return; } /** * 总部订单导出 */ @RequestMapping(value = "/erpExportExcel") public void erpExportExcel(ModelMap model, HttpServletRequest request, HttpServletResponse response, SysOrder sysOrder) throws Exception { doExportOrder(response, sysOrder); return; } /** * 执行订单导出,总部和门店共用,但是搜索条件不一样 * @param response * @param sysOrder * @throws IOException */ private void doExportOrder(HttpServletResponse response, SysOrder sysOrder) throws IOException { List res = new ArrayList<>(); ExcelSheetPO orderSheet = new ExcelSheetPO(); String title = "订单记录"; orderSheet.setSheetName(title); orderSheet.setTitle(title); String[] header = {"订单号", "客户姓名", "客户手机", "下单时间", "订单总价", "折后价", "现金付款", "卡付款", "顾问姓名", "所属门店", "订单状态"}; orderSheet.setHeaders(header); //门店只能查询本店自己的订单 List dataList = orderService.findInPage(sysOrder, null); List> list = new ArrayList<>(); if (dataList.size() > 0) { for (SysOrder item : dataList) { List temp = new ArrayList<>(); temp.add(item.getOrderNo()); temp.add(item.getVipName()); temp.add(item.getVipPhone()); temp.add(DateUtil.dateToString(item.getOrderTime(), DateUtil.DATE_FORMAT_MM)); temp.add(item.getTotal()); temp.add(item.getZkTotal()); temp.add(item.getCashPay()); temp.add(item.getCardPay()); temp.add(item.getStaffName()); temp.add(item.getShopName()); temp.add(item.getStatu()); list.add(temp); } } orderSheet.setDataList(list); res.add(orderSheet); response = ResponseHeadUtil.setExcelHead(response); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(title + DateUtil.getTimeMark() + ".xlsx".trim(), "UTF-8")); OutputStream os = response.getOutputStream(); ExcelUtil.createWorkbookAtOutStream(ExcelVersion.V2007, res, os, true); } }