Explorar el Código

解决BUG:
1、当本地保存了信息时,无法打开登陆页面问题;
2、为订单项增加缓存信息;
3、为订单列表SQL语句优化,提升相应速度。

xian hace 5 años
padre
commit
38a016ba24

+ 49 - 40
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/SalesOrderServiceImpl.java

@@ -84,6 +84,19 @@ public class SalesOrderServiceImpl implements SalesOrderService {
     @Autowired
     private SupplierProductMapper supplierProductMapper;
 
+    /**
+     * 缓存订单项的前缀
+     */
+    public static String CACHE_ORDER_ITEM_NAME = null;
+    static {
+        Map<String,String> map = System.getenv();
+        if ("iZ94klno8qrZ".equalsIgnoreCase(map.get("COMPUTERNAME"))) {
+            CACHE_ORDER_ITEM_NAME = "RST_ORDER_ITEM_";
+        } else {
+            CACHE_ORDER_ITEM_NAME = "adv_ORDER_ITEM_";
+        }
+    }
+
     @Override
     public Integer addSalesOrder(SalesOrder salesOrder) {
         return salesOrderMapper.addSalesOrder(salesOrder);
@@ -251,14 +264,7 @@ public class SalesOrderServiceImpl implements SalesOrderService {
         }
 
         // 更新Redis缓存
-        Map<String,String> map = System.getenv();
-        String name = map.get("COMPUTERNAME");
-        if ("iZ94klno8qrZ".equalsIgnoreCase(name)) {
-            name = "RST_";
-        } else {
-            name = "adv_";
-        }
-        RedisUtils.del(name + "ORDER_ITEM_" + salesOrder.getSalesId());
+        cacheOrderItem(salesOrder.getSalesId());
         return flag;
     }
 
@@ -277,29 +283,46 @@ public class SalesOrderServiceImpl implements SalesOrderService {
         return salesOrderMapper.listSalesOrderNum(salesOrder);
     }
 
+    /**
+     * 获取订单的订单项,首先从REDIS中获取,如果没有获取到,尝试从数据库获取
+     * @param salesId
+     * @return
+     */
+    private List<SalesOrderItem> listOrderItem(Integer salesId) {
+        String key = CACHE_ORDER_ITEM_NAME + salesId;
+        List<SalesOrderItem> list = RedisUtils.list(key, SalesOrderItem.class);
+        if (list == null) {
+            cacheOrderItem(salesId);
+        }
+        return RedisUtils.list(key, SalesOrderItem.class);
+    }
+
+    /**
+     * 更新缓存订单项(从数据库获取一次)
+     * @param salesId
+     */
+    private void cacheOrderItem(Integer salesId) {
+        // 查询数据库的数据
+        SalesOrderItem salesOrderItem = new SalesOrderItem();
+        salesOrderItem.setItemOrderId(salesId);
+        List<SalesOrderItem> list = salesOrderMapper.listSalesOrderItem(salesOrderItem);
+        // 缓存
+        String key = CACHE_ORDER_ITEM_NAME + salesId;
+        RedisUtils.put(key, list);
+        RedisUtils.expire(key,DateTimeUtil.addDay(1));
+    }
+
     @Override
     public PagedResult<SalesOrder> listSalesOrderPage(int pageNO, int pageSize, SalesOrder salesOrder, boolean isTotalNum) {
+        // 初始化页面分页的数据
         salesOrder.setStartOrderNO((pageNO-1) * pageSize);
         salesOrder.setEndOrderNO(pageSize);
         //查询订单列表信息
         List<SalesOrder> orderList = salesOrderMapper.listSalesOrderNew(salesOrder);
         for(SalesOrder so : orderList){
-            SalesOrderItem salesOrderItem = new SalesOrderItem();
-            salesOrderItem.setItemOrderId(so.getSalesId());
-            List<SalesOrderItem> salesOrderItemList = salesOrderMapper.listSalesOrderItem(salesOrderItem);
-            //去除已退货的订单项
-            /*int num = salesOrderItemList.size();  2019年7月10日 更新
-            for(int i = 0;i< num;){
-                SalesOrderItem item = salesOrderItemList.get(i);
-                if(item.getItemNum().intValue() == item.getItemReturnNum().intValue()){
-                    salesOrderItemList.remove(i);
-                    num = salesOrderItemList.size();
-                    i = 0;
-                }else{
-                    i++;
-                }
-            }*/
-            for(SalesOrderItem item : salesOrderItemList){//判断是否包含净水机 1是 2否
+            List<SalesOrderItem> salesOrderItemList = listOrderItem(so.getSalesId());
+            for(SalesOrderItem item : salesOrderItemList){
+                //判断是否包含净水机 1是 2否
                 if(item.getColorIsMachine() != null){
                     if(item.getColorIsMachine() == 1){
                         so.setIsDevelop(1);
@@ -662,6 +685,8 @@ public class SalesOrderServiceImpl implements SalesOrderService {
                 }
             }
         }
+        // 缓存订单项
+        cacheOrderItem(mainOrder.getSalesId());
         return true;
     }
 
@@ -712,22 +737,6 @@ public class SalesOrderServiceImpl implements SalesOrderService {
 
     @Override
     public List<SalesOrderItem> listSalesOrderItem(SalesOrderItem salesOrderItem) {
-        // 通过计算机名称来判断服务器环境
-        /*Map<String,String> map = System.getenv();
-        String name = map.get("COMPUTERNAME");
-        if ("iZ94klno8qrZ".equalsIgnoreCase(name)) {
-            name = "RST_";
-        } else {
-            name = "adv_";
-        }
-        // 获取数据
-        String key = name + "ORDER_ITEM_" + salesOrderItem.getItemOrderId();
-        List<SalesOrderItem> list = RedisUtils.list(key, SalesOrderItem.class);
-        if (list == null ) {
-            list = salesOrderMapper.listSalesOrderItem(salesOrderItem);
-            RedisUtils.put(key, list);
-            RedisUtils.expire(key, new Date(259200000 + System.currentTimeMillis()));
-        }*/
         return salesOrderMapper.listSalesOrderItem(salesOrderItem);
     }
 

+ 2 - 2
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/salesOrderMapper.xml

@@ -207,7 +207,7 @@
             GROUP BY
             soi.sales_id
             ORDER BY
-            soi.sales_create_time DESC
+            soi.sales_id DESC
             LIMIT #{startOrderNO}, #{endOrderNO}
         ) temp
         LEFT JOIN tb_rst_sales_company trsc ON temp.sales_company_id = trsc.company_id
@@ -683,7 +683,7 @@
         GROUP BY
         soi.sales_id
         ORDER BY
-        soi.sales_create_time DESC
+        soi.sales_id DESC
         ) temp
         LEFT JOIN tb_rst_sales_company trsc ON temp.sales_company_id = trsc.company_id
         LEFT JOIN tb_rst_store_info trsi ON temp.sales_store_id = trsi.store_id

+ 9 - 10
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminSalesOrderController.java

@@ -104,15 +104,13 @@ public class AdminSalesOrderController {
                                         @RequestParam(value = "pageSize", defaultValue = "10", required = false) Integer pageSize,
                                         @RequestParam(value = "pageNO", defaultValue = "1", required = false) Integer pageNO,
                                         @RequestParam(value = "totalNum", defaultValue = "0", required = false) Integer totalNum) throws Exception {
-        ModelAndView mv = new ModelAndView("order/salesOrder/sales_order_list");
-
-        Admin admin = AdminUtils.getLoginAdmin();
-        Integer identity = admin.getAdminDept();
-        if(identity == 2){
-            salesOrder.setSalesAdminId(admin.getAdminId());
+        // 开始装配查询订单的数据
+        if(AdminUtils.getLoginAdmin().getAdminDept() == 2){
+            // 如果是销售部门,只允许查看自己的订单
+            salesOrder.setSalesAdminId(AdminUtils.getLoginAdmin().getAdminId());
         }
-        salesOrder.setIsSelectCustomer(2);//不查询客诉添加的订单
-
+        // 不查询客诉添加的订单
+        salesOrder.setIsSelectCustomer(2);
         //分页获取订单信息
         PagedResult<SalesOrder> pagedResult = salesOrderService.listSalesOrderPage(pageNO, pageSize, salesOrder,totalNum == 0);
         if (totalNum != 0) {
@@ -130,6 +128,7 @@ public class AdminSalesOrderController {
         salesOrder.setSalesOrderItemList(null);
         List<ProductColor> productColorList = productService.listproductAndColor(productColor);
         SalesOrder orderNum = salesOrderService.getStatusNum();//查询订单各个状态数量
+        ModelAndView mv = new ModelAndView("order/salesOrder/sales_order_list");
         StitchAttrUtil.getSa()
                 .addDatePro("yyyy-MM-dd HH:mm:ss","startDate","endDate")
                 .addNoPro("suSalesOrderItemList")
@@ -138,9 +137,9 @@ public class AdminSalesOrderController {
         mv.addObject("orderNum",orderNum);
         mv.addObject("listStoreInfo",listStoreInfo);
         mv.addObject("logisticsInfoList",logisticsInfoList);
-        mv.addObject("identity",identity);
+        mv.addObject("identity",AdminUtils.getLoginAdmin().getAdminDept());
         mv.addObject("productColorList",productColorList);
-        mv.addObject("admin",admin);
+        mv.addObject("admin",AdminUtils.getLoginAdmin());
         return mv;
     }
 

+ 6 - 1
watero-rst-web/src/main/java/com/iamberry/rst/controllers/sys/LoginController.java

@@ -51,7 +51,12 @@ public class LoginController {
         Subject currentUser = SecurityUtils.getSubject();
         if (!currentUser.isAuthenticated()) {
             // 判断是否已经记住过密码
-            Admin admin = AdminUtils.getAdminCookie(request);
+            Admin admin = null;
+            try {
+                admin = AdminUtils.getAdminCookie(request);
+            } catch (IllegalArgumentException e) {
+                return new ModelAndView("login");
+            }
             if (admin == null) {
                 return new ModelAndView("login");
             }

+ 6 - 4
watero-rst-web/src/main/java/com/iamberry/rst/controllers/sys/SysController.java

@@ -85,8 +85,10 @@ public class SysController {
         // 注入数据:管理员名称、管理员部门
         String dept = depart.getDepartName();
         List<Menu> list = sysService.listMenu(AdminUtils.getLoginAdminId());
-        return new ModelAndView("home/pc_index").addObject("adminName", admin.getAdminName())
-                .addObject("deptName", dept).addObject("menus", sysService.listMenu(AdminUtils.getLoginAdminId()));
+        return new ModelAndView("home/pc_index")
+                .addObject("adminName", admin.getAdminName())
+                .addObject("deptName", dept)
+                .addObject("menus", sysService.listMenu(AdminUtils.getLoginAdminId()));
     }
 
     /**
@@ -207,7 +209,7 @@ public class SysController {
         // 查询
         PagedResult<Admin> result = sysService.listAdmin(pageRequest);
         if (pageTotal != null) {
-            result.setPages(pageTotal);         // 合法化数据
+            result.setPages(pageTotal);
         }
 
         // 返回
@@ -354,7 +356,7 @@ public class SysController {
     @RequestMapping("/add_admin_info")
     public ResponseJson addAdminInfo(Admin admin,HttpServletRequest request) throws Exception {
         md5 = new MD5("inlongadMD5");
-        StringBuilder salt = new StringBuilder();   //颜值
+        StringBuilder salt = new StringBuilder();
         String adminSalt = "";
         if (admin.getAdminAccount() == null || admin.getAdminPassword() == null) {
             return new ResponseJson(200, "账号和密码不能为空", 500);