From 5224f6b460b23b175c3f69897ed783f3de849b15 Mon Sep 17 00:00:00 2001 From: erdanergou Date: Fri, 30 Sep 2022 17:19:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E9=99=A4=E6=89=AB=E7=A0=81?= =?UTF-8?q?=E4=BB=A5=E5=A4=96=E7=9A=84=E5=85=B6=E4=BB=96=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DepositoryController.java | 560 ++++++--- .../DepositoryRecordController.java | 2 +- .../controller/MaterialController.java | 22 +- .../controller/PageController.java | 10 +- .../controller/PlaceController.java | 20 +- .../mapper/MaterialMapper.java | 14 + .../mapper/MaterialMapper.xml | 40 + .../depository_manage/mapper/PlaceMapper.xml | 7 +- .../service/DepositoryService.java | 5 +- .../service/MaterialService.java | 14 + .../service/PlaceService.java | 6 + .../impl/DepositoryRecordServiceImpl.java | 21 +- .../service/impl/DepositoryServiceImpl.java | 37 +- .../service/impl/ExcelServiceImpl.java | 208 ++-- .../service/impl/MaterialServiceImpl.java | 28 +- .../service/impl/PlaceServiceImpl.java | 20 +- .../static/js/lay-module/step-lay/step.css | 2 +- .../resources/static/vue/common/helper.js | 20 + .../resources/static/vue/common/permission.js | 245 ++++ src/main/resources/templates/index.html | 13 +- .../application/form-step-look_back.html | 10 +- .../templates/pages/chart/chart-in_back.html | 1108 +++++++++-------- .../templates/pages/chart/chart-out_back.html | 96 +- .../templates/pages/uniApp/scanQrCode.html | 315 ----- .../dreamchaser/depository_manage/Test.java | 4 +- .../mapper/MaterialMapper.xml | 40 + .../depository_manage/mapper/PlaceMapper.xml | 7 +- .../static/js/lay-module/step-lay/step.css | 2 +- target/classes/templates/index.html | 13 +- .../application/form-step-look_back.html | 10 +- .../templates/pages/chart/chart-in_back.html | 1108 +++++++++-------- .../templates/pages/chart/chart-out_back.html | 96 +- .../templates/pages/uniApp/scanQrCode.html | 315 ----- 33 files changed, 2245 insertions(+), 2173 deletions(-) create mode 100644 src/main/resources/static/vue/common/helper.js create mode 100644 src/main/resources/static/vue/common/permission.js delete mode 100644 src/main/resources/templates/pages/uniApp/scanQrCode.html delete mode 100644 target/classes/templates/pages/uniApp/scanQrCode.html diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java index c991a433..3d893f86 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java @@ -17,6 +17,7 @@ import org.apache.http.protocol.HTTP; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; @@ -94,31 +95,32 @@ public class DepositoryController { /** * 获取之前仓库的库存值 + * * @return */ - public static Map getBeforeInventoryByDName(DepositoryService depositoryService,DepositoryRecordService depositoryRecordService){ + public static Map getBeforeInventoryByDName(DepositoryService depositoryService, DepositoryRecordService depositoryRecordService, UserByPort user) { List result = new ArrayList<>(); List days = getLastTimeInterval(); - Map depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(); + Map depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(user); Iterator it = depositoryAllNameAndId.keySet().iterator(); - Map map = new HashMap<>(); + Map map = new HashMap<>(); // 获取本周仓库库存 - Map thisWeekInventoryByDName = getThisWeekInventoryByDName(depositoryService, depositoryRecordService); - while (it.hasNext()){ + Map thisWeekInventoryByDName = getThisWeekInventoryByDName(depositoryService, depositoryRecordService, user); + while (it.hasNext()) { int i; Object key = it.next(); Double thisDayInventory = 0.0; // 本周周一的总量 - thisDayInventory = ((List)thisWeekInventoryByDName.get(key.toString())).get(0); + thisDayInventory = ((List) thisWeekInventoryByDName.get(key.toString())).get(0); result.add(thisDayInventory); int j = 0; for (i = days.size() - 1; i > 0; i--) { // 遍历 Map并计算各仓库的入库数 Integer val = (Integer) depositoryAllNameAndId.get(key); // 获取一段时间内的入库额度 - Double depositoryRecordByDateByIn1 = depositoryRecordService.findApplicationInRecordByDate(days.get(i), days.get(i - 1), val); + Double depositoryRecordByDateByIn1 = depositoryRecordService.findApplicationInRecordByDate(days.get(i), days.get(i - 1), val); // 获取一段时间内的出库库额度 - Double depositoryRecordByDateByOut1 = depositoryRecordService.findApplicationOutRecordByDate(days.get(i), days.get(i - 1), val); + Double depositoryRecordByDateByOut1 = depositoryRecordService.findApplicationOutRecordByDate(days.get(i), days.get(i - 1), val); Double wareHouseCount1 = result.get(j++) - depositoryRecordByDateByIn1 + depositoryRecordByDateByOut1; result.add(wareHouseCount1); } @@ -132,24 +134,25 @@ public class DepositoryController { /** * 获取本周库存容量 + * * @param depositoryService * @param depositoryRecordService * @return */ - public static Map getThisWeekInventoryByDName(DepositoryService depositoryService,DepositoryRecordService depositoryRecordService){ + public static Map getThisWeekInventoryByDName(DepositoryService depositoryService, DepositoryRecordService depositoryRecordService, UserByPort user) { Calendar instance = Calendar.getInstance(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); int weekDay = instance.get(Calendar.DAY_OF_WEEK); weekDay = weekDay - 1; // 获取所有仓库名称 - Map depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(); + Map depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(user); Iterator it = depositoryAllNameAndId.keySet().iterator(); //result用来接收每个仓库每天的库存 List result = new ArrayList<>(); // map用来存储仓库与库存的映射 - Map map = new HashMap<>(); + Map map = new HashMap<>(); // 只获取当天 - if(weekDay == 1){ + if (weekDay == 1) { while (it.hasNext()) { int i; Object key = it.next(); @@ -158,7 +161,7 @@ public class DepositoryController { map.put(key.toString(), ((ArrayList) result).clone()); result.clear(); } - }else { + } else { int now = instance.get(Calendar.DAY_OF_WEEK) - 1; List days = new ArrayList<>(); days.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime()))); @@ -166,30 +169,30 @@ public class DepositoryController { while (now - 1 > 0) { now--; instance.add(Calendar.DATE, -1); - long format =DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())); + long format = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())); days.add(format); } while (it.hasNext()) { int i; Object key = it.next(); - int j =0; + int j = 0; // 获取今天容量 Double toDayInventoryByDName = depositoryService.getToDayInventoryByDName(key.toString()); result.add(toDayInventoryByDName); // 判断当天是否有出入口记录 Calendar IsInOut = Calendar.getInstance(); Long start = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(IsInOut.getTime())); - IsInOut.add(Calendar.DATE,1); + IsInOut.add(Calendar.DATE, 1); Long end = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(IsInOut.getTime())); Double inCount = depositoryRecordService.findApplicationInRecordByDate(end, start, null); Double OutCount = depositoryRecordService.findApplicationOutRecordByDate(end, start, null); - if(inCount >0 || OutCount > 0){ + if (inCount > 0 || OutCount > 0) { flag = true; } - for (i = 0;i getBeforeInventoryByMonth(DepositoryService depositoryService,DepositoryRecordService depositoryRecordService){ + public static List getBeforeInventoryByMonth(DepositoryService depositoryService, DepositoryRecordService depositoryRecordService) { List depositoryAll = depositoryService.findDepositoryAll(); Map previousMonth = getPreviousMonth(); List months = (List) previousMonth.get("months"); @@ -253,7 +257,7 @@ public class DepositoryController { List result = new ArrayList<>(); String month = formatter.format(instance.getTime()); for (int i = 0; i < depositoryAll.size(); i++) { - result.add(depositoryService.getToDayInventoryByDName(depositoryAll.get(i).getDname())); + result.add(depositoryService.getToDayInventoryByDName(depositoryAll.get(i).getDname())); ((Map) sourceList.get(0)).put(depositoryAll.get(i).getDname(), result.get(i)); } @@ -266,13 +270,13 @@ public class DepositoryController { // 获取每月入库总额 parmIn.put("type", 1); parmIn.put("state", "已入库"); - parmIn.put("depository_id",depositoryAll.get(j).getId()); + parmIn.put("depository_id", depositoryAll.get(j).getId()); parmIn.put("start", months.get(num + 1)); parmIn.put("end", months.get(num)); // 获取每月出库总额 parmOut.put("type", 2); parmOut.put("state", "已出库"); - parmOut.put("depository_id",depositoryAll.get(j).getId()); + parmOut.put("depository_id", depositoryAll.get(j).getId()); parmOut.put("start", months.get(num + 1)); parmOut.put("end", months.get(num)); // 获取月份中入库物料的总额 @@ -306,11 +310,12 @@ public class DepositoryController { /** * 获取之前个月的库存给地图数据 + * * @param depositoryService * @param depositoryRecordService * @return */ - public static Map getBeforeInventoryOnMap(DepositoryService depositoryService,DepositoryRecordService depositoryRecordService){ + public static Map getBeforeInventoryOnMap(DepositoryService depositoryService, DepositoryRecordService depositoryRecordService) { // 中国地图数据 // ['product', '3月', '4月', '5月', '6月', '7月', '8月'], // ['电子产品类', 41.1, 30.4, 65.1, 53.3, 83.8, 98.7], @@ -341,13 +346,13 @@ public class DepositoryController { Map parmOut = new HashMap<>(); parmIn.put("type", 1); parmIn.put("state", "已入库"); - parmIn.put("depository_id",depositoryAll.get(i).getId()); + parmIn.put("depository_id", depositoryAll.get(i).getId()); parmIn.put("start", months.get(j + 1)); parmIn.put("end", months.get(j)); parmIn.put("dname", depositoryAll.get(i).getDname()); - parmOut.put("type",2); + parmOut.put("type", 2); parmOut.put("state", "已出库"); - parmOut.put("depository_id",depositoryAll.get(i).getId()); + parmOut.put("depository_id", depositoryAll.get(i).getId()); parmOut.put("start", months.get(j + 1)); parmOut.put("end", months.get(j)); parmOut.put("dname", depositoryAll.get(i).getDname()); @@ -362,7 +367,7 @@ public class DepositoryController { } List result = new ArrayList<>(); result.add(productData.get(0)); - for (int j = productData.size() - 2; j > 0;j--) { + for (int j = productData.size() - 2; j > 0; j--) { result.add(productData.get(j)); } mapDataList.add(result); @@ -392,13 +397,14 @@ public class DepositoryController { /** * 根据父级编号获取所有仓库 + * * @param map * @return */ @GetMapping("/allWarehouseByParent") - public RestResponse findDepositoryByNoParent(@RequestParam Map map){ + public RestResponse findDepositoryByNoParent(@RequestParam Map map) { if ("".equals(map.get("parentId")) || map.get("parentId") == null) { - map.put("parentId",0); + map.put("parentId", 0); } List list = depositoryService.findDepositoryRecordPByCondition(map); // 获取所有行政单位 @@ -407,71 +413,73 @@ public class DepositoryController { Integer total = (Integer) administration.get("total"); for (int i = 0; i < list.size(); i++) { for (int j = 0; j < administrationPList.size(); j++) { - if(list.get(i).getCid().compareTo(administrationPList.get(j).getId()) == 0){ + if (list.get(i).getCid().compareTo(administrationPList.get(j).getId()) == 0) { list.get(i).setCname(administrationPList.get(j).getName()); break; } } } - return new RestResponse(list,depositoryService.findCountByCondition(map),200); + return new RestResponse(list, depositoryService.findCountByCondition(map), 200); } /** * 获取当前行政组织 + * * @return */ - public static Map findAdministration(){ - Map map = new HashMap<>(); - String url = PortConfig.external_url +"/org/govlist"; + public static Map findAdministration() { + Map map = new HashMap<>(); + String url = PortConfig.external_url + "/org/govlist"; String superior = "313"; - map.put("superior",superior); - map.put("state",1); + map.put("superior", superior); + map.put("state", 1); String jsonString = JSONObject.toJSONString(map); JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url,paramObject, HTTP.UTF_8); + post = HttpUtils.send(url, paramObject, HTTP.UTF_8); } catch (IOException e) { e.printStackTrace(); } JSONObject jsonObject = JSONObject.parseObject(post); JSONObject data = (JSONObject) jsonObject.get("data"); JSONArray list = (JSONArray) data.get("list"); - if(list == null){ + if (list == null) { list = new JSONArray(); } Integer total = ObjectFormatUtil.toInteger(data.get("total")); - Map result = new HashMap(); + Map result = new HashMap(); List administrationPList = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { - Administration administration = JSONObject.toJavaObject((JSONObject)list.get(i), Administration.class); + Administration administration = JSONObject.toJavaObject((JSONObject) list.get(i), Administration.class); AdministrationP administrationP = new AdministrationP(administration); administrationPList.add(administrationP); } - result.put("administrationPList",administrationPList); - result.put("total",total); + result.put("administrationPList", administrationPList); + result.put("total", total); return result; } /** * 彻底删除仓库记录(硬删除) + * * @param map * @return */ @PostMapping("/realDeleteDepository") - public RestResponse realDeleteDepository(@RequestBody Map map){ - if (map.containsKey("id")){ - Integer id= ObjectFormatUtil.toInteger(map.get("id")); + public RestResponse realDeleteDepository(@RequestBody Map map) { + if (map.containsKey("id")) { + Integer id = ObjectFormatUtil.toInteger(map.get("id")); new Thread(new Runnable() { @Override public void run() { RealDeleteSonDepository(id.toString()); } }).start(); - return CrudUtil.deleteHandle(depositoryService.deleteDepositoryRecordById(id),1); - }else if (map.containsKey("ids")){ - List ids=(List) map.get("ids"); + return CrudUtil.deleteHandle(depositoryService.deleteDepositoryRecordById(id), 1); + } else if (map.containsKey("ids")) { + List ids = (List) map.get("ids"); for (int j = 0; j < ids.size(); j++) { String id = ids.get(j).toString(); new Thread(new Runnable() { @@ -481,19 +489,20 @@ public class DepositoryController { } }).start(); } - return CrudUtil.deleteHandle(depositoryService.deleteDepositoryRecordByIds(ids),ids.size()); - }else { + return CrudUtil.deleteHandle(depositoryService.deleteDepositoryRecordByIds(ids), ids.size()); + } else { throw new MyException("所需请求参数缺失!"); } } /** * 删除所有子仓库信息(硬删除) + * * @param parentId */ - public void RealDeleteSonDepository(String parentId){ - Map param = new HashMap<>(); - param.put("parentId",parentId); + public void RealDeleteSonDepository(String parentId) { + Map param = new HashMap<>(); + param.put("parentId", parentId); // 获取当前仓库所有子仓库 List depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param); for (int i = 0; i < depositoryRecordPByCondition.size(); i++) { @@ -528,7 +537,7 @@ public class DepositoryController { new Thread(new Runnable() { @Override public void run() { - UpdateSonState(id.toString(),3,true); + UpdateSonState(id.toString(), 3, true); } }).start(); return CrudUtil.deleteHandle(depositoryService.changeStateToDeletedById(id), 1); @@ -540,7 +549,7 @@ public class DepositoryController { new Thread(new Runnable() { @Override public void run() { - UpdateSonState(id,3,true); + UpdateSonState(id, 3, true); } }).start(); } @@ -568,41 +577,42 @@ public class DepositoryController { /** * 修改仓库状态 + * * @param map * @return */ @PostMapping("/EditDepositoryState") - public RestResponse EditDepositoryState(@RequestBody Map map){ + public RestResponse EditDepositoryState(@RequestBody Map map) { if (map.containsKey("state")) { map.put("state", 1); } else { map.put("state", 2); } - int state = ((int)map.get("state")); + int state = ((int) map.get("state")); String id = (String) map.get("id"); - if(state == 2){ - if(map.containsKey("envelop")){ - // 封库 - new Thread(new Runnable() { - @Override - public void run() { - UpdateSonState(id,state,true); - } - }).start(); - }else { - // 禁用仓库 - new Thread(new Runnable() { - @Override - public void run() { - UpdateSonState(id, state, false); - } - }).start(); - } - }else if(state == 1){ // 如果是启用仓库,则只启用当前仓库下的物品 + if (state == 2) { + if (map.containsKey("envelop")) { + // 封库 + new Thread(new Runnable() { + @Override + public void run() { + UpdateSonState(id, state, true); + } + }).start(); + } else { + // 禁用仓库 + new Thread(new Runnable() { + @Override + public void run() { + UpdateSonState(id, state, false); + } + }).start(); + } + } else if (state == 1) { // 如果是启用仓库,则只启用当前仓库下的物品 new Thread(new Runnable() { @Override public void run() { - UpdateSonMaterialState(id,state); + UpdateSonMaterialState(id, state); } }).start(); } @@ -611,49 +621,259 @@ public class DepositoryController { /** * 修改所有子仓库状态 + * * @param parentId */ - public void UpdateSonState(String parentId,Integer state,boolean envelop){ - Map param = new HashMap<>(); - param.put("parentId",parentId); + public void UpdateSonState(String parentId, Integer state, boolean envelop) { + Map param = new HashMap<>(); + param.put("parentId", parentId); // 获取当前仓库所有子仓库 List depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param); - if(envelop){ - // 将当前仓库下的产品状态改为禁用 - UpdateSonMaterialState(parentId,state); + if (envelop) { + // 将当前仓库下的产品状态改为禁用 + UpdateSonMaterialState(parentId, state); } for (int i = 0; i < depositoryRecordPByCondition.size(); i++) { Depository depository = depositoryRecordPByCondition.get(i); int depositoryId = depository.getId(); - Map newMap = new HashMap<>(); - newMap.put("parentId",depositoryId); - UpdateSonState(String.valueOf(depositoryId),state,envelop); - Map map = new HashMap<>(); - map.put("id",depositoryId); - map.put("state",state); + Map newMap = new HashMap<>(); + newMap.put("parentId", depositoryId); + UpdateSonState(String.valueOf(depositoryId), state, envelop); + Map map = new HashMap<>(); + map.put("id", depositoryId); + map.put("state", state); depositoryService.updateStateByParam(map); } } /** * 修改当前仓库下的物料状态 + * * @param parentId * @param state */ - public void UpdateSonMaterialState(String parentId,Integer state){ - Map param = new HashMap<>(); - param.put("depositoryId",parentId); + public void UpdateSonMaterialState(String parentId, Integer state) { + Map param = new HashMap<>(); + param.put("depositoryId", parentId); List materialPByCondition = materialService.findMaterialPByCondition(param); for (int i = 0; i < materialPByCondition.size(); i++) { MaterialP materialP = materialPByCondition.get(i); - Map map = new HashMap<>(); - map.put("id",materialP.getId()); - map.put("state",state); + Map map = new HashMap<>(); + map.put("id", materialP.getId()); + map.put("state", state); materialService.updateStateByParam(map); } } + // 获取各类别库存容量 + @RequestMapping(value = "/layui/echart_back_invetory", method = RequestMethod.GET) + @ResponseBody + public Map echart_back_MaterialTypeInvetory(@RequestParam Map map, HttpServletRequest request) { + String typeName = (String) map.get("typeName"); + String type = (String) map.get("type"); + // 获取本月及之前月份各种类别入/出库总量 + List materialTypeAll = materialTypeService.findMaterialTypeNoParent(); + Map previousMonth = getPreviousMonth(); + List months = (List) previousMonth.get("months"); + List sourceList = (List) previousMonth.get("sourceList"); + for (int num = 0; num < months.size() - 1; num++) { + for (int j = 0; j < materialTypeAll.size(); j++) { + Map parm = new HashMap<>(); + parm.put("type", Integer.parseInt(type)); + if (Integer.parseInt(type) == 1) { + parm.put("state", "已入库"); + } else if (Integer.parseInt(type) == 2) { + parm.put("state", "已出库"); + } + parm.put("start", months.get(num + 1)); + parm.put("end", months.get(num)); + parm.put("tname", materialTypeAll.get(j).getTname()); + //根据条件获取月份中物料的总额 + Double materialCountByMonth = depositoryRecordService.findMaterialCountByMonth(parm); + // 测试 + Double materialCountByMonth1 = depositoryRecordService.findMaterialCountByMonth1(parm); + ((Map) sourceList.get(num)).put(materialTypeAll.get(j).getTname(), materialCountByMonth1); + } + } + + return null; + } + + + /** + * 获取上周 + * + * @return + */ + @RequestMapping(value = "/layui/echart_back_lastWeek", method = RequestMethod.GET) + @ResponseBody + public Map echart_back_lastWeek(@RequestParam("type") String type, HttpServletRequest request) { + + // 获取当前登录用户 + UserByPort userByPort = (UserByPort) request.getAttribute("userToken"); + + List show_weekday = new ArrayList(); + show_weekday.add("周一"); + show_weekday.add("周二"); + show_weekday.add("周三"); + show_weekday.add("周四"); + show_weekday.add("周五"); + show_weekday.add("周六"); + show_weekday.add("周日"); + + // 获取各仓库名称以及id + Map depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(userByPort); + + Iterator it = depositoryAllNameAndId.keySet().iterator(); + + // 仓库名称列表 + List depositoryName = new ArrayList<>(); + + // 各仓库对应入库数目 + Map yesterdayData = new HashMap<>(); + // 获取昨天数据标志位 + boolean flag = true; + + // 每天各仓库入库数目 + Map show_data = new HashMap<>(); + List days = getLastTimeInterval(); + List drCountbyDrName = new ArrayList<>(); + while (it.hasNext()) { + int i; + Object key = it.next(); + for (i = days.size() - 1; i > 0; i--) { + // 遍历 Map并计算各仓库的入库数 + if (i == days.size() - 1) { + depositoryName.add(key.toString()); + } + Integer val = (Integer) depositoryAllNameAndId.get(key); + // 获取一段时间内的库存额度 + // 测试 + Double depositoryRecordByDateAndType1 = depositoryRecordService.findApplicationRecordByDate(days.get(i), days.get(i - 1), Integer.parseInt(type), val); + drCountbyDrName.add(depositoryRecordByDateAndType1); + if (i == 2 && flag) { + yesterdayData.put(key.toString(), depositoryRecordByDateAndType1); + } + } + Collections.reverse(drCountbyDrName); + show_data.put(key.toString(), ((ArrayList) drCountbyDrName).clone()); + drCountbyDrName.clear(); + } + + Map depository_data = new HashMap<>(); + depository_data.put("data", show_data); + return depository_data; + } + + + /** + * 获取本周 + * + * @return + */ + @RequestMapping(value = "/layui/echart_back_thisWeek", method = RequestMethod.GET) + @ResponseBody + public Map echart_back_thisWeek(@RequestParam("type") String type, HttpServletRequest request) { + + // 获取当前登录用户 + UserByPort userByPort = (UserByPort) request.getAttribute("userToken"); + + // 设置展示天数 + List show_weekday = new ArrayList(); + show_weekday.add("周一"); + show_weekday.add("周二"); + show_weekday.add("周三"); + show_weekday.add("周四"); + show_weekday.add("周五"); + show_weekday.add("周六"); + show_weekday.add("周日"); + + // 获取各仓库名称以及id + Map depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(userByPort); + + Iterator it = depositoryAllNameAndId.keySet().iterator(); + // 仓库名称列表 + List depositoryName = new ArrayList<>(); + // 各仓库对应入库数目 + Map yesterdayData = new HashMap<>(); + // 每天各仓库入库数目 + Map show_data = new HashMap<>(); + // 各仓库当前库存数目 + Map todayInventory = new HashMap<>(); + //获取获取系统的当前日历对象 + Calendar instance = Calendar.getInstance(); + // 获取昨天数据标志位 + boolean flag = true; + // 获取今天是周几 + int weekDay = instance.get(Calendar.DAY_OF_WEEK); + weekDay = weekDay - 1; // 具体周几 + // 获取日期 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + if (weekDay == 1) { + //只获取今天 + Long now = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())); + instance.add(Calendar.DATE, 1); + Long tomorrow = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())); + instance.add(Calendar.DATE, -2); + String yesterday = formatter.format(instance.getTime()); + while (it.hasNext()) { + // 遍历 Map并计算各仓库的入库数 + Object key = it.next(); + depositoryName.add(key.toString()); + Integer val = (Integer) depositoryAllNameAndId.get(key); + // 获取一段时间内的库存额度 + Double depositoryRecordByDate1 = depositoryRecordService.findApplicationRecordByDate(tomorrow, now, Integer.parseInt(type), val); + Double toDayInventoryByDName = depositoryService.getToDayInventoryByDName(key.toString()); + todayInventory.put(key.toString(), toDayInventoryByDName); + yesterdayData.put(key.toString(), depositoryRecordByDate1); + List drCountbyDrName = new ArrayList<>(); + drCountbyDrName.add(depositoryRecordByDate1); + show_data.put(key.toString(), ((ArrayList) drCountbyDrName).clone()); + } + } else { + int now = instance.get(Calendar.DAY_OF_WEEK) - 1; + List days = new ArrayList<>(); // 周一至今的每天 + instance.add(Calendar.DATE, 1); + days.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime()))); + instance.add(Calendar.DATE, -1); + days.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime()))); + while (now - 1 > 0) { + now--; + instance.add(Calendar.DATE, -1); + Long format = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())); + days.add(format); + } + List drCountbyDrName = new ArrayList<>(); + while (it.hasNext()) { + int i; + Object key = it.next(); + Double toDayInventoryByDName = depositoryService.getToDayInventoryByDName(key.toString()); + todayInventory.put(key.toString(), toDayInventoryByDName); + for (i = days.size() - 1; i > 0; i--) { + // 遍历 Map并计算各仓库的入库数 + if (i == days.size() - 1) { + depositoryName.add(key.toString()); + } + Integer val = (Integer) depositoryAllNameAndId.get(key); + // 获取一段时间内的库存额度 + + Double depositoryRecordByDate1 = depositoryRecordService.findApplicationRecordByDate(days.get(i - 1), days.get(i), Integer.parseInt(type), val); + drCountbyDrName.add(depositoryRecordByDate1); + if (i == 2 && flag) { + yesterdayData.put(key.toString(), depositoryRecordByDate1); + } + } + show_data.put(key.toString(), ((ArrayList) drCountbyDrName).clone()); + drCountbyDrName.clear(); + } + } + + Map depository_data = new HashMap<>(); + depository_data.put("data", show_data); + return depository_data; + } + /** * 动态绘制图像 @@ -662,7 +882,10 @@ public class DepositoryController { */ @RequestMapping(value = "/layui/echart_back", method = RequestMethod.GET) @ResponseBody - public Map learnLayuiAndEchart_back(@RequestParam("type") String type, @RequestParam(value = "last", required = false) String last) { + public Map learnLayuiAndEchart_back(@RequestParam("type") String type, @RequestParam(value = "last", required = false) String last, HttpServletRequest request) { + // 获取当前登录用户 + UserByPort userByPort = (UserByPort) request.getAttribute("userToken"); + // 设置展示天数 List show_weekday = new ArrayList(); show_weekday.add("周一"); @@ -674,7 +897,8 @@ public class DepositoryController { show_weekday.add("周日"); // 获取各仓库名称以及id - Map depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(); + Map depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(userByPort); + Iterator it = depositoryAllNameAndId.keySet().iterator(); // 仓库名称列表 List depositoryName = new ArrayList<>(); @@ -683,7 +907,7 @@ public class DepositoryController { // 每天各仓库入库数目 Map show_data = new HashMap<>(); // 各仓库当前库存数目 - Map todayInventory = new HashMap<>(); + Map todayInventory = new HashMap<>(); //获取获取系统的当前日历对象 Calendar instance = Calendar.getInstance(); // 获取昨天数据标志位 @@ -719,8 +943,7 @@ public class DepositoryController { show_data.put(key.toString(), ((ArrayList) drCountbyDrName).clone()); drCountbyDrName.clear(); } - } - else { + } else { if (weekDay == 1) { //只获取今天 Long now = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())); @@ -734,9 +957,9 @@ public class DepositoryController { depositoryName.add(key.toString()); Integer val = (Integer) depositoryAllNameAndId.get(key); // 获取一段时间内的库存额度 - Double depositoryRecordByDate1 = depositoryRecordService.findApplicationRecordByDate(tomorrow,now , Integer.parseInt(type), val); + Double depositoryRecordByDate1 = depositoryRecordService.findApplicationRecordByDate(tomorrow, now, Integer.parseInt(type), val); Double toDayInventoryByDName = depositoryService.getToDayInventoryByDName(key.toString()); - todayInventory.put(key.toString(),toDayInventoryByDName); + todayInventory.put(key.toString(), toDayInventoryByDName); yesterdayData.put(key.toString(), depositoryRecordByDate1); List drCountbyDrName = new ArrayList<>(); drCountbyDrName.add(depositoryRecordByDate1); @@ -744,7 +967,7 @@ public class DepositoryController { } } else { int now = instance.get(Calendar.DAY_OF_WEEK) - 1; - List days = new ArrayList<>(); + List days = new ArrayList<>(); // 周一至今的每天 instance.add(Calendar.DATE, 1); days.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime()))); instance.add(Calendar.DATE, -1); @@ -760,7 +983,7 @@ public class DepositoryController { int i; Object key = it.next(); Double toDayInventoryByDName = depositoryService.getToDayInventoryByDName(key.toString()); - todayInventory.put(key.toString(),toDayInventoryByDName); + todayInventory.put(key.toString(), toDayInventoryByDName); for (i = days.size() - 1; i > 0; i--) { // 遍历 Map并计算各仓库的入库数 if (i == days.size() - 1) { @@ -768,7 +991,7 @@ public class DepositoryController { } Integer val = (Integer) depositoryAllNameAndId.get(key); // 获取一段时间内的库存额度 - // 测试 + Double depositoryRecordByDate1 = depositoryRecordService.findApplicationRecordByDate(days.get(i - 1), days.get(i), Integer.parseInt(type), val); drCountbyDrName.add(depositoryRecordByDate1); if (i == 2 && flag) { @@ -780,8 +1003,9 @@ public class DepositoryController { } } } - // 获取本月及之前月份各种类入/出库总量 - List materialTypeAll = materialTypeService.findMaterialTypeAll(); + + // 获取本月及之前月份各种类别入/出库总量 + List materialTypeAll = materialTypeService.findMaterialTypeNoParent(); Map previousMonth = getPreviousMonth(); List months = (List) previousMonth.get("months"); List sourceList = (List) previousMonth.get("sourceList"); @@ -857,13 +1081,13 @@ public class DepositoryController { depository_data.put("week", show_weekday); depository_data.put("data", show_data); depository_data.put("yesterdayData", yesterdayData); - depository_data.put("todayInventory",todayInventory); + depository_data.put("todayInventory", todayInventory); depository_data.put("sourceList", sourceList); depository_data.put("mapData", mapData); - depository_data.put("sourceListByMonth",getBeforeInventoryByMonth(depositoryService,depositoryRecordService)); - depository_data.put("BeforeInventory",getBeforeInventoryByDName(depositoryService,depositoryRecordService)); - depository_data.put("ThisWeekInventory",getThisWeekInventoryByDName(depositoryService,depositoryRecordService)); - depository_data.put("MapInventory",getBeforeInventoryOnMap(depositoryService,depositoryRecordService)); + depository_data.put("sourceListByMonth", getBeforeInventoryByMonth(depositoryService, depositoryRecordService)); + depository_data.put("BeforeInventory", getBeforeInventoryByDName(depositoryService, depositoryRecordService, userByPort)); + depository_data.put("ThisWeekInventory", getThisWeekInventoryByDName(depositoryService, depositoryRecordService, userByPort)); + depository_data.put("MapInventory", getBeforeInventoryOnMap(depositoryService, depositoryRecordService)); // 封装 最终数据 Map data = new LinkedHashMap(); data.put("depository_data", depository_data); @@ -879,61 +1103,64 @@ public class DepositoryController { /** * 根据物料编号查询所在仓库 + * * @param mid * @return */ @GetMapping("/find_depository") - public RestResponse FindDepositoryByMid(@RequestParam("mid") String mid){ + public RestResponse FindDepositoryByMid(@RequestParam("mid") String mid) { Material materialById = materialService.findMaterialById(Integer.parseInt(mid)); - Map param = new HashMap<>(); + Map param = new HashMap<>(); param.put("depositoryId", materialById.getDepositoryId()); List depositoryId = depositoryService.findDepositoryRecordPByCondition(param); - return new RestResponse(depositoryId.get(0),1, 200); + return new RestResponse(depositoryId.get(0), 1, 200); } /** * 根据物料名称查询所在仓库 + * * @param mname * @return */ @GetMapping("/findDepositoryByMname") - public RestResponse FindDepositoryByMname(@RequestParam("mname") String mname){ - return null; + public RestResponse FindDepositoryByMname(@RequestParam("mname") String mname) { + return null; } /** * 查找仓库内是否有物品 + * * @param depositoryId * @return */ @GetMapping("/findMaterialByDepository") - public RestResponse FindMaterialByDepository(@RequestParam("depositoryId") String depositoryId){ + public RestResponse FindMaterialByDepository(@RequestParam("depositoryId") String depositoryId) { Boolean allSonDepository = findAllSonDepository(depositoryId); return new RestResponse(allSonDepository); } /** * 查询该仓库是否有其他关联信息 + * * @param map * @return */ @PostMapping("/findRelevancyByDepository") - public RestResponse FindRelevancyByDepository(@RequestBody Map map){ + public RestResponse FindRelevancyByDepository(@RequestBody Map map) { Boolean allSonDepositoryOfRelevancy = false; - if(map.containsKey("id")){ + if (map.containsKey("id")) { Integer depositoryId = (Integer) map.get("id"); allSonDepositoryOfRelevancy = findAllSonDepositoryOfRelevancy(depositoryId.toString()); - }else if(map.containsKey("ids")){ + } else if (map.containsKey("ids")) { List ids = (List) map.get("ids"); for (int i = 0; i < ids.size(); i++) { - allSonDepositoryOfRelevancy |= findAllSonDepositoryOfRelevancy(ids.get(i).toString()); - if(allSonDepositoryOfRelevancy){ + allSonDepositoryOfRelevancy |= findAllSonDepositoryOfRelevancy(ids.get(i).toString()); + if (allSonDepositoryOfRelevancy) { break; } } - } - else { + } else { throw new MyException("所需请求参数缺失!"); } return new RestResponse(allSonDepositoryOfRelevancy); @@ -941,48 +1168,50 @@ public class DepositoryController { /** * 根据父级编号查询所有仓库物品 + * * @param parentid * @return */ - public Boolean findAllSonDepository(String parentid){ - Map param = new HashMap<>(); - param.put("parentId",parentid); - param.put("state",1); + public Boolean findAllSonDepository(String parentid) { + Map param = new HashMap<>(); + param.put("parentId", parentid); + param.put("state", 1); boolean materialByDepository = findMaterialByDepository(parentid); - if(materialByDepository){ + if (materialByDepository) { return true; } List depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param); for (int i = 0; i < depositoryRecordPByCondition.size(); i++) { - if(!findMaterialByDepository(depositoryRecordPByCondition.get(i).getId().toString())){ - findAllSonDepository(depositoryRecordPByCondition.get(i).getId().toString()); - }else{ - return true; - } + if (!findMaterialByDepository(depositoryRecordPByCondition.get(i).getId().toString())) { + findAllSonDepository(depositoryRecordPByCondition.get(i).getId().toString()); + } else { + return true; + } } return false; } /** * 根据父级编号查询所有关联信息 + * * @param parentid * @return */ public Boolean findAllSonDepositoryOfRelevancy(String parentid) { - Map param = new HashMap<>(); - param.put("parentId",parentid); - param.put("state",1); + Map param = new HashMap<>(); + param.put("parentId", parentid); + param.put("state", 1); boolean materialByDepository = findMaterialByDepository(parentid); Boolean depositoryRecord = findDepositoryRecord(parentid); - if(materialByDepository || depositoryRecord){ + if (materialByDepository || depositoryRecord) { return true; } List depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param); for (int i = 0; i < depositoryRecordPByCondition.size(); i++) { String depositoryId = depositoryRecordPByCondition.get(i).getId().toString(); - if(!findMaterialByDepository(depositoryId) && !findDepositoryRecord(depositoryId)){ + if (!findMaterialByDepository(depositoryId) && !findDepositoryRecord(depositoryId)) { findAllSonDepositoryOfRelevancy(depositoryRecordPByCondition.get(i).getId().toString()); - }else{ + } else { return true; } } @@ -991,15 +1220,16 @@ public class DepositoryController { /** * 根据仓库编号判断该仓库是否有物品 + * * @param parentId * @return */ - public boolean findMaterialByDepository(String parentId){ - Map param = new HashMap<>(); - param.put("state",1); - param.put("depositoryId",parentId); + public boolean findMaterialByDepository(String parentId) { + Map param = new HashMap<>(); + param.put("state", 1); + param.put("depositoryId", parentId); List materialPByCondition = materialService.findMaterialPByCondition(param); - if(materialPByCondition.size() > 0){ + if (materialPByCondition.size() > 0) { return true; } return false; @@ -1007,14 +1237,15 @@ public class DepositoryController { /** * 根据仓库编号查询与其有关的订单信息 + * * @param depositoryId * @return */ - public Boolean findDepositoryRecord(String depositoryId){ - Map param = new HashMap<>(); - param.put("depositoryId",depositoryId); + public Boolean findDepositoryRecord(String depositoryId) { + Map param = new HashMap<>(); + param.put("depositoryId", depositoryId); List recordPByCondition = depositoryRecordService.findDepositoryRecordPByCondition(param); - if(recordPByCondition.size() > 0){ + if (recordPByCondition.size() > 0) { return true; } return false; @@ -1022,19 +1253,20 @@ public class DepositoryController { /** * 查询当前仓库子仓库 + * * @param parentId * @return */ @GetMapping("/findDepositoryByParent") - public RestResponse FindDepositoryByParentId(@RequestParam("parentId") String parentId){ - Map param = new HashMap<>(); - param.put("parentId",parentId); + public RestResponse FindDepositoryByParentId(@RequestParam("parentId") String parentId) { + Map param = new HashMap<>(); + param.put("parentId", parentId); List depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param); return new RestResponse(depositoryRecordPByCondition, depositoryService.findCountByCondition(param), 200); } @GetMapping("/findManagerByDid") - public RestResponse FindManagerByDid(@RequestParam("did") Integer did){ + public RestResponse FindManagerByDid(@RequestParam("did") Integer did) { List userIdByDid = roleService.findUserIdByDid(did); List userByPortList = new ArrayList<>(); for (int i = 0; i < userIdByDid.size(); i++) { @@ -1046,19 +1278,19 @@ public class DepositoryController { @GetMapping("/findPostByCompany") - public RestResponse findPostByCompany(@RequestParam("company") String company){ + public RestResponse findPostByCompany(@RequestParam("company") String company) { List administrationPList = PageController.findCompanyBySuperior(company); int size = administrationPList.size(); - return new RestResponse(administrationPList,size, 200); + return new RestResponse(administrationPList, size, 200); } // 构造树选择框 @GetMapping("/treeMenus") - public RestResponse InitTreeMenus(@RequestParam(value = "adminorg",required = false) Integer adminorg){ + public RestResponse InitTreeMenus(@RequestParam(value = "adminorg", required = false) Integer adminorg) { List list = new ArrayList<>(); - if(Integer.compare(0,adminorg) == 0){ + if (Integer.compare(0, adminorg) == 0) { list = depositoryService.InitTreeMenus(); - }else { + } else { list = depositoryService.InitTreeMenus(adminorg.toString()); } return new RestResponse(list); @@ -1066,7 +1298,7 @@ public class DepositoryController { // 根据id获取仓库信息 @GetMapping("/findDepositoryByDid") - public RestResponse findDepositoryByDid(@RequestParam(value = "depositoryId")Integer depositoryId){ + public RestResponse findDepositoryByDid(@RequestParam(value = "depositoryId") Integer depositoryId) { Depository depositoryRecordById = depositoryService.findDepositoryRecordById(depositoryId); return new RestResponse(depositoryRecordById); } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java index 8cfdf6e4..ee78a5e6 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java @@ -108,7 +108,7 @@ public class DepositoryRecordController { if(params.size() < 1 && map.size() > 3) { // 获取库位id Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId")); - if(placeId == -1) {// 如果插入到仓库 + if(placeId == 0) {// 如果插入到仓库 map.put("placeId",0); // 到默认库位 integer += depositoryRecordService.applicationInPlace(map); }else{ // 如果具体到库位 diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java b/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java index f022df23..bd31cdc1 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java @@ -52,16 +52,22 @@ public class MaterialController { public RestResponse findInventory(@RequestParam Map map,HttpServletRequest request){ UserByPort userToken= (UserByPort) request.getAttribute("userToken"); List depositoryAndRole = roleService.findDepositoryAndRole(userToken.getId()); - List materialPByCondition = materialService.findInventory(map); + List depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userToken.getMaindeparment().toString()); List list = new ArrayList<>(); + Integer total = 0; + for (int i = 0; i < depositoryByAdminorg.size(); i++) { + map.put("depositoryId",depositoryByAdminorg.get(i).getId()); + List inventory = materialService.findInventory(map); + list.addAll(inventory); + total += materialService.findInventoryCount(map); + } + for (RoleAndDepository roleAndDepository : depositoryAndRole) { - for (MaterialP materialP : materialPByCondition) { - if (Objects.equals(materialP.getDepositoryId(), roleAndDepository.getDepositoryId())) { - list.add(materialP); - } - } + List materialByDepository = materialService.findMaterialByDepository(roleAndDepository.getDepositoryId()); + list.addAll(materialByDepository); + total += list.size(); } - return new RestResponse(list,list.size(),200); + return new RestResponse(list,total,200); } /** @@ -172,7 +178,7 @@ public class MaterialController { if("out".equals(type)) { for (int i = 0; i < depositoryByAdminorg.size(); i++) { param.put("depositoryId", depositoryByAdminorg.get(i).getId()); - materialPByCondition = materialService.findMaterialPByCondition(param); + materialPByCondition = materialService.findInventory(param); if (materialPByCondition.size() > 0) { break; } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java index a8c8cf1c..4dfc589f 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java @@ -643,14 +643,6 @@ public class PageController { public ModelAndView chart_in_back() { ModelAndView mv = new ModelAndView(); mv.setViewName("pages/chart/chart-in_back"); - /** - * 仓库总数 - */ - mv.addObject("depositories", depositoryService.findDepositoryAll()); - /** - * 物料总数 - */ - mv.addObject("materials", materialService.findMaterialAll()); // 转入物料数量 mv.addObject("InCount", depositoryRecordService.CalculateAllApplicationInCount()); @@ -1411,7 +1403,7 @@ public class PageController { @GetMapping("/scanQrCode") public String scanQrCode(){ - return "pages/uniApp/scanQrCode"; + return "pages/uniApp/scanQrCodePlus?callback='/index'"; } } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java b/src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java index 74b1bcc3..aa2c99f3 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java @@ -16,10 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @RestController @RequestMapping("/place") @@ -140,6 +137,21 @@ public class PlaceController { else{ throw new MyException("所需请求参数缺失!"); } + + Place placeById = placeService.findPlaceById(0); + if(placeById == null){ + Map defaultPlace = new HashMap<>(); + defaultPlace.put("id",0); + defaultPlace.put("x",0); + defaultPlace.put("z",0); + defaultPlace.put("code","0000"); + defaultPlace.put("min",0); + defaultPlace.put("max",999999999); + defaultPlace.put("state",1); + defaultPlace.put("did",0); + defaultPlace.put("quantity",0); + placeService.InsertPlace(defaultPlace); + } if ("one".equals(type)) { return CrudUtil.postHandle(success, 1); } else if("list".equals(type)){ diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java b/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java index 3c02561d..7cb3a584 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java @@ -67,6 +67,13 @@ public interface MaterialMapper { */ List findMaterialByCondition(Mapmap); + /** + * 根据条件查询符合条件的库存总数 + * @param map + * @return + */ + Integer findInventoryCount(Map map); + /** * 根据条件查询符合条件的库存 * @param map @@ -136,4 +143,11 @@ public interface MaterialMapper { */ List findMaterialByDepositorys(List ids); + /** + * 根据仓库查询物品 + * @param depositoryId + * @return + */ + List findMaterialByDepository(Integer depositoryId); + } diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml b/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml index 13fe1891..74884189 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml @@ -124,6 +124,7 @@ and code = #{code} + and depository_id is null LIMIT #{begin},#{size} @@ -165,6 +166,38 @@ + + + + diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml b/src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml index d9175c41..2c44729f 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml @@ -53,12 +53,13 @@ from materialandplace mp left join place p on p.id = mp.pid where 1 = 1 - - and p.did = #{did} - + and mp.mid = #{mid} + + and ( p.did = #{did} or p.did = 0) + diff --git a/src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java b/src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java index 91d89436..2f724ebc 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java @@ -1,6 +1,7 @@ package com.dreamchaser.depository_manage.service; import com.dreamchaser.depository_manage.entity.Depository; +import com.dreamchaser.depository_manage.entity.UserByPort; import java.util.List; import java.util.Map; @@ -109,11 +110,11 @@ public interface DepositoryService { * 查询所有仓库名称即对应编号 * @return */ - Map findDepositoryAllNameAndId(); + Map findDepositoryAllNameAndId(UserByPort user); /** - * 根据仓库名称获取当前仓库库存容量 + * 根据名称或编码获取当前仓库库存容量 * @param dname * @return */ diff --git a/src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java b/src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java index 420ef586..6a075109 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java @@ -58,6 +58,13 @@ public interface MaterialService { */ List findInventory(Map map); + /** + * 根据条件查询符合条件的库存总数 + * @param map + * @return + */ + Integer findInventoryCount(Map map); + /** * 根据编码获取对应物料 * @return @@ -149,4 +156,11 @@ public interface MaterialService { * @return */ List findMaterialByDepositorys(List dids); + + /** + * 根据仓库查询物品 + * @param depositoryId + * @return + */ + List findMaterialByDepository(Integer depositoryId); } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/PlaceService.java b/src/main/java/com/dreamchaser/depository_manage/service/PlaceService.java index 69f3dd30..ea5d2bae 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/PlaceService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/PlaceService.java @@ -102,5 +102,11 @@ public interface PlaceService { */ MaterialAndPlace findPlaceAndMaterialByMidAndPid(Integer pid,Integer mid); + /** + * 添加物料到库位 + * @param map + * @return + */ + Integer addMaterialOnPlace(Map map); } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java index 2654410c..a4428c73 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java @@ -107,8 +107,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { } Map param = new HashMap<>(); param.put("depositoryId", depositoryId); - param.put("mname", material.getMname()); - List materialByCondition = materialMapper.findMaterialByCondition(param); + param.put("code", material.getCode()); + // 判断该仓库中有无该物体 + List materialByCondition = materialMapper.findInventory(param); // 获取当前入库金额 Double amounts = (quantity * price * 100); // 获取平均价格 @@ -364,7 +365,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { map.put("fromPlaceId",0); } map.put("toPlaceId",toPlaceId) ; - if("".equals(toPlaceId) || "0".equals(fromPlaceId)){ + if("".equals(toPlaceId) || "0".equals(toPlaceId)){ map.put("toPlaceId",0); } //清除主键 @@ -439,6 +440,16 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 如果当前库位数量不足 flag = false; } + }else{ + Map params = new HashMap<>(); + params.put("mid",material.getId()); + params.put("pid",0); + // 获取当前物料在默认库位中的数量 + placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(params); + if(placeAndMaterialByMidAndPid.getQuantity() < record.getQuantity()){ + // 如果当前库位数量不足 + flag = false; + } } if (material.getQuantity() >= record.getQuantity() && flag) { // 当前出库金额 @@ -496,9 +507,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { TransferRecord transferRecor = transferRecordMapper.findTransferRecordById(transferId); Integer mid = transferRecor.getMid(); Material material = materialMapper.findMaterialById(mid); - param.put("mname", material.getMname()); + param.put("code", material.getCode()); param.put("depositoryId", transferRecor.getToId()); - List materiallist = materialMapper.findMaterialByCondition(param); + List materiallist = materialMapper.findInventory(param); if (materiallist.size() > 0) { // 如果在该仓库 map.put("price",material.getPrice().toString()); diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java index 49d436b8..271828f7 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java @@ -239,14 +239,39 @@ public class DepositoryServiceImpl implements DepositoryService { return depositoryMapper.findAllCountByState(); } + /** + * 获取本部门以及个人管理仓库的名称和id + * @return + */ @Override - public Map findDepositoryAllNameAndId() { - List depositoryAll = depositoryMapper.findDepositoryAll(); - Map map = new HashMap<>(); - for (int i = 0; i < depositoryAll.size(); i++) { - if(depositoryAll.get(i).getParentId() != 0) { - map.put(depositoryAll.get(i).getDname() + "," + depositoryAll.get(i).getCode(), depositoryAll.get(i).getId()); + public Map findDepositoryAllNameAndId(UserByPort user) { + // 获取当前用户所在部门管理的仓库 + List depositoryByAdminorg = depositoryMapper.findDepositoryByAdminorg(user.getMaindeparmentname()); + + // 仓库id列表 + List depositoryListId = new ArrayList<>(); + // 添加到id列表 + for (Depository depository : depositoryByAdminorg) { + depositoryListId.add(depository.getId()); + } + + // 获取当前用户管理的仓库 + List depositoryAndRole = roleMapper.findDepositoryAndRole(user.getId()); + + for (int i = 0; i < depositoryAndRole.size(); i++) { + RoleAndDepository roleAndDepository = depositoryAndRole.get(i); + // 如果重复则跳过 + if(depositoryListId.get(i).compareTo(roleAndDepository.getDepositoryId()) == 0){ + continue; } + depositoryListId.add(roleAndDepository.getDepositoryId()); + } + Map map = new HashMap<>(); + for (int i = 0; i < depositoryListId.size(); i++) { + Integer depositoryId = depositoryListId.get(i); + Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(depositoryId); + map.put(depositoryRecordById.getDname() + "," + depositoryRecordById.getCode(), depositoryRecordById.getId()); + } return map; } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java index 8649418c..48e9388f 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java @@ -36,14 +36,16 @@ public class ExcelServiceImpl implements ExcelService { @Autowired PlaceService placeService; + /** * 用于导入物料名称 + * * @param file * @param excelInfo * @return */ @Override - public ResultVo importExcelMaterial(MultipartFile file,String excelInfo) { + public ResultVo importExcelMaterial(MultipartFile file, String excelInfo) { // 1.入参校验 ResultVo checkExcelParam = excelutil.checkExcelParam(file); if (!checkExcelParam.checkSuccess()) { @@ -55,19 +57,19 @@ public class ExcelServiceImpl implements ExcelService { if (!resultVo.checkSuccess()) { return resultVo; } - String filePath = (String)resultVo.getData(); + String filePath = (String) resultVo.getData(); if (StringUtils.isBlank(filePath)) { return ResultVoUtil.error("【导入Excel文件】生成的Excel文件的路径为空"); } // 3.读取excel文件 - Map readResult = new HashMap<>(); - if("material".equals(excelInfo)){ - readResult = excelutil.simpleExcelRead(filePath, ExcelInfo.class); + Map readResult = new HashMap<>(); + if ("material".equals(excelInfo)) { + readResult = excelutil.simpleExcelRead(filePath, ExcelInfo.class); } List excelVos = (List) readResult.get("dataList"); - List errMsg =(List) readResult.get("errMsg"); + List errMsg = (List) readResult.get("errMsg"); boolean empty = CollectionUtil.isEmpty(excelVos); - if ((CollectionUtil.isEmpty(excelVos) && errMsg.size() < 1) || (excelVos.size() < 2 && errMsg.size() < 1) ) { + if ((CollectionUtil.isEmpty(excelVos) && errMsg.size() < 1) || (excelVos.size() < 2 && errMsg.size() < 1)) { log.error("【导入Excel文件】上传Excel文件{}为空", file.getOriginalFilename()); return ResultVoUtil.error("上传Excel文件为空"); } @@ -76,25 +78,25 @@ public class ExcelServiceImpl implements ExcelService { TaskCenterUtil taskCenterUtil = TaskCenterUtil.getTaskCenterUtil(); taskCenterUtil.submitTask(() -> { List success = new ArrayList<>(); - Map returnResult = new HashMap<>(); + Map returnResult = new HashMap<>(); for (int i = 0; i < excelVos.size(); i++) { - Map param = new HashMap<>(); - param.put("mname",excelVos.get(i).getMname()); - param.put("code",excelVos.get(i).getCode()); - param.put("unit",excelVos.get(i).getUnit()); - param.put("version",excelVos.get(i).getVersion()); - param.put("texture",excelVos.get(i).getTexture()); - param.put("materialTypeId",excelVos.get(i).getTypeId()); - param.put("id",excelVos.get(i).getId()); + Map param = new HashMap<>(); + param.put("mname", excelVos.get(i).getMname()); + param.put("code", excelVos.get(i).getCode()); + param.put("unit", excelVos.get(i).getUnit()); + param.put("version", excelVos.get(i).getVersion()); + param.put("texture", excelVos.get(i).getTexture()); + param.put("materialTypeId", excelVos.get(i).getTypeId()); + param.put("id", excelVos.get(i).getId()); materialService.insertMaterial(param); success.add(excelVos.get(i)); } log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVos)); - returnResult.put("success",success); - returnResult.put("errMsg",errMsg); - return ResultVoUtil.returnResultVo(200,returnResult,"结果"); + returnResult.put("success", success); + returnResult.put("errMsg", errMsg); + return ResultVoUtil.returnResultVo(200, returnResult, "结果"); }); // 4.2删除临时文件 boolean deleteFile = FileUtil.deleteFile(new File(filePath)); @@ -103,12 +105,13 @@ public class ExcelServiceImpl implements ExcelService { return ResultVoUtil.error("删除临时文件失败"); } log.info("【导入Excel文件】删除临时文件成功,临时文件路径为:{}", filePath); - return ResultVoUtil.returnResultVo(200,readResult,"结果"); + return ResultVoUtil.returnResultVo(200, readResult, "结果"); // return ResultVoUtil.success(excelVos); } /** * 用于导入物料分类 + * * @param file * @return */ @@ -125,20 +128,20 @@ public class ExcelServiceImpl implements ExcelService { if (!resultVo.checkSuccess()) { return resultVo; } - String filePath = (String)resultVo.getData(); + String filePath = (String) resultVo.getData(); if (StringUtils.isBlank(filePath)) { return ResultVoUtil.error("【导入Excel文件】生成的Excel文件的路径为空"); } // 3.读取excel文件 - Map readResult = excelutil.simpleExcelRead(filePath, ExcelInfoByMT.class); + Map readResult = excelutil.simpleExcelRead(filePath, ExcelInfoByMT.class); List excelVos = (List) readResult.get("dataList"); - List errMsg =(List) readResult.get("errMsg"); + List errMsg = (List) readResult.get("errMsg"); boolean empty = CollectionUtil.isEmpty(excelVos); - if ((CollectionUtil.isEmpty(excelVos) && errMsg.size() < 1) || (excelVos.size() < 2 && errMsg.size() < 1) ) { + if ((CollectionUtil.isEmpty(excelVos) && errMsg.size() < 1) || (excelVos.size() < 2 && errMsg.size() < 1)) { log.error("【导入Excel文件】上传Excel文件{}为空", file.getOriginalFilename()); return ResultVoUtil.error("上传Excel文件为空"); } - if ((CollectionUtil.isEmpty(excelVos) && errMsg.size() < 1) || (excelVos.size() < 2 && errMsg.size() < 1) ) { + if ((CollectionUtil.isEmpty(excelVos) && errMsg.size() < 1) || (excelVos.size() < 2 && errMsg.size() < 1)) { log.error("【导入Excel文件】上传Excel文件{}为空", file.getOriginalFilename()); return ResultVoUtil.error("上传Excel文件为空"); } @@ -147,16 +150,16 @@ public class ExcelServiceImpl implements ExcelService { TaskCenterUtil taskCenterUtil = TaskCenterUtil.getTaskCenterUtil(); taskCenterUtil.submitTask(() -> { List success = new ArrayList<>(); - Map returnResult = new HashMap<>(); + Map returnResult = new HashMap<>(); for (int i = 0; i < excelVos.size(); i++) { - Map insert = new HashMap<>(); - insert.put("id",excelVos.get(i).getId()); - insert.put("tname",excelVos.get(i).getTname()); - insert.put("introduce",excelVos.get(i).getIntroduce()); - if(excelVos.get(i).getParentId() == null){ - insert.put("materialTypeId",0); - }else { + Map insert = new HashMap<>(); + insert.put("id", excelVos.get(i).getId()); + insert.put("tname", excelVos.get(i).getTname()); + insert.put("introduce", excelVos.get(i).getIntroduce()); + if (excelVos.get(i).getParentId() == null) { + insert.put("materialTypeId", 0); + } else { insert.put("materialTypeId", excelVos.get(i).getParentId()); } materialTypeService.insertMaterialType(insert); @@ -164,9 +167,9 @@ public class ExcelServiceImpl implements ExcelService { } log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVos)); - returnResult.put("success",success); - returnResult.put("errMsg",errMsg); - return ResultVoUtil.returnResultVo(200,returnResult,"结果"); + returnResult.put("success", success); + returnResult.put("errMsg", errMsg); + return ResultVoUtil.returnResultVo(200, returnResult, "结果"); }); // 4.2删除临时文件 boolean deleteFile = FileUtil.deleteFile(new File(filePath)); @@ -175,7 +178,7 @@ public class ExcelServiceImpl implements ExcelService { return ResultVoUtil.error("删除临时文件失败"); } log.info("【导入Excel文件】删除临时文件成功,临时文件路径为:{}", filePath); - return ResultVoUtil.returnResultVo(200,readResult,"结果"); + return ResultVoUtil.returnResultVo(200, readResult, "结果"); // return ResultVoUtil.success(excelVos); } @@ -183,6 +186,7 @@ public class ExcelServiceImpl implements ExcelService { /** * 用于导入库存信息 + * * @param file * @return */ @@ -199,21 +203,21 @@ public class ExcelServiceImpl implements ExcelService { if (!resultVo.checkSuccess()) { return resultVo; } - String filePath = (String)resultVo.getData(); + String filePath = (String) resultVo.getData(); if (StringUtils.isBlank(filePath)) { return ResultVoUtil.error("【导入Excel文件】生成的Excel文件的路径为空"); } // 3.读取excel文件 - Map readResult = excelutil.simpleExcelRead(filePath, ExcelInfoByInventory.class); + Map readResult = excelutil.simpleExcelRead(filePath, ExcelInfoByInventory.class); List excelInfoByInventories = (List) readResult.get("dataList"); - List errMsg =(List) readResult.get("errMsg"); - List dataIndex =(List) readResult.get("dataIndex"); + List errMsg = (List) readResult.get("errMsg"); + List dataIndex = (List) readResult.get("dataIndex"); boolean empty = CollectionUtil.isEmpty(excelInfoByInventories); - if ((CollectionUtil.isEmpty(excelInfoByInventories) && errMsg.size() < 1) || (excelInfoByInventories.size() < 2 && errMsg.size() < 1) ) { + if ((CollectionUtil.isEmpty(excelInfoByInventories) && errMsg.size() < 1) || (excelInfoByInventories.size() < 2 && errMsg.size() < 1)) { log.error("【导入Excel文件】上传Excel文件{}为空", file.getOriginalFilename()); return ResultVoUtil.error("上传Excel文件为空"); } - if ((CollectionUtil.isEmpty(excelInfoByInventories) && errMsg.size() < 1) || (excelInfoByInventories.size() < 2 && errMsg.size() < 1) ) { + if ((CollectionUtil.isEmpty(excelInfoByInventories) && errMsg.size() < 1) || (excelInfoByInventories.size() < 2 && errMsg.size() < 1)) { log.error("【导入Excel文件】上传Excel文件{}为空", file.getOriginalFilename()); return ResultVoUtil.error("上传Excel文件为空"); } @@ -225,92 +229,110 @@ public class ExcelServiceImpl implements ExcelService { String placeCode = excelInfoByInventories.get(i).getDepositoryCode(); Integer depositoryId = excelInfoByInventories.get(i).getDepositoryId(); // 如果导入时输入库位信息 - if(!placeCode.isEmpty()) { - Map placeMap = new HashMap<>(); - placeMap.put("did",depositoryId); - placeMap.put("code",placeCode); + if (placeCode != null && !placeCode.isEmpty()) { + Map placeMap = new HashMap<>(); + placeMap.put("did", depositoryId); + placeMap.put("code", placeCode); // 根据仓库及库位码获取库位 List placeByCondition = placeService.findPlaceByCondition(placeMap); - if(placeByCondition.size()>0){ + if (placeByCondition.size() > 0) { // 如果有库位 Place place = placeByCondition.get(0); - // 如果库位有物料 - if(!Objects.equals(place.getMid(), materialByCode.getId())) { - // 如果该库位的物料不是当前物料 + // 如果库位有物料且该库位存放的物料为当前物料 + Integer quantity = ObjectFormatUtil.toInteger(excelInfoByInventories.get(i).getQuantity()); + if (quantity > place.getMax() - place.getQuantity()) { + // 如果当前库位无法放下 String s = dataIndex.get(i); - String msg = s + "出现异常:" + excelInfoByInventories.get(i).getDepositoryCode() + " 该库位已有物料"; + String msg = s + "出现异常:" + excelInfoByInventories.get(i).getDepositoryCode() + " 该库位无法存放当前数目的物料"; errMsg.add(msg); continue; - }else { - // 如果当前库位没有物料或该库位存放的物料为当前物料 - Integer quantity = ObjectFormatUtil.toInteger(excelInfoByInventories.get(i).getQuantity()); - if(quantity > place.getMax() - place.getQuantity()){ - // 如果当前库位无法放下 - String s = dataIndex.get(i); - String msg = s + "出现异常:" + excelInfoByInventories.get(i).getDepositoryCode() + " 该库位无法存放当前数目的物料"; - errMsg.add(msg); - continue; - }else { - Map updatePlace = new HashMap<>(); - updatePlace.put("mid", materialByCode.getId()); - updatePlace.put("id", place.getId()); - updatePlace.put("quantity",quantity + place.getQuantity()); - excelVos.add(excelInfoByInventories.get(i)); - placeService.UpdatePlace(updatePlace); - } + } else { + // 修改当前库位库存 + Map updatePlace = new HashMap<>(); + updatePlace.put("id", place.getId()); + updatePlace.put("quantity", quantity + place.getQuantity()); + placeService.UpdatePlace(updatePlace); + excelVos.add(excelInfoByInventories.get(i)); + // 添加库位与物料记录 + updatePlace.remove("id"); + updatePlace.put("mid", materialByCode.getId()); + updatePlace.put("pid", place.getId()); + placeService.addMaterialOnPlace(updatePlace); } - }else{ + } else { String s = dataIndex.get(i); String msg = s + "出现异常:" + excelInfoByInventories.get(i).getDepositoryCode() + " 该仓库没有该库位"; errMsg.add(msg); continue; } + } else { // 否则直接加入 + excelVos.add(excelInfoByInventories.get(i)); } } - readResult.put("dataList",excelVos); + readResult.put("dataList", excelVos); // 4.通过线程池开启一个线程去执行数据库操作,主线程继续往下执行 // 4.1开启一个线程 TaskCenterUtil taskCenterUtil = TaskCenterUtil.getTaskCenterUtil(); taskCenterUtil.submitTask(() -> { List success = new ArrayList<>(); - Map returnResult = new HashMap<>(); + Map returnResult = new HashMap<>(); for (int i = 0; i < excelVos.size(); i++) { // 获取对应物料 Material materialByCode = materialService.findMaterialByCode(excelVos.get(i).getCode()); - Map update = new HashMap<>(); + // 添加库存记录 + Map insert = new HashMap<>(); Integer depositoryId = excelVos.get(i).getDepositoryId(); - update.put("quantity",String.valueOf(ObjectFormatUtil.toInteger(excelVos.get(i).getQuantity()) + materialByCode.getQuantity())); + insert.put("mname", materialByCode.getMname()); + insert.put("materialTypeId", materialByCode.getTypeId()); + insert.put("state", materialByCode.getState()); + insert.put("code", materialByCode.getCode()); + insert.put("unit", materialByCode.getUnit()); + insert.put("texture", materialByCode.getTexture()); + insert.put("quantity", String.valueOf(ObjectFormatUtil.toInteger(excelVos.get(i).getQuantity()) + materialByCode.getQuantity())); // 如果模板中总金额未填写 - if(excelVos.get(i).getAmounts() == null || "".equals(excelVos.get(i).getAmounts())){ + if (excelVos.get(i).getAmounts() == null || "".equals(excelVos.get(i).getAmounts())) { // 求均值 // 总金额 - Double amounts = Double.parseDouble(excelVos.get(i).getPrice())*100 * Double.parseDouble(excelVos.get(i).getQuantity()); - update.put("amounts",String.valueOf(materialByCode.getAmounts()+amounts)); + Double amounts = Double.parseDouble(excelVos.get(i).getPrice()) * 100 * Double.parseDouble(excelVos.get(i).getQuantity()); + insert.put("amounts", String.valueOf(materialByCode.getAmounts() + amounts)); // 保留两位 - Double avgPrice = (materialByCode.getAmounts()+amounts) / (Double.parseDouble(excelVos.get(i).getQuantity()) + materialByCode.getQuantity() ); + Double avgPrice = (materialByCode.getAmounts() + amounts) / (Double.parseDouble(excelVos.get(i).getQuantity()) + materialByCode.getQuantity()); BigDecimal bg = new BigDecimal(avgPrice); - avgPrice = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - update.put("price",String.valueOf(avgPrice)); - }else { + avgPrice = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + insert.put("price", String.valueOf(avgPrice)); + } else { // 求均值 - update.put("amounts", String.valueOf(materialByCode.getAmounts()+Double.parseDouble(excelVos.get(i).getAmounts()) * 100)); - Double avgPrice = (materialByCode.getAmounts()+Double.parseDouble(excelVos.get(i).getAmounts()) * 100) / ((Double.parseDouble(excelVos.get(i).getQuantity()) + materialByCode.getQuantity() )); + insert.put("amounts", String.valueOf(materialByCode.getAmounts() + Double.parseDouble(excelVos.get(i).getAmounts()) * 100)); + Double avgPrice = (materialByCode.getAmounts() + Double.parseDouble(excelVos.get(i).getAmounts()) * 100) / ((Double.parseDouble(excelVos.get(i).getQuantity()) + materialByCode.getQuantity())); // 保留两位 BigDecimal bg = new BigDecimal(avgPrice); - avgPrice = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - update.put("price",String.valueOf(avgPrice)); + avgPrice = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + insert.put("price", String.valueOf(avgPrice)); } - update.put("depositoryId", depositoryId); - update.put("depositoryCode",excelVos.get(i).getDepositoryCode()); - update.put("id",materialByCode.getId()); - materialService.updateMaterial(update); + insert.put("depositoryId", depositoryId); + insert.put("depositoryCode", excelVos.get(i).getDepositoryCode()); + materialService.insertMaterial(insert); + + // 将该物料同时放入默认库位中 + Map param = new HashMap<>(); + // 获取默认库位 + Place placeById = placeService.findPlaceById(0); + // 修改默认库位库存 + placeById.setQuantity(placeById.getQuantity() + ObjectFormatUtil.toInteger(excelVos.get(i).getQuantity())); + placeService.UpdatePlace(placeById); + // 添加库位与物料的映射 + param.put("mid",materialByCode.getId()); + param.put("pid",0); + param.put("quantity",ObjectFormatUtil.toInteger(excelVos.get(i).getQuantity())); + placeService.addMaterialOnPlace(param); + success.add(excelVos.get(i)); } log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVos)); - returnResult.put("success",success); - returnResult.put("errMsg",errMsg); - return ResultVoUtil.returnResultVo(200,returnResult,"结果"); + returnResult.put("success", success); + returnResult.put("errMsg", errMsg); + return ResultVoUtil.returnResultVo(200, returnResult, "结果"); }); // 4.2删除临时文件 boolean deleteFile = FileUtil.deleteFile(new File(filePath)); @@ -319,6 +341,6 @@ public class ExcelServiceImpl implements ExcelService { return ResultVoUtil.error("删除临时文件失败"); } log.info("【导入Excel文件】删除临时文件成功,临时文件路径为:{}", filePath); - return ResultVoUtil.returnResultVo(200,readResult,"结果"); + return ResultVoUtil.returnResultVo(200, readResult, "结果"); } } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java index 7b7a4888..77499935 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java @@ -127,12 +127,16 @@ public class MaterialServiceImpl implements MaterialService { // 获取当前物料所处仓库 Integer depositoryId = list.get(i).getDepositoryId(); // 获取当前物料所处库位 - Integer mid = list.get(i).getId(); - List placeByMidAndDid = placeService.findPlaceByMidAndDid(mid, depositoryId); + StringBuilder placeCode = new StringBuilder(); - for (int j = 0; j < placeByMidAndDid.size(); j++) { - placeCode.append(placeByMidAndDid.get(j).getCode()).append(" "); + if(depositoryId != null) { + Integer mid = list.get(i).getId(); + List placeByMidAndDid = placeService.findPlaceByMidAndDid(mid, depositoryId); + for (int j = 0; j < placeByMidAndDid.size(); j++) { + placeCode.append(placeByMidAndDid.get(j).getCode()).append(" "); + } } + if(depositoryId != null){ Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(depositoryId); String code = depositoryRecordById.getCode(); @@ -182,6 +186,16 @@ public class MaterialServiceImpl implements MaterialService { return pack(list); } + /** + * 根据条件查询符合条件的库存总数 + * @param map + * @return + */ + @Override + public Integer findInventoryCount(Map map) { + return materialMapper.findInventoryCount(map); + } + /** * 根据编码获取对应物料 * @return @@ -362,6 +376,12 @@ public class MaterialServiceImpl implements MaterialService { return materialMapper.findMaterialByDepositorys(dids); } + @Override + public List findMaterialByDepository(Integer depositoryId) { + List materialByDepository = materialMapper.findMaterialByDepository(depositoryId); + return pack(materialByDepository); + } + /** * 构造树形选择框 * @return diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/PlaceServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/PlaceServiceImpl.java index abfb8a85..4e91a619 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/PlaceServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/PlaceServiceImpl.java @@ -179,8 +179,13 @@ public class PlaceServiceImpl implements PlaceService { for (int i = 0; i < placeByCondition.size(); i++) { Place place = placeByCondition.get(i); PlaceP pp = new PlaceP(place); - Depository depositoryRecordById = depositoryService.findDepositoryRecordById(place.getDid()); - pp.setDepositoryName(depositoryRecordById.getDname()); + Integer did = place.getDid(); + if(did != 0){ + Depository depositoryRecordById = depositoryService.findDepositoryRecordById(did); + pp.setDepositoryName(depositoryRecordById.getDname()); + }else{ + pp.setDepositoryName("默认库位"); + } placePList.add(pp); } return placePList; @@ -205,4 +210,15 @@ public class PlaceServiceImpl implements PlaceService { return placeMapper.findPlaceAndMaterialByMidAndPid(map); } + /** + * 添加物料到库位 + * @param map + * @return + */ + @Override + public Integer addMaterialOnPlace(Map map) { + return placeMapper.addMaterialOnPlace(map); + } + + } diff --git a/src/main/resources/static/js/lay-module/step-lay/step.css b/src/main/resources/static/js/lay-module/step-lay/step.css index 14700382..5a2bc16e 100644 --- a/src/main/resources/static/js/lay-module/step-lay/step.css +++ b/src/main/resources/static/js/lay-module/step-lay/step.css @@ -58,7 +58,7 @@ /*margin-left: -20px;*/ /*margin-left: -50%;*/ /*margin-right: 50%;*/ - padding-left: 26px; + /*padding-left: 26px;*/ text-align: center; } diff --git a/src/main/resources/static/vue/common/helper.js b/src/main/resources/static/vue/common/helper.js new file mode 100644 index 00000000..092a045f --- /dev/null +++ b/src/main/resources/static/vue/common/helper.js @@ -0,0 +1,20 @@ +function test (){ + console.log('test方法'); +} + +function IsURL(str_url) { + return (/^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/gm).test(str_url); +} + +function AnalysisURL(url) { + return /^(https?:\/\/)([0-9a-z.]+)(:[0-9]+)?([/0-9a-z.]+)?(\?[0-9a-z&=]+)?(#[0-9-a-z]+)?/i.exec(url); +} + + +const permission = { + test:test, + IsURL:IsURL, + AnalysisURL:AnalysisURL +} + +module.exports = permission \ No newline at end of file diff --git a/src/main/resources/static/vue/common/permission.js b/src/main/resources/static/vue/common/permission.js new file mode 100644 index 00000000..03abce62 --- /dev/null +++ b/src/main/resources/static/vue/common/permission.js @@ -0,0 +1,245 @@ +/// null = 未请求,1 = 已允许,0 = 拒绝|受限, 2 = 系统未开启 + +var isIOS + +function album() { + var result = 0; + var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary"); + var authStatus = PHPhotoLibrary.authorizationStatus(); + if (authStatus === 0) { + result = null; + } else if (authStatus == 3) { + result = 1; + } else { + result = 0; + } + plus.ios.deleteObject(PHPhotoLibrary); + return result; +} + +function camera() { + var result = 0; + var AVCaptureDevice = plus.ios.import("AVCaptureDevice"); + var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide'); + if (authStatus === 0) { + result = null; + } else if (authStatus == 3) { + result = 1; + } else { + result = 0; + } + plus.ios.deleteObject(AVCaptureDevice); + return result; +} + +function location() { + var result = 0; + var cllocationManger = plus.ios.import("CLLocationManager"); + var enable = cllocationManger.locationServicesEnabled(); + var status = cllocationManger.authorizationStatus(); + if (!enable) { + result = 2; + } else if (status === 0) { + result = null; + } else if (status === 3 || status === 4) { + result = 1; + } else { + result = 0; + } + plus.ios.deleteObject(cllocationManger); + return result; +} + +function push() { + var result = 0; + var UIApplication = plus.ios.import("UIApplication"); + var app = UIApplication.sharedApplication(); + var enabledTypes = 0; + if (app.currentUserNotificationSettings) { + var settings = app.currentUserNotificationSettings(); + enabledTypes = settings.plusGetAttribute("types"); + if (enabledTypes == 0) { + result = 0; + console.log("推送权限没有开启"); + } else { + result = 1; + console.log("已经开启推送功能!") + } + plus.ios.deleteObject(settings); + } else { + enabledTypes = app.enabledRemoteNotificationTypes(); + if (enabledTypes == 0) { + result = 3; + console.log("推送权限没有开启!"); + } else { + result = 4; + console.log("已经开启推送功能!") + } + } + plus.ios.deleteObject(app); + plus.ios.deleteObject(UIApplication); + return result; +} + +function contact() { + var result = 0; + var CNContactStore = plus.ios.import("CNContactStore"); + var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0); + if (cnAuthStatus === 0) { + result = null; + } else if (cnAuthStatus == 3) { + result = 1; + } else { + result = 0; + } + plus.ios.deleteObject(CNContactStore); + return result; +} + +function record() { + var result = null; + var avaudiosession = plus.ios.import("AVAudioSession"); + var avaudio = avaudiosession.sharedInstance(); + var status = avaudio.recordPermission(); + console.log("permissionStatus:" + status); + if (status === 1970168948) { + result = null; + } else if (status === 1735552628) { + result = 1; + } else { + result = 0; + } + plus.ios.deleteObject(avaudiosession); + return result; +} + +function calendar() { + var result = null; + var EKEventStore = plus.ios.import("EKEventStore"); + var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0); + if (ekAuthStatus == 3) { + result = 1; + console.log("日历权限已经开启"); + } else { + console.log("日历权限没有开启"); + } + plus.ios.deleteObject(EKEventStore); + return result; +} + +function memo() { + var result = null; + var EKEventStore = plus.ios.import("EKEventStore"); + var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1); + if (ekAuthStatus == 3) { + result = 1; + console.log("备忘录权限已经开启"); + } else { + console.log("备忘录权限没有开启"); + } + plus.ios.deleteObject(EKEventStore); + return result; +} + + +function requestIOS(permissionID) { + return new Promise((resolve, reject) => { + switch (permissionID) { + case "push": + resolve(push()); + break; + case "location": + resolve(location()); + break; + case "record": + resolve(record()); + break; + case "camera": + resolve(camera()); + break; + case "album": + resolve(album()); + break; + case "contact": + resolve(contact()); + break; + case "calendar": + resolve(calendar()); + break; + case "memo": + resolve(memo()); + break; + default: + resolve(0); + break; + } + }); +} + +function requestAndroid(permissionID) { + return new Promise((resolve, reject) => { + plus.android.requestPermissions( + [permissionID], + function(resultObj) { + var result = 0; + for (var i = 0; i < resultObj.granted.length; i++) { + var grantedPermission = resultObj.granted[i]; + console.log('已获取的权限:' + grantedPermission); + result = 1 + } + for (var i = 0; i < resultObj.deniedPresent.length; i++) { + var deniedPresentPermission = resultObj.deniedPresent[i]; + console.log('拒绝本次申请的权限:' + deniedPresentPermission); + result = 0 + } + for (var i = 0; i < resultObj.deniedAlways.length; i++) { + var deniedAlwaysPermission = resultObj.deniedAlways[i]; + console.log('永久拒绝申请的权限:' + deniedAlwaysPermission); + result = -1 + } + resolve(result); + }, + function(error) { + console.log('result error: ' + error.message) + resolve({ + code: error.code, + message: error.message + }); + } + ); + }); +} + +function gotoAppPermissionSetting() { + if (permission.isIOS) { + var UIApplication = plus.ios.import("UIApplication"); + var application2 = UIApplication.sharedApplication(); + var NSURL2 = plus.ios.import("NSURL"); + var setting2 = NSURL2.URLWithString("app-settings:"); + application2.openURL(setting2); + plus.ios.deleteObject(setting2); + plus.ios.deleteObject(NSURL2); + plus.ios.deleteObject(application2); + } else { + var Intent = plus.android.importClass("android.content.Intent"); + var Settings = plus.android.importClass("android.provider.Settings"); + var Uri = plus.android.importClass("android.net.Uri"); + var mainActivity = plus.android.runtimeMainActivity(); + var intent = new Intent(); + intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + var uri = Uri.fromParts("package", mainActivity.getPackageName(), null); + intent.setData(uri); + mainActivity.startActivity(intent); + } +} + +const permission = { + get isIOS(){ + return typeof isIOS === 'boolean' ? isIOS : (isIOS = uni.getSystemInfoSync().platform === 'ios') + }, + requestIOS: requestIOS, + requestAndroid: requestAndroid, + gotoAppSetting: gotoAppPermissionSetting +} + +module.exports = permission diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index b313e2a7..3c25a3e0 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -137,6 +137,7 @@ diff --git a/src/main/resources/templates/pages/chart/chart-out_back.html b/src/main/resources/templates/pages/chart/chart-out_back.html index 283d29c5..fc0984ff 100644 --- a/src/main/resources/templates/pages/chart/chart-out_back.html +++ b/src/main/resources/templates/pages/chart/chart-out_back.html @@ -15,16 +15,19 @@ border-radius: 5px; text-align: center; } - .top-panel > .layui-card-body{ + + .top-panel > .layui-card-body { height: 60px; } - .top-panel-number{ - line-height:60px; + + .top-panel-number { + line-height: 60px; font-size: 30px; - border-right:1px solid #eceff9; + border-right: 1px solid #eceff9; } - .top-panel-tips{ - line-height:30px; + + .top-panel-tips { + line-height: 30px; font-size: 12px } @@ -114,7 +117,7 @@ -
@@ -142,7 +145,7 @@ - - - diff --git a/src/test/java/com/dreamchaser/depository_manage/Test.java b/src/test/java/com/dreamchaser/depository_manage/Test.java index 06e9be0f..a7e3fb96 100644 --- a/src/test/java/com/dreamchaser/depository_manage/Test.java +++ b/src/test/java/com/dreamchaser/depository_manage/Test.java @@ -13,6 +13,7 @@ import com.dreamchaser.depository_manage.service.MaterialService; import com.dreamchaser.depository_manage.service.MaterialTypeService; import com.dreamchaser.depository_manage.utils.*; import lombok.extern.log4j.Log4j2; +import org.joda.time.DateTimeUtils; import org.junit.runner.RunWith; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; @@ -30,8 +31,9 @@ import java.util.concurrent.TimeUnit; public class Test { + @org.junit.Test public void test1(){ - + System.out.println(DateUtil.TimeStampToDateTime(Long.valueOf("1664035200000"))); } diff --git a/target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml b/target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml index 13fe1891..74884189 100644 --- a/target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml +++ b/target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml @@ -124,6 +124,7 @@ and code = #{code} + and depository_id is null LIMIT #{begin},#{size} @@ -165,6 +166,38 @@ + + + + diff --git a/target/classes/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml b/target/classes/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml index d9175c41..2c44729f 100644 --- a/target/classes/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml +++ b/target/classes/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml @@ -53,12 +53,13 @@ from materialandplace mp left join place p on p.id = mp.pid where 1 = 1 - - and p.did = #{did} - + and mp.mid = #{mid} + + and ( p.did = #{did} or p.did = 0) + diff --git a/target/classes/static/js/lay-module/step-lay/step.css b/target/classes/static/js/lay-module/step-lay/step.css index 14700382..5a2bc16e 100644 --- a/target/classes/static/js/lay-module/step-lay/step.css +++ b/target/classes/static/js/lay-module/step-lay/step.css @@ -58,7 +58,7 @@ /*margin-left: -20px;*/ /*margin-left: -50%;*/ /*margin-right: 50%;*/ - padding-left: 26px; + /*padding-left: 26px;*/ text-align: center; } diff --git a/target/classes/templates/index.html b/target/classes/templates/index.html index b313e2a7..3c25a3e0 100644 --- a/target/classes/templates/index.html +++ b/target/classes/templates/index.html @@ -137,6 +137,7 @@ diff --git a/target/classes/templates/pages/chart/chart-out_back.html b/target/classes/templates/pages/chart/chart-out_back.html index 283d29c5..fc0984ff 100644 --- a/target/classes/templates/pages/chart/chart-out_back.html +++ b/target/classes/templates/pages/chart/chart-out_back.html @@ -15,16 +15,19 @@ border-radius: 5px; text-align: center; } - .top-panel > .layui-card-body{ + + .top-panel > .layui-card-body { height: 60px; } - .top-panel-number{ - line-height:60px; + + .top-panel-number { + line-height: 60px; font-size: 30px; - border-right:1px solid #eceff9; + border-right: 1px solid #eceff9; } - .top-panel-tips{ - line-height:30px; + + .top-panel-tips { + line-height: 30px; font-size: 12px } @@ -114,7 +117,7 @@ -
@@ -142,7 +145,7 @@ - - -