| 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.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 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<SysOrderItem> 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.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<SysOrderItem> 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); | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 收款 | 
|      */ | 
|     @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<SysOrderItem> 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<MoneyCardUse> 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<MoneyCardUse> 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<SysOrder> byModel = orderService.findByModel(orderVo); | 
|             if(byModel.size()==1){ | 
|                 order=orderService.findById(byModel.get(0).getId()); | 
|             } | 
|         } | 
|         List<SysOrderItem> sysOrderItems = orderItemDao.selectByOrderId(order.getId()); | 
|         order.setItems(sysOrderItems); | 
|   | 
|         SysVipInfo vipInfo = sysVipInfoService.findById(order.getVipId()); | 
|         // 根据会员Id查到会员有效的会员卡 | 
|         // 根据订单号查找订单条目 | 
|         List<SysOrderItem> orderItems = orderItemService.findByOrderId(order.getId()); | 
|   | 
|         MoneyCardUse moneyCardUse = new MoneyCardUse(); | 
|         moneyCardUse.setVipId(order.getVipId()); | 
|         List<MoneyCardUse> cards = cardUseService.findByModel(moneyCardUse); | 
|   | 
|         List<SysOrderFlow> flows = sysOrderFlowService.findByOrderId(order.getId()); | 
|         order.setFlows(flows); | 
|   | 
|         List<SysOrderFlow> payMethods = sysOrderFlowService.findPayMethodsAmount(order.getId()); | 
|   | 
|         List<AchieveNew> 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<SysOrderItem> items = orderItemDao.selectByOrderId(id); | 
|         for (SysOrderItem item : items) { | 
|             List<SysProjServices> 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<ExcelSheetPO> res = new ArrayList<>(); | 
|         ExcelSheetPO orderSheet = new ExcelSheetPO(); | 
|         String title = "订单记录"; | 
|         orderSheet.setSheetName(title); | 
|         orderSheet.setTitle(title); | 
|         String[] header = {"订单号", "客户姓名", "客户手机", "下单时间", "订单总价", "折后价", "现金付款", "卡付款", "顾问姓名", "所属门店", "订单状态"}; | 
|         orderSheet.setHeaders(header); | 
|         //门店只能查询本店自己的订单 | 
|         List<SysOrder> dataList = orderService.findInPage(sysOrder, null); | 
|         List<List<Object>> list = new ArrayList<>(); | 
|         if (dataList.size() > 0) { | 
|             for (SysOrder item : dataList) { | 
|                 List<Object> 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); | 
|     } | 
|   | 
|   | 
| } |