From 4351e71d782741143a98f86f6648acd16689165f Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Fri, 27 May 2022 19:48:02 +0800
Subject: [PATCH] Merge branch 'developer' into hive2.0

---
 zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java |  269 +++++++++++++++++++++++++++++++----------------------
 1 files changed, 155 insertions(+), 114 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java b/zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java
index 7289374..36f8eb7 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java
@@ -1,7 +1,8 @@
 package com.matrix.system.hive.action;
 
-import com.matrix.component.rabbitmq.RabiitMqTemplate;
-import com.matrix.core.constance.MatrixConstance;
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
+import com.matrix.component.asyncmessage.AsyncMessageManager;
 import com.matrix.core.exception.GlobleException;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.pojo.PaginationVO;
@@ -11,24 +12,24 @@
 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.BusParameterSettings;
 import com.matrix.system.common.bean.SysUsers;
+import com.matrix.system.common.constance.AppConstance;
+import com.matrix.system.common.dao.BusParameterSettingsDao;
+import com.matrix.system.common.dao.SysCompanyDao;
+import com.matrix.system.common.service.OperationLogService;
+import com.matrix.system.common.tools.DataAuthUtil;
 import com.matrix.system.common.tools.ResponseHeadUtil;
 import com.matrix.system.constance.Dictionary;
-import com.matrix.system.constance.SystemConstance;
-import com.matrix.system.hive.action.util.QueryUtil;
+import com.matrix.system.enums.OperationButtonEnum;
+import com.matrix.system.enums.OperationFunctionEnum;
 import com.matrix.system.hive.bean.*;
-import com.matrix.system.hive.dao.MoneyCardUseDao;
-import com.matrix.system.hive.dao.SysOrderDao;
-import com.matrix.system.hive.dao.SysOrderItemDao;
-import com.matrix.system.hive.dao.SysShopInfoDao;
-import com.matrix.core.tools.DateUtil;
-import com.matrix.system.hive.pojo.ShoppingCarItem;
-import com.matrix.system.hive.pojo.ShoppingCarItemsVo;
+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.shopXcx.mqTask.AsyncMessageRouting;
 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;
@@ -36,6 +37,7 @@
 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;
@@ -46,7 +48,6 @@
 import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Date;
 import java.util.List;
 
 /**
@@ -60,6 +61,11 @@
 public class OrderController extends BaseController {
     @Resource
     private SysOrderService orderService;
+    @Autowired
+    ShoppingGoodsDao shoppingGoodsDao;
+
+    @Autowired
+    private CodeService codeService;
 
     @Autowired
     private SysOrderItemDao orderItemDao;
@@ -89,9 +95,22 @@
     private SysOrderFlowService sysOrderFlowService;
 
     @Autowired
-    RabiitMqTemplate rabiitMqTemplate;
-    @Value("${evn}")
-    private String evn;
+    private SysOrderFlowDao sysOrderFlowDao;
+
+
+    @Autowired
+    private BusParameterSettingsDao busParameterSettingsDao;
+
+    @Autowired
+    private SysProjServicesDao sysProjServicesDao;
+
+    @Autowired
+    private AsyncMessageManager asyncMessageManager;
+
+
+    @Autowired
+    private OperationLogService operationLogService;
+
 
     /**
      * 计算订单金额
@@ -110,7 +129,7 @@
             total = total.add(new BigDecimal(item.getPrice() * item.getCount()));
         }
         SysOrder sysOrderResult = new SysOrder();
-        sysOrderResult.setZkTotal(zkTotal.doubleValue());
+        sysOrderResult.setZkTotal(zkTotal.setScale(2, BigDecimal.ROUND_DOWN).doubleValue());
         sysOrderResult.setTotal(total.doubleValue());
 
         return AjaxResult.buildSuccessInstance(Arrays.asList(sysOrderResult));
@@ -126,14 +145,16 @@
     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());
+        UniformMsgParam uniformMsgParam = new UniformMsgParam(user.getCompanyId(), UniformMsgParam.GZH_GMCG);
+        uniformMsgParam.put("orderId", sysOrder.getId());
+        asyncMessageManager.sendMsg(AsyncMessageRouting.SEND_UNIFORM_TEMPLATE_MSG ,uniformMsgParam);
 
 
         //处理用户购买的产品
@@ -149,14 +170,16 @@
      */
     @RequestMapping(value = "/refundOrder")
     @ResponseBody
-    @Transactional(rollbackFor = Exception.class)
     public AjaxResult refundOrder(@RequestBody SysOrder sysOrder) {
-        SysUsers user = getMe();
-        sysOrder.setShopId(user.getShopId());
-        sysOrder.setStatu(Dictionary.ORDER_STATU_TK);
-        sysOrder.setOrderTime(new Date());
-        //校验订单是否满足结算调价,新订单则保存订单,已有订单则删除后更新
-        sysOrder = orderService.checkAndSaveOrder(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), "订单退款成功");
@@ -178,50 +201,6 @@
         return AjaxResult.buildSuccessInstance(Arrays.asList(sysOrder), "订单保存成功");
     }
 
-    /**
-     * 新建订单
-     *
-     * @author jiangyouyao
-     */
-    @RequestMapping(value = "/addOrder")
-    public @ResponseBody
-    AjaxResult addOrder(ShoppingCarItemsVo car) {
-
-        List<ShoppingCarItem> sessionCarItems = (List<ShoppingCarItem>) WebUtil.getSession().getAttribute(
-                SystemConstance.SHOPPING_CAR);
-
-        List<ShoppingCarItem> carItems = new ArrayList<>();
-
-        // 设置购车中的具体类型信息,过滤没有被选中的商品
-        for (ShoppingCarItem carItem : car.getCarItems()) {
-
-            for (ShoppingCarItem sessionCar : sessionCarItems) {
-
-                if (carItem.getId().equals(sessionCar.getId())) {
-                    //已最后提交的数量为准
-                    sessionCar.setCount(carItem.getCount());
-                    carItems.add(sessionCar);
-                    break;
-                }
-            }
-        }
-        //设置过滤后的购物车条目
-        car.setCarItems(carItems);
-
-        SysVipInfo info = (SysVipInfo) WebUtil.getSession().getAttribute(SystemConstance.CURRENT_CUSTOMER);
-        car.setVipId(info.getId());
-
-        // 添加新订单
-        int i = orderService.createOrder(WebUtil.getSession(), car);
-
-        if (i > 0) {
-            WebUtil.getSession().removeAttribute(SystemConstance.SHOPPING_CAR);
-            return new AjaxResult(AjaxResult.STATUS_SUCCESS, "下单成功");
-        } else {
-            return new AjaxResult(AjaxResult.STATUS_FAIL, "下单添加失败");
-        }
-    }
-
 
     /**
      * 列表显示
@@ -236,7 +215,10 @@
         if (StringUtils.isBlank(pageVo.getOrder())) {
             pageVo.setOrder("desc");
         }
-        sysOrder.setShopId(getMe().getShopId());
+        if (!DataAuthUtil.hasAllShopAuth()) {
+            sysOrder.setShopId(getMe().getShopId());
+        }
+        sysOrder.setCompanyId(getMe().getCompanyId());
         return new AjaxResult(AjaxResult.STATUS_SUCCESS, orderService.findInPage(sysOrder, pageVo),
                 orderService.findTotal(sysOrder));
     }
@@ -251,11 +233,31 @@
         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 = getMe();
+        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")
+    @RequestMapping(value = "/sk")
     public @ResponseBody
     AjaxResult sk(SysOrder order) throws GlobleException {
         orderService.updateReceiptMoney(order);
@@ -268,15 +270,29 @@
      */
     @RequestMapping(value = "/updateOrderTime")
     public @ResponseBody
+    @Transactional(rollbackFor = Exception.class)
     AjaxResult updateOrderTime(SysOrder sysOrder) {
 
-        sysOrderDao.updateOrderTime(sysOrder.getOrderTime(), sysOrder.getId());
+        sysOrderDao.updateOrderTime(sysOrder.getPayTime(), sysOrder.getId());
         // 修改业绩时间
         // 更新业绩时间
         AchieveNew achieveNew = new AchieveNew();
         achieveNew.setOrderId(sysOrder.getId());
-        achieveNew.setDatatime(sysOrder.getOrderTime());
+        achieveNew.setDatatime(sysOrder.getPayTime());
         achieveNewService.modifyAchieveTime(achieveNew);
+        //更新收款流水时间
+        sysOrderFlowDao.updateTimeByOrderId(sysOrder.getId(), sysOrder.getPayTime());
+
+        //保存单据日志
+        sysOrder= sysOrderDao.selectById(sysOrder.getId());
+        operationLogService.saveOperation(sysOrder.getCompanyId(), sysOrder.getShopId(),getMe().getSuId(),
+                OperationFunctionEnum.ORDER,
+                OperationButtonEnum.ORDER_UPDATE_TIME,
+                sysOrder.getId(),
+                sysOrder.getOrderNo(),
+                sysOrder.getVipId(),
+                "更新参数: "+JSON.toJSONString(sysOrder));
+
         return new AjaxResult(AjaxResult.STATUS_SUCCESS, "修改成功");
     }
 
@@ -293,16 +309,7 @@
         MoneyCardUse cardUseInfo = cardUseService.findByVipId(order.getVipId());
 
         if (cardUseInfo == null) {
-            cardUseInfo = new MoneyCardUse();
-            cardUseInfo.setVipId(order.getVipId());
-            cardUseInfo.setCardName("储值卡");
-            cardUseInfo.setIsVipCar(Dictionary.FLAG_YES_Y);
-            cardUseInfo.setRealMoney(0D);
-            cardUseInfo.setGiftMoney(0D);
-            cardUseInfo.setSource("-");
-            cardUseInfo.setStatus(Dictionary.MONEYCARD_STATUS_YX);
-            cardUseInfo.setFailTime(DateUtil.stringToDate("2050-01-01 00:00",DateUtil.DATE_FORMAT_MM));
-            moneyCardUseDao.insert(cardUseInfo);
+            cardUseInfo = sysVipInfoService.addVipDefaultCard(order.getVipId());
         }
 
         //打印需求加入门店信息
@@ -312,7 +319,6 @@
 
         //查询会有所有有效的会员卡
         result.putInMap("totalMoney", moneyCardUseDao.selectVipCardTotalMoney(order.getVipId()));
-
 
 
         return result;
@@ -392,13 +398,13 @@
     @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())){
+        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());
+            if (byModel.size() == 1) {
+                order = orderService.findById(byModel.get(0).getId());
             }
         }
         List<SysOrderItem> sysOrderItems = orderItemDao.selectByOrderId(order.getId());
@@ -438,10 +444,12 @@
     @RequestMapping(value = "/orderItem")
     public String orderItem(SysOrder orderVo) {
 
-        if(orderVo.getId()!=null){
+        if (orderVo.getId() != null) {
             WebUtil.getRequest().setAttribute("orderParam", orderVo.getId());
-        }else if(StringUtils.isNotBlank(orderVo.getOrderNo())){
+            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";
     }
@@ -456,6 +464,38 @@
     }
 //=======================================页面转发END==================================
 
+    /**
+     * 2021-08-20 新增:erp系统取消订单接口,不做订单状态校验
+     * 取消订单
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @RequestMapping(value = "/erpCancelOrder")
+    public @ResponseBody
+    AjaxResult erpCancelOrder(Long id) {
+
+        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);
+
+        result.setInfo("取消成功!");
+
+        result.setStatus(AjaxResult.STATUS_SUCCESS);
+
+        return result;
+    }
+
 
     /**
      * 取消订单
@@ -465,28 +505,21 @@
     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, "订单不存在!");
+        BusParameterSettings shopManageAbleCancelDfkOrder = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.SHOP_MANAGE_ABLE_CANCEL_DFK_ORDER, order.getCompanyId());
+        if (StringUtils.isNotBlank(shopManageAbleCancelDfkOrder.getParamValue())
+                && shopManageAbleCancelDfkOrder.getParamValue().equals(Dictionary.FLAG_YES)) {
+            if (!Dictionary.ORDER_STATU_DFK.equals(order.getStatu())) {
+                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;
+        return erpCancelOrder(id);
     }
 
     @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());
+        sysOrder.setShopId(getMe().getShopId());
         doExportOrder(response, sysOrder);
         return;
 
@@ -497,28 +530,35 @@
      */
     @RequestMapping(value = "/erpExportExcel")
     public void erpExportExcel(ModelMap model, HttpServletRequest request, HttpServletResponse response,
-                       SysOrder sysOrder) throws Exception {
+                               SysOrder sysOrder) throws Exception {
         doExportOrder(response, sysOrder);
+
         return;
 
     }
 
 
-
-
     /**
      * 执行订单导出,总部和门店共用,但是搜索条件不一样
+     *
      * @param response
      * @param sysOrder
      * @throws IOException
      */
     private void doExportOrder(HttpServletResponse response, SysOrder sysOrder) throws IOException {
+
+        //保存单据日志
+        operationLogService.saveOperation(getMe().getCompanyId(), getMe().getShopId(),getMe().getSuId(),
+                OperationFunctionEnum.ORDER,
+                OperationButtonEnum.EXPORT,
+                String.format("导出参数:%s" , JSON.toJSONString(sysOrder)));
+
         List<ExcelSheetPO> res = new ArrayList<>();
         ExcelSheetPO orderSheet = new ExcelSheetPO();
         String title = "订单记录";
         orderSheet.setSheetName(title);
         orderSheet.setTitle(title);
-        String[] header = {"订单号", "客户姓名", "客户手机", "下单时间", "订单总价", "折后价", "现金付款", "卡付款", "顾问姓名", "所属门店", "订单状态"};
+        String[] header = {"订单号", "客户姓名", "客户手机", "下单时间", "订单总价", "折后价", "现金付款", "卡付款", "顾问姓名", "收银员", "所属门店", "订单状态"};
         orderSheet.setHeaders(header);
         //门店只能查询本店自己的订单
         List<SysOrder> dataList = orderService.findInPage(sysOrder, null);
@@ -535,6 +575,7 @@
                 temp.add(item.getCashPay());
                 temp.add(item.getCardPay());
                 temp.add(item.getStaffName());
+                temp.add(item.getCashierName());
                 temp.add(item.getShopName());
                 temp.add(item.getStatu());
                 list.add(temp);

--
Gitblit v1.9.1