Browse Source

完成除扫码以外的其他基本功能

lwx_dev
erdanergou 3 years ago
parent
commit
5224f6b460
  1. 266
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java
  2. 2
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java
  3. 22
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  4. 10
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  5. 20
      src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java
  6. 14
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java
  7. 40
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  8. 7
      src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml
  9. 5
      src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java
  10. 14
      src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java
  11. 6
      src/main/java/com/dreamchaser/depository_manage/service/PlaceService.java
  12. 21
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
  13. 37
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java
  14. 68
      src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java
  15. 22
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  16. 18
      src/main/java/com/dreamchaser/depository_manage/service/impl/PlaceServiceImpl.java
  17. 2
      src/main/resources/static/js/lay-module/step-lay/step.css
  18. 20
      src/main/resources/static/vue/common/helper.js
  19. 245
      src/main/resources/static/vue/common/permission.js
  20. 13
      src/main/resources/templates/index.html
  21. 10
      src/main/resources/templates/pages/application/form-step-look_back.html
  22. 54
      src/main/resources/templates/pages/chart/chart-in_back.html
  23. 22
      src/main/resources/templates/pages/chart/chart-out_back.html
  24. 315
      src/main/resources/templates/pages/uniApp/scanQrCode.html
  25. 4
      src/test/java/com/dreamchaser/depository_manage/Test.java
  26. 40
      target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  27. 7
      target/classes/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml
  28. 2
      target/classes/static/js/lay-module/step-lay/step.css
  29. 13
      target/classes/templates/index.html
  30. 10
      target/classes/templates/pages/application/form-step-look_back.html
  31. 54
      target/classes/templates/pages/chart/chart-in_back.html
  32. 22
      target/classes/templates/pages/chart/chart-out_back.html
  33. 315
      target/classes/templates/pages/uniApp/scanQrCode.html

266
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.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException; import java.io.IOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
@ -94,16 +95,17 @@ public class DepositoryController {
/** /**
* 获取之前仓库的库存值 * 获取之前仓库的库存值
*
* @return * @return
*/ */
public static Map<String,Object> getBeforeInventoryByDName(DepositoryService depositoryService,DepositoryRecordService depositoryRecordService){ public static Map<String, Object> getBeforeInventoryByDName(DepositoryService depositoryService, DepositoryRecordService depositoryRecordService, UserByPort user) {
List<Double> result = new ArrayList<>(); List<Double> result = new ArrayList<>();
List<Long> days = getLastTimeInterval(); List<Long> days = getLastTimeInterval();
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(); Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(user);
Iterator it = depositoryAllNameAndId.keySet().iterator(); Iterator it = depositoryAllNameAndId.keySet().iterator();
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
// 获取本周仓库库存 // 获取本周仓库库存
Map<String, Object> thisWeekInventoryByDName = getThisWeekInventoryByDName(depositoryService, depositoryRecordService); Map<String, Object> thisWeekInventoryByDName = getThisWeekInventoryByDName(depositoryService, depositoryRecordService, user);
while (it.hasNext()) { while (it.hasNext()) {
int i; int i;
Object key = it.next(); Object key = it.next();
@ -132,17 +134,18 @@ public class DepositoryController {
/** /**
* 获取本周库存容量 * 获取本周库存容量
*
* @param depositoryService * @param depositoryService
* @param depositoryRecordService * @param depositoryRecordService
* @return * @return
*/ */
public static Map<String,Object> getThisWeekInventoryByDName(DepositoryService depositoryService,DepositoryRecordService depositoryRecordService){ public static Map<String, Object> getThisWeekInventoryByDName(DepositoryService depositoryService, DepositoryRecordService depositoryRecordService, UserByPort user) {
Calendar instance = Calendar.getInstance(); Calendar instance = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
int weekDay = instance.get(Calendar.DAY_OF_WEEK); int weekDay = instance.get(Calendar.DAY_OF_WEEK);
weekDay = weekDay - 1; weekDay = weekDay - 1;
// 获取所有仓库名称 // 获取所有仓库名称
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(); Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(user);
Iterator it = depositoryAllNameAndId.keySet().iterator(); Iterator it = depositoryAllNameAndId.keySet().iterator();
//result用来接收每个仓库每天的库存 //result用来接收每个仓库每天的库存
List<Double> result = new ArrayList<>(); List<Double> result = new ArrayList<>();
@ -237,6 +240,7 @@ public class DepositoryController {
/** /**
* 获取之前各月的库存容量 * 获取之前各月的库存容量
*
* @param depositoryService * @param depositoryService
* @param depositoryRecordService * @param depositoryRecordService
* @return * @return
@ -306,6 +310,7 @@ public class DepositoryController {
/** /**
* 获取之前个月的库存给地图数据 * 获取之前个月的库存给地图数据
*
* @param depositoryService * @param depositoryService
* @param depositoryRecordService * @param depositoryRecordService
* @return * @return
@ -392,6 +397,7 @@ public class DepositoryController {
/** /**
* 根据父级编号获取所有仓库 * 根据父级编号获取所有仓库
*
* @param map * @param map
* @return * @return
*/ */
@ -419,6 +425,7 @@ public class DepositoryController {
/** /**
* 获取当前行政组织 * 获取当前行政组织
*
* @return * @return
*/ */
public static Map<String, Object> findAdministration() { public static Map<String, Object> findAdministration() {
@ -456,6 +463,7 @@ public class DepositoryController {
/** /**
* 彻底删除仓库记录硬删除 * 彻底删除仓库记录硬删除
*
* @param map * @param map
* @return * @return
*/ */
@ -489,6 +497,7 @@ public class DepositoryController {
/** /**
* 删除所有子仓库信息硬删除 * 删除所有子仓库信息硬删除
*
* @param parentId * @param parentId
*/ */
public void RealDeleteSonDepository(String parentId) { public void RealDeleteSonDepository(String parentId) {
@ -568,6 +577,7 @@ public class DepositoryController {
/** /**
* 修改仓库状态 * 修改仓库状态
*
* @param map * @param map
* @return * @return
*/ */
@ -611,6 +621,7 @@ public class DepositoryController {
/** /**
* 修改所有子仓库状态 * 修改所有子仓库状态
*
* @param parentId * @param parentId
*/ */
public void UpdateSonState(String parentId, Integer state, boolean envelop) { public void UpdateSonState(String parentId, Integer state, boolean envelop) {
@ -637,6 +648,7 @@ public class DepositoryController {
/** /**
* 修改当前仓库下的物料状态 * 修改当前仓库下的物料状态
*
* @param parentId * @param parentId
* @param state * @param state
*/ */
@ -654,6 +666,214 @@ public class DepositoryController {
} }
// 获取各类别库存容量
@RequestMapping(value = "/layui/echart_back_invetory", method = RequestMethod.GET)
@ResponseBody
public Map<String, Object> echart_back_MaterialTypeInvetory(@RequestParam Map<String, Object> map, HttpServletRequest request) {
String typeName = (String) map.get("typeName");
String type = (String) map.get("type");
// 获取本月及之前月份各种类别入/出库总量
List<MaterialType> materialTypeAll = materialTypeService.findMaterialTypeNoParent();
Map<String, Object> previousMonth = getPreviousMonth();
List<Object> months = (List<Object>) previousMonth.get("months");
List<Object> sourceList = (List<Object>) previousMonth.get("sourceList");
for (int num = 0; num < months.size() - 1; num++) {
for (int j = 0; j < materialTypeAll.size(); j++) {
Map<String, Object> 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<String, Object>) sourceList.get(num)).put(materialTypeAll.get(j).getTname(), materialCountByMonth1);
}
}
return null;
}
/**
* 获取上周
*
* @return
*/
@RequestMapping(value = "/layui/echart_back_lastWeek", method = RequestMethod.GET)
@ResponseBody
public Map<String, Object> echart_back_lastWeek(@RequestParam("type") String type, HttpServletRequest request) {
// 获取当前登录用户
UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
List<String> show_weekday = new ArrayList<String>();
show_weekday.add("周一");
show_weekday.add("周二");
show_weekday.add("周三");
show_weekday.add("周四");
show_weekday.add("周五");
show_weekday.add("周六");
show_weekday.add("周日");
// 获取各仓库名称以及id
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(userByPort);
Iterator it = depositoryAllNameAndId.keySet().iterator();
// 仓库名称列表
List<String> depositoryName = new ArrayList<>();
// 各仓库对应入库数目
Map<String, Double> yesterdayData = new HashMap<>();
// 获取昨天数据标志位
boolean flag = true;
// 每天各仓库入库数目
Map<String, Object> show_data = new HashMap<>();
List<Long> days = getLastTimeInterval();
List<Double> 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<Double>) drCountbyDrName).clone());
drCountbyDrName.clear();
}
Map<String,Object> 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<String, Object> echart_back_thisWeek(@RequestParam("type") String type, HttpServletRequest request) {
// 获取当前登录用户
UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
// 设置展示天数
List<String> show_weekday = new ArrayList<String>();
show_weekday.add("周一");
show_weekday.add("周二");
show_weekday.add("周三");
show_weekday.add("周四");
show_weekday.add("周五");
show_weekday.add("周六");
show_weekday.add("周日");
// 获取各仓库名称以及id
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(userByPort);
Iterator it = depositoryAllNameAndId.keySet().iterator();
// 仓库名称列表
List<String> depositoryName = new ArrayList<>();
// 各仓库对应入库数目
Map<String, Double> yesterdayData = new HashMap<>();
// 每天各仓库入库数目
Map<String, Object> show_data = new HashMap<>();
// 各仓库当前库存数目
Map<String, Object> 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<Double> drCountbyDrName = new ArrayList<>();
drCountbyDrName.add(depositoryRecordByDate1);
show_data.put(key.toString(), ((ArrayList<Double>) drCountbyDrName).clone());
}
} else {
int now = instance.get(Calendar.DAY_OF_WEEK) - 1;
List<Long> 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<Double> 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<Double>) drCountbyDrName).clone());
drCountbyDrName.clear();
}
}
Map<String,Object> 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) @RequestMapping(value = "/layui/echart_back", method = RequestMethod.GET)
@ResponseBody @ResponseBody
public Map<String, Object> learnLayuiAndEchart_back(@RequestParam("type") String type, @RequestParam(value = "last", required = false) String last) { public Map<String, Object> learnLayuiAndEchart_back(@RequestParam("type") String type, @RequestParam(value = "last", required = false) String last, HttpServletRequest request) {
// 获取当前登录用户
UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
// 设置展示天数 // 设置展示天数
List<String> show_weekday = new ArrayList<String>(); List<String> show_weekday = new ArrayList<String>();
show_weekday.add("周一"); show_weekday.add("周一");
@ -674,7 +897,8 @@ public class DepositoryController {
show_weekday.add("周日"); show_weekday.add("周日");
// 获取各仓库名称以及id // 获取各仓库名称以及id
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(); Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(userByPort);
Iterator it = depositoryAllNameAndId.keySet().iterator(); Iterator it = depositoryAllNameAndId.keySet().iterator();
// 仓库名称列表 // 仓库名称列表
List<String> depositoryName = new ArrayList<>(); List<String> depositoryName = new ArrayList<>();
@ -719,8 +943,7 @@ public class DepositoryController {
show_data.put(key.toString(), ((ArrayList<Double>) drCountbyDrName).clone()); show_data.put(key.toString(), ((ArrayList<Double>) drCountbyDrName).clone());
drCountbyDrName.clear(); drCountbyDrName.clear();
} }
} } else {
else {
if (weekDay == 1) { if (weekDay == 1) {
//只获取今天 //只获取今天
Long now = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())); Long now = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime()));
@ -744,7 +967,7 @@ public class DepositoryController {
} }
} else { } else {
int now = instance.get(Calendar.DAY_OF_WEEK) - 1; int now = instance.get(Calendar.DAY_OF_WEEK) - 1;
List<Long> days = new ArrayList<>(); List<Long> days = new ArrayList<>(); // 周一至今的每天
instance.add(Calendar.DATE, 1); instance.add(Calendar.DATE, 1);
days.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime()))); days.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())));
instance.add(Calendar.DATE, -1); instance.add(Calendar.DATE, -1);
@ -768,7 +991,7 @@ public class DepositoryController {
} }
Integer val = (Integer) depositoryAllNameAndId.get(key); Integer val = (Integer) depositoryAllNameAndId.get(key);
// 获取一段时间内的库存额度 // 获取一段时间内的库存额度
// 测试
Double depositoryRecordByDate1 = depositoryRecordService.findApplicationRecordByDate(days.get(i - 1), days.get(i), Integer.parseInt(type), val); Double depositoryRecordByDate1 = depositoryRecordService.findApplicationRecordByDate(days.get(i - 1), days.get(i), Integer.parseInt(type), val);
drCountbyDrName.add(depositoryRecordByDate1); drCountbyDrName.add(depositoryRecordByDate1);
if (i == 2 && flag) { if (i == 2 && flag) {
@ -780,8 +1003,9 @@ public class DepositoryController {
} }
} }
} }
// 获取本月及之前月份各种类入/出库总量
List<MaterialType> materialTypeAll = materialTypeService.findMaterialTypeAll(); // 获取本月及之前月份各种类别入/出库总量
List<MaterialType> materialTypeAll = materialTypeService.findMaterialTypeNoParent();
Map<String, Object> previousMonth = getPreviousMonth(); Map<String, Object> previousMonth = getPreviousMonth();
List<Object> months = (List<Object>) previousMonth.get("months"); List<Object> months = (List<Object>) previousMonth.get("months");
List<Object> sourceList = (List<Object>) previousMonth.get("sourceList"); List<Object> sourceList = (List<Object>) previousMonth.get("sourceList");
@ -861,8 +1085,8 @@ public class DepositoryController {
depository_data.put("sourceList", sourceList); depository_data.put("sourceList", sourceList);
depository_data.put("mapData", mapData); depository_data.put("mapData", mapData);
depository_data.put("sourceListByMonth", getBeforeInventoryByMonth(depositoryService, depositoryRecordService)); depository_data.put("sourceListByMonth", getBeforeInventoryByMonth(depositoryService, depositoryRecordService));
depository_data.put("BeforeInventory",getBeforeInventoryByDName(depositoryService,depositoryRecordService)); depository_data.put("BeforeInventory", getBeforeInventoryByDName(depositoryService, depositoryRecordService, userByPort));
depository_data.put("ThisWeekInventory",getThisWeekInventoryByDName(depositoryService,depositoryRecordService)); depository_data.put("ThisWeekInventory", getThisWeekInventoryByDName(depositoryService, depositoryRecordService, userByPort));
depository_data.put("MapInventory", getBeforeInventoryOnMap(depositoryService, depositoryRecordService)); depository_data.put("MapInventory", getBeforeInventoryOnMap(depositoryService, depositoryRecordService));
// 封装 最终数据 // 封装 最终数据
Map<String, Object> data = new LinkedHashMap<String, Object>(); Map<String, Object> data = new LinkedHashMap<String, Object>();
@ -879,6 +1103,7 @@ public class DepositoryController {
/** /**
* 根据物料编号查询所在仓库 * 根据物料编号查询所在仓库
*
* @param mid * @param mid
* @return * @return
*/ */
@ -893,6 +1118,7 @@ public class DepositoryController {
/** /**
* 根据物料名称查询所在仓库 * 根据物料名称查询所在仓库
*
* @param mname * @param mname
* @return * @return
*/ */
@ -904,6 +1130,7 @@ public class DepositoryController {
/** /**
* 查找仓库内是否有物品 * 查找仓库内是否有物品
*
* @param depositoryId * @param depositoryId
* @return * @return
*/ */
@ -915,6 +1142,7 @@ public class DepositoryController {
/** /**
* 查询该仓库是否有其他关联信息 * 查询该仓库是否有其他关联信息
*
* @param map * @param map
* @return * @return
*/ */
@ -932,8 +1160,7 @@ public class DepositoryController {
break; break;
} }
} }
} } else {
else {
throw new MyException("所需请求参数缺失!"); throw new MyException("所需请求参数缺失!");
} }
return new RestResponse(allSonDepositoryOfRelevancy); return new RestResponse(allSonDepositoryOfRelevancy);
@ -941,6 +1168,7 @@ public class DepositoryController {
/** /**
* 根据父级编号查询所有仓库物品 * 根据父级编号查询所有仓库物品
*
* @param parentid * @param parentid
* @return * @return
*/ */
@ -965,6 +1193,7 @@ public class DepositoryController {
/** /**
* 根据父级编号查询所有关联信息 * 根据父级编号查询所有关联信息
*
* @param parentid * @param parentid
* @return * @return
*/ */
@ -991,6 +1220,7 @@ public class DepositoryController {
/** /**
* 根据仓库编号判断该仓库是否有物品 * 根据仓库编号判断该仓库是否有物品
*
* @param parentId * @param parentId
* @return * @return
*/ */
@ -1007,6 +1237,7 @@ public class DepositoryController {
/** /**
* 根据仓库编号查询与其有关的订单信息 * 根据仓库编号查询与其有关的订单信息
*
* @param depositoryId * @param depositoryId
* @return * @return
*/ */
@ -1022,6 +1253,7 @@ public class DepositoryController {
/** /**
* 查询当前仓库子仓库 * 查询当前仓库子仓库
*
* @param parentId * @param parentId
* @return * @return
*/ */

2
src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java

@ -108,7 +108,7 @@ public class DepositoryRecordController {
if(params.size() < 1 && map.size() > 3) { if(params.size() < 1 && map.size() > 3) {
// 获取库位id // 获取库位id
Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId")); Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId"));
if(placeId == -1) {// 如果插入到仓库 if(placeId == 0) {// 如果插入到仓库
map.put("placeId",0); // 到默认库位 map.put("placeId",0); // 到默认库位
integer += depositoryRecordService.applicationInPlace(map); integer += depositoryRecordService.applicationInPlace(map);
}else{ // 如果具体到库位 }else{ // 如果具体到库位

22
src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java

@ -52,16 +52,22 @@ public class MaterialController {
public RestResponse findInventory(@RequestParam Map<String,Object> map,HttpServletRequest request){ public RestResponse findInventory(@RequestParam Map<String,Object> map,HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken"); UserByPort userToken= (UserByPort) request.getAttribute("userToken");
List<RoleAndDepository> depositoryAndRole = roleService.findDepositoryAndRole(userToken.getId()); List<RoleAndDepository> depositoryAndRole = roleService.findDepositoryAndRole(userToken.getId());
List<MaterialP> materialPByCondition = materialService.findInventory(map); List<Depository> depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userToken.getMaindeparment().toString());
List<MaterialP> list = new ArrayList<>(); List<MaterialP> list = new ArrayList<>();
for (RoleAndDepository roleAndDepository : depositoryAndRole) { Integer total = 0;
for (MaterialP materialP : materialPByCondition) { for (int i = 0; i < depositoryByAdminorg.size(); i++) {
if (Objects.equals(materialP.getDepositoryId(), roleAndDepository.getDepositoryId())) { map.put("depositoryId",depositoryByAdminorg.get(i).getId());
list.add(materialP); List<MaterialP> inventory = materialService.findInventory(map);
} list.addAll(inventory);
total += materialService.findInventoryCount(map);
} }
for (RoleAndDepository roleAndDepository : depositoryAndRole) {
List<MaterialP> 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)) { if("out".equals(type)) {
for (int i = 0; i < depositoryByAdminorg.size(); i++) { for (int i = 0; i < depositoryByAdminorg.size(); i++) {
param.put("depositoryId", depositoryByAdminorg.get(i).getId()); param.put("depositoryId", depositoryByAdminorg.get(i).getId());
materialPByCondition = materialService.findMaterialPByCondition(param); materialPByCondition = materialService.findInventory(param);
if (materialPByCondition.size() > 0) { if (materialPByCondition.size() > 0) {
break; break;
} }

10
src/main/java/com/dreamchaser/depository_manage/controller/PageController.java

@ -643,14 +643,6 @@ public class PageController {
public ModelAndView chart_in_back() { public ModelAndView chart_in_back() {
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/chart/chart-in_back"); mv.setViewName("pages/chart/chart-in_back");
/**
* 仓库总数
*/
mv.addObject("depositories", depositoryService.findDepositoryAll());
/**
* 物料总数
*/
mv.addObject("materials", materialService.findMaterialAll());
// 转入物料数量 // 转入物料数量
mv.addObject("InCount", depositoryRecordService.CalculateAllApplicationInCount()); mv.addObject("InCount", depositoryRecordService.CalculateAllApplicationInCount());
@ -1411,7 +1403,7 @@ public class PageController {
@GetMapping("/scanQrCode") @GetMapping("/scanQrCode")
public String scanQrCode(){ public String scanQrCode(){
return "pages/uniApp/scanQrCode"; return "pages/uniApp/scanQrCodePlus?callback='/index'";
} }
} }

20
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 org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController @RestController
@RequestMapping("/place") @RequestMapping("/place")
@ -140,6 +137,21 @@ public class PlaceController {
else{ else{
throw new MyException("所需请求参数缺失!"); throw new MyException("所需请求参数缺失!");
} }
Place placeById = placeService.findPlaceById(0);
if(placeById == null){
Map<String,Object> 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)) { if ("one".equals(type)) {
return CrudUtil.postHandle(success, 1); return CrudUtil.postHandle(success, 1);
} else if("list".equals(type)){ } else if("list".equals(type)){

14
src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java

@ -67,6 +67,13 @@ public interface MaterialMapper {
*/ */
List<Material> findMaterialByCondition(Map<String,Object>map); List<Material> findMaterialByCondition(Map<String,Object>map);
/**
* 根据条件查询符合条件的库存总数
* @param map
* @return
*/
Integer findInventoryCount(Map<String,Object> map);
/** /**
* 根据条件查询符合条件的库存 * 根据条件查询符合条件的库存
* @param map * @param map
@ -136,4 +143,11 @@ public interface MaterialMapper {
*/ */
List<Material> findMaterialByDepositorys(List<Integer> ids); List<Material> findMaterialByDepositorys(List<Integer> ids);
/**
* 根据仓库查询物品
* @param depositoryId
* @return
*/
List<Material> findMaterialByDepository(Integer depositoryId);
} }

40
src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml

@ -124,6 +124,7 @@
<if test="code != null and code != '' "> <if test="code != null and code != '' ">
and code = #{code} and code = #{code}
</if> </if>
and depository_id is null
<if test="begin != null and size != null"> <if test="begin != null and size != null">
LIMIT #{begin},#{size} LIMIT #{begin},#{size}
</if> </if>
@ -165,6 +166,38 @@
</if> </if>
</select> </select>
<select id="findInventoryCount" parameterType="map" resultType="int">
SELECT
count(*)
from findMaterial
where 1 = 1
<if test="mid != null">
and id = #{mid}
</if>
<if test="depositoryId != null">
AND depository_id = #{depositoryId}
</if>
<if test="mname != null and mname != ''">
AND mname LIKE CONCAT('%', #{mname}, '%')
</if>
<if test="quantity != null">
AND quantity = #{quantity}
</if>
<if test="price != null">
AND price = #{price}
</if>
<if test="materialTypeId != null">
AND type_id = #{materialTypeId}
</if>
<if test="state != null and state != ''">
And state = #{state}
</if>
<if test="code != null and code != '' ">
and code = #{code}
</if>
and depository_id is not null
</select>
<!-- 根据仓库查询物料--> <!-- 根据仓库查询物料-->
<select id="findMaterialByDepositorys" resultMap="materialMap" parameterType="list"> <select id="findMaterialByDepositorys" resultMap="materialMap" parameterType="list">
SELECT SELECT
@ -176,6 +209,13 @@
#{item} #{item}
</foreach> </foreach>
</select> </select>
<!-- 根据仓库查询物料-->
<select id="findMaterialByDepository" resultMap="materialMap" parameterType="int">
SELECT
<include refid="allColumns" />
from material m
where m.depository_id = #{depositoryId}
</select>
<!-- 根据主键查询数据 --> <!-- 根据主键查询数据 -->

7
src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml

@ -53,12 +53,13 @@
<include refid="allColumns" /> <include refid="allColumns" />
from materialandplace mp left join place p on p.id = mp.pid from materialandplace mp left join place p on p.id = mp.pid
where 1 = 1 where 1 = 1
<if test="did != null and did != ''">
and p.did = #{did}
</if>
<if test="mid != null and mid != ''"> <if test="mid != null and mid != ''">
and mp.mid = #{mid} and mp.mid = #{mid}
</if> </if>
<if test="did != null and did != ''">
and ( p.did = #{did} or p.did = 0)
</if>
</select> </select>
<!-- 根据条件参数查询列表 --> <!-- 根据条件参数查询列表 -->

5
src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java

@ -1,6 +1,7 @@
package com.dreamchaser.depository_manage.service; package com.dreamchaser.depository_manage.service;
import com.dreamchaser.depository_manage.entity.Depository; import com.dreamchaser.depository_manage.entity.Depository;
import com.dreamchaser.depository_manage.entity.UserByPort;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -109,11 +110,11 @@ public interface DepositoryService {
* 查询所有仓库名称即对应编号 * 查询所有仓库名称即对应编号
* @return * @return
*/ */
Map<String,Integer> findDepositoryAllNameAndId(); Map<String,Integer> findDepositoryAllNameAndId(UserByPort user);
/** /**
* 根据仓库名称获取当前仓库库存容量 * 根据名称或编码获取当前仓库库存容量
* @param dname * @param dname
* @return * @return
*/ */

14
src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java

@ -58,6 +58,13 @@ public interface MaterialService {
*/ */
List<MaterialP> findInventory(Map<String,Object> map); List<MaterialP> findInventory(Map<String,Object> map);
/**
* 根据条件查询符合条件的库存总数
* @param map
* @return
*/
Integer findInventoryCount(Map<String,Object> map);
/** /**
* 根据编码获取对应物料 * 根据编码获取对应物料
* @return * @return
@ -149,4 +156,11 @@ public interface MaterialService {
* @return * @return
*/ */
List<Material> findMaterialByDepositorys(List<Integer> dids); List<Material> findMaterialByDepositorys(List<Integer> dids);
/**
* 根据仓库查询物品
* @param depositoryId
* @return
*/
List<MaterialP> findMaterialByDepository(Integer depositoryId);
} }

6
src/main/java/com/dreamchaser/depository_manage/service/PlaceService.java

@ -102,5 +102,11 @@ public interface PlaceService {
*/ */
MaterialAndPlace findPlaceAndMaterialByMidAndPid(Integer pid,Integer mid); MaterialAndPlace findPlaceAndMaterialByMidAndPid(Integer pid,Integer mid);
/**
* 添加物料到库位
* @param map
* @return
*/
Integer addMaterialOnPlace(Map<String,Object> map);
} }

21
src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java

@ -107,8 +107,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
} }
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("depositoryId", depositoryId); param.put("depositoryId", depositoryId);
param.put("mname", material.getMname()); param.put("code", material.getCode());
List<Material> materialByCondition = materialMapper.findMaterialByCondition(param); // 判断该仓库中有无该物体
List<Material> materialByCondition = materialMapper.findInventory(param);
// 获取当前入库金额 // 获取当前入库金额
Double amounts = (quantity * price * 100); Double amounts = (quantity * price * 100);
// 获取平均价格 // 获取平均价格
@ -364,7 +365,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.put("fromPlaceId",0); map.put("fromPlaceId",0);
} }
map.put("toPlaceId",toPlaceId) ; map.put("toPlaceId",toPlaceId) ;
if("".equals(toPlaceId) || "0".equals(fromPlaceId)){ if("".equals(toPlaceId) || "0".equals(toPlaceId)){
map.put("toPlaceId",0); map.put("toPlaceId",0);
} }
//清除主键 //清除主键
@ -439,6 +440,16 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 如果当前库位数量不足 // 如果当前库位数量不足
flag = false; flag = false;
} }
}else{
Map<String,Object> 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) { if (material.getQuantity() >= record.getQuantity() && flag) {
// 当前出库金额 // 当前出库金额
@ -496,9 +507,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
TransferRecord transferRecor = transferRecordMapper.findTransferRecordById(transferId); TransferRecord transferRecor = transferRecordMapper.findTransferRecordById(transferId);
Integer mid = transferRecor.getMid(); Integer mid = transferRecor.getMid();
Material material = materialMapper.findMaterialById(mid); Material material = materialMapper.findMaterialById(mid);
param.put("mname", material.getMname()); param.put("code", material.getCode());
param.put("depositoryId", transferRecor.getToId()); param.put("depositoryId", transferRecor.getToId());
List<Material> materiallist = materialMapper.findMaterialByCondition(param); List<Material> materiallist = materialMapper.findInventory(param);
if (materiallist.size() > 0) { if (materiallist.size() > 0) {
// 如果在该仓库 // 如果在该仓库
map.put("price",material.getPrice().toString()); map.put("price",material.getPrice().toString());

37
src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java

@ -239,14 +239,39 @@ public class DepositoryServiceImpl implements DepositoryService {
return depositoryMapper.findAllCountByState(); return depositoryMapper.findAllCountByState();
} }
/**
* 获取本部门以及个人管理仓库的名称和id
* @return
*/
@Override @Override
public Map<String, Integer> findDepositoryAllNameAndId() { public Map<String, Integer> findDepositoryAllNameAndId(UserByPort user) {
List<Depository> depositoryAll = depositoryMapper.findDepositoryAll(); // 获取当前用户所在部门管理的仓库
Map<String,Integer> map = new HashMap<>(); List<Depository> depositoryByAdminorg = depositoryMapper.findDepositoryByAdminorg(user.getMaindeparmentname());
for (int i = 0; i < depositoryAll.size(); i++) {
if(depositoryAll.get(i).getParentId() != 0) { // 仓库id列表
map.put(depositoryAll.get(i).getDname() + "," + depositoryAll.get(i).getCode(), depositoryAll.get(i).getId()); List<Integer> depositoryListId = new ArrayList<>();
// 添加到id列表
for (Depository depository : depositoryByAdminorg) {
depositoryListId.add(depository.getId());
} }
// 获取当前用户管理的仓库
List<RoleAndDepository> 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<String,Integer> 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; return map;
} }

68
src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java

@ -36,8 +36,10 @@ public class ExcelServiceImpl implements ExcelService {
@Autowired @Autowired
PlaceService placeService; PlaceService placeService;
/** /**
* 用于导入物料名称 * 用于导入物料名称
*
* @param file * @param file
* @param excelInfo * @param excelInfo
* @return * @return
@ -109,6 +111,7 @@ public class ExcelServiceImpl implements ExcelService {
/** /**
* 用于导入物料分类 * 用于导入物料分类
*
* @param file * @param file
* @return * @return
*/ */
@ -183,6 +186,7 @@ public class ExcelServiceImpl implements ExcelService {
/** /**
* 用于导入库存信息 * 用于导入库存信息
*
* @param file * @param file
* @return * @return
*/ */
@ -225,7 +229,7 @@ public class ExcelServiceImpl implements ExcelService {
String placeCode = excelInfoByInventories.get(i).getDepositoryCode(); String placeCode = excelInfoByInventories.get(i).getDepositoryCode();
Integer depositoryId = excelInfoByInventories.get(i).getDepositoryId(); Integer depositoryId = excelInfoByInventories.get(i).getDepositoryId();
// 如果导入时输入库位信息 // 如果导入时输入库位信息
if(!placeCode.isEmpty()) { if (placeCode != null && !placeCode.isEmpty()) {
Map<String, Object> placeMap = new HashMap<>(); Map<String, Object> placeMap = new HashMap<>();
placeMap.put("did", depositoryId); placeMap.put("did", depositoryId);
placeMap.put("code", placeCode); placeMap.put("code", placeCode);
@ -234,15 +238,7 @@ public class ExcelServiceImpl implements ExcelService {
if (placeByCondition.size() > 0) { if (placeByCondition.size() > 0) {
// 如果有库位 // 如果有库位
Place place = placeByCondition.get(0); Place place = placeByCondition.get(0);
// 如果库位有物料 // 如果库位有物料且该库位存放的物料为当前物料
if(!Objects.equals(place.getMid(), materialByCode.getId())) {
// 如果该库位的物料不是当前物料
String s = dataIndex.get(i);
String msg = s + "出现异常:" + excelInfoByInventories.get(i).getDepositoryCode() + " 该库位已有物料";
errMsg.add(msg);
continue;
}else {
// 如果当前库位没有物料或该库位存放的物料为当前物料
Integer quantity = ObjectFormatUtil.toInteger(excelInfoByInventories.get(i).getQuantity()); Integer quantity = ObjectFormatUtil.toInteger(excelInfoByInventories.get(i).getQuantity());
if (quantity > place.getMax() - place.getQuantity()) { if (quantity > place.getMax() - place.getQuantity()) {
// 如果当前库位无法放下 // 如果当前库位无法放下
@ -251,13 +247,17 @@ public class ExcelServiceImpl implements ExcelService {
errMsg.add(msg); errMsg.add(msg);
continue; continue;
} else { } else {
// 修改当前库位库存
Map<String, Object> updatePlace = new HashMap<>(); Map<String, Object> updatePlace = new HashMap<>();
updatePlace.put("mid", materialByCode.getId());
updatePlace.put("id", place.getId()); updatePlace.put("id", place.getId());
updatePlace.put("quantity", quantity + place.getQuantity()); updatePlace.put("quantity", quantity + place.getQuantity());
excelVos.add(excelInfoByInventories.get(i));
placeService.UpdatePlace(updatePlace); 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 s = dataIndex.get(i);
@ -265,6 +265,8 @@ public class ExcelServiceImpl implements ExcelService {
errMsg.add(msg); errMsg.add(msg);
continue; continue;
} }
} else { // 否则直接加入
excelVos.add(excelInfoByInventories.get(i));
} }
} }
@ -278,33 +280,53 @@ public class ExcelServiceImpl implements ExcelService {
for (int i = 0; i < excelVos.size(); i++) { for (int i = 0; i < excelVos.size(); i++) {
// 获取对应物料 // 获取对应物料
Material materialByCode = materialService.findMaterialByCode(excelVos.get(i).getCode()); Material materialByCode = materialService.findMaterialByCode(excelVos.get(i).getCode());
Map<String,Object> update = new HashMap<>(); // 添加库存记录
Map<String, Object> insert = new HashMap<>();
Integer depositoryId = excelVos.get(i).getDepositoryId(); 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()); Double amounts = Double.parseDouble(excelVos.get(i).getPrice()) * 100 * Double.parseDouble(excelVos.get(i).getQuantity());
update.put("amounts",String.valueOf(materialByCode.getAmounts()+amounts)); 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); BigDecimal bg = new BigDecimal(avgPrice);
avgPrice = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); avgPrice = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
update.put("price",String.valueOf(avgPrice)); insert.put("price", String.valueOf(avgPrice));
} else { } else {
// 求均值 // 求均值
update.put("amounts", String.valueOf(materialByCode.getAmounts()+Double.parseDouble(excelVos.get(i).getAmounts()) * 100)); 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())); Double avgPrice = (materialByCode.getAmounts() + Double.parseDouble(excelVos.get(i).getAmounts()) * 100) / ((Double.parseDouble(excelVos.get(i).getQuantity()) + materialByCode.getQuantity()));
// 保留两位 // 保留两位
BigDecimal bg = new BigDecimal(avgPrice); BigDecimal bg = new BigDecimal(avgPrice);
avgPrice = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); avgPrice = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
update.put("price",String.valueOf(avgPrice)); insert.put("price", String.valueOf(avgPrice));
} }
update.put("depositoryId", depositoryId); insert.put("depositoryId", depositoryId);
update.put("depositoryCode",excelVos.get(i).getDepositoryCode()); insert.put("depositoryCode", excelVos.get(i).getDepositoryCode());
update.put("id",materialByCode.getId()); materialService.insertMaterial(insert);
materialService.updateMaterial(update);
// 将该物料同时放入默认库位中
Map<String,Object> 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)); success.add(excelVos.get(i));
} }
log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVos)); log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVos));

22
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 depositoryId = list.get(i).getDepositoryId();
// 获取当前物料所处库位 // 获取当前物料所处库位
StringBuilder placeCode = new StringBuilder();
if(depositoryId != null) {
Integer mid = list.get(i).getId(); Integer mid = list.get(i).getId();
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(mid, depositoryId); List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(mid, depositoryId);
StringBuilder placeCode = new StringBuilder();
for (int j = 0; j < placeByMidAndDid.size(); j++) { for (int j = 0; j < placeByMidAndDid.size(); j++) {
placeCode.append(placeByMidAndDid.get(j).getCode()).append(" "); placeCode.append(placeByMidAndDid.get(j).getCode()).append(" ");
} }
}
if(depositoryId != null){ if(depositoryId != null){
Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(depositoryId); Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(depositoryId);
String code = depositoryRecordById.getCode(); String code = depositoryRecordById.getCode();
@ -182,6 +186,16 @@ public class MaterialServiceImpl implements MaterialService {
return pack(list); return pack(list);
} }
/**
* 根据条件查询符合条件的库存总数
* @param map
* @return
*/
@Override
public Integer findInventoryCount(Map<String, Object> map) {
return materialMapper.findInventoryCount(map);
}
/** /**
* 根据编码获取对应物料 * 根据编码获取对应物料
* @return * @return
@ -362,6 +376,12 @@ public class MaterialServiceImpl implements MaterialService {
return materialMapper.findMaterialByDepositorys(dids); return materialMapper.findMaterialByDepositorys(dids);
} }
@Override
public List<MaterialP> findMaterialByDepository(Integer depositoryId) {
List<Material> materialByDepository = materialMapper.findMaterialByDepository(depositoryId);
return pack(materialByDepository);
}
/** /**
* 构造树形选择框 * 构造树形选择框
* @return * @return

18
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++) { for (int i = 0; i < placeByCondition.size(); i++) {
Place place = placeByCondition.get(i); Place place = placeByCondition.get(i);
PlaceP pp = new PlaceP(place); PlaceP pp = new PlaceP(place);
Depository depositoryRecordById = depositoryService.findDepositoryRecordById(place.getDid()); Integer did = place.getDid();
if(did != 0){
Depository depositoryRecordById = depositoryService.findDepositoryRecordById(did);
pp.setDepositoryName(depositoryRecordById.getDname()); pp.setDepositoryName(depositoryRecordById.getDname());
}else{
pp.setDepositoryName("默认库位");
}
placePList.add(pp); placePList.add(pp);
} }
return placePList; return placePList;
@ -205,4 +210,15 @@ public class PlaceServiceImpl implements PlaceService {
return placeMapper.findPlaceAndMaterialByMidAndPid(map); return placeMapper.findPlaceAndMaterialByMidAndPid(map);
} }
/**
* 添加物料到库位
* @param map
* @return
*/
@Override
public Integer addMaterialOnPlace(Map<String, Object> map) {
return placeMapper.addMaterialOnPlace(map);
}
} }

2
src/main/resources/static/js/lay-module/step-lay/step.css

@ -58,7 +58,7 @@
/*margin-left: -20px;*/ /*margin-left: -20px;*/
/*margin-left: -50%;*/ /*margin-left: -50%;*/
/*margin-right: 50%;*/ /*margin-right: 50%;*/
padding-left: 26px; /*padding-left: 26px;*/
text-align: center; text-align: center;
} }

20
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

245
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

13
src/main/resources/templates/index.html

@ -137,6 +137,7 @@
<script src="/static/js/lay-config.js?v=2.0.0" charset="utf-8"></script> <script src="/static/js/lay-config.js?v=2.0.0" charset="utf-8"></script>
<script> <script>
layui.use(['jquery', 'layer', 'miniAdmin','miniTongji'], function () { layui.use(['jquery', 'layer', 'miniAdmin','miniTongji'], function () {
var $ = layui.jquery, var $ = layui.jquery,
layer = layui.layer, layer = layui.layer,
@ -158,17 +159,7 @@
$("#scan").on("click",function () { $("#scan").on("click",function () {
layer.open({
type: 2,
title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
move : '.layui-layer-title',
fixed:false,
content: '/scanQrCode',
})
}); });

10
src/main/resources/templates/pages/application/form-step-look_back.html

@ -123,19 +123,11 @@
var state=$("#state").text(); var state=$("#state").text();
//当前处于的状态 //当前处于的状态
var position=0,states={},number = 1; var position=0,states={},number = 1;
/*if (state === "待部门负责人审核" || state === "部门负责人审核未通过") {
position = 1;
states = [{title: "提交申请"}, {title: state}, {title: "未入库"}];
} else {
position = 2;
states = [{title: "提交申请"}, {title: "审核通过"}, {title: state}];
}*/
if (state === "待部门负责人审核" || state === "部门负责人审核未通过") { if (state === "待部门负责人审核" || state === "部门负责人审核未通过") {
// , {title: "未入库"}
states = [ {title: state}]; states = [ {title: state}];
number = 2; number = 2;
} else { } else {
// {title: "提交申请"},
states = [ {title: state}]; states = [ {title: state}];
number = 3; number = 3;
} }

54
src/main/resources/templates/pages/chart/chart-in_back.html

@ -15,14 +15,17 @@
border-radius: 5px; border-radius: 5px;
text-align: center; text-align: center;
} }
.top-panel > .layui-card-body { .top-panel > .layui-card-body {
height: 60px; height: 60px;
} }
.top-panel-number { .top-panel-number {
line-height: 60px; line-height: 60px;
font-size: 30px; font-size: 30px;
border-right: 1px solid #eceff9; border-right: 1px solid #eceff9;
} }
.top-panel-tips { .top-panel-tips {
line-height: 30px; line-height: 30px;
font-size: 12px font-size: 12px
@ -44,8 +47,8 @@
<span th:text="${allInCount}"></span> <span th:text="${allInCount}"></span>
</div> </div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips"> <div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br> <!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
比七日 <a style="color: #bd3004">▼0.06</a> <!-- 比七日 <a style="color: #bd3004">▼0.06</a>-->
</div> </div>
</div> </div>
</div> </div>
@ -62,8 +65,8 @@
<span th:text="${allInPrice}"></span> <span th:text="${allInPrice}"></span>
</div> </div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips"> <div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br> <!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
比七日 <a style="color: #bd3004">▼0.06</a> <!-- 比七日 <a style="color: #bd3004">▼0.06</a>-->
</div> </div>
</div> </div>
</div> </div>
@ -80,8 +83,8 @@
<span th:text="${InCount}"></span> <span th:text="${InCount}"></span>
</div> </div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips"> <div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br> <!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
比七日 <a style="color: #bd3004">▼0.06</a> <!-- 比七日 <a style="color: #bd3004">▼0.06</a>-->
</div> </div>
</div> </div>
</div> </div>
@ -98,8 +101,8 @@
<span th:text="${InPrice}"></span> <span th:text="${InPrice}"></span>
</div> </div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips"> <div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br> <!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
比七日 <a style="color: #bd3004">▼0.06</a> <!-- 比七日 <a style="color: #bd3004">▼0.06</a>-->
</div> </div>
</div> </div>
</div> </div>
@ -261,8 +264,7 @@
tooltip: {}, tooltip: {},
dataset: { dataset: {
dimensions: [], dimensions: [],
source: [ source: []
]
}, },
xAxis: {type: 'category'}, xAxis: {type: 'category'},
yAxis: {}, yAxis: {},
@ -285,8 +287,7 @@
showContent: false showContent: false
}, },
dataset: { dataset: {
source: [ source: []
]
}, },
xAxis: {type: 'category'}, xAxis: {type: 'category'},
yAxis: {gridIndex: 0}, yAxis: {gridIndex: 0},
@ -318,18 +319,20 @@
async: true, async: true,
dataType: "json", dataType: "json",
complete: function (XHR, TS) { complete: function (XHR, TS) {
if(XHR.status != 200){ if (XHR.status !== 200) {
layer.alert("系统繁忙,稍后重试"); layer.alert("系统繁忙,稍后重试");
} }
}, },
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) { success: function (result) {
if(result.code == 0){ layer.close(this.layerIndex);
if (result.code === 0) {
echartsRecords.setOption(optionRecords); echartsRecords.setOption(optionRecords);
echartsPies.setOption(optionPies); echartsPies.setOption(optionPies);
echartsDataset.setOption(optionDataset); echartsDataset.setOption(optionDataset);
echartsMap.setOption(optionMap); echartsMap.setOption(optionMap);
console.log(result)
// 折线图 // 折线图
var optionRecordsSeries = []; var optionRecordsSeries = [];
// 饼状图 // 饼状图
@ -347,7 +350,7 @@
} }
}, },
data: [] data: []
} };
// 柱状图 // 柱状图
optionDataset = { optionDataset = {
legend: {}, legend: {},
@ -369,11 +372,13 @@
areaStyle: {} areaStyle: {}
}); });
optionPiesSeries.data.push({ optionPiesSeries.data.push({
value:result.data.depository_data.yesterdayData[result.data.depository_name[i]],name:result.data.depository_name[i] value: result.data.depository_data.yesterdayData[result.data.depository_name[i]],
name: result.data.depository_name[i]
}) })
} }
var dimensions = result.data.depository_data.sourceList[result.data.depository_data.sourceList.length - 1] var dimensions = result.data.depository_data.sourceList[result.data.depository_data.sourceList.length - 1]
optionDataset.dataset.dimensions = dimensions optionDataset.dataset.dimensions = dimensions;
for (let i = result.data.depository_data.sourceList.length - 2; i >= 0; i--) { for (let i = result.data.depository_data.sourceList.length - 2; i >= 0; i--) {
optionDataset.dataset.source.push(result.data.depository_data.sourceList[i]) optionDataset.dataset.source.push(result.data.depository_data.sourceList[i])
} }
@ -384,8 +389,8 @@
for (let i = 0; i < result.data.depository_data.mapData.mapDataList.length; i++) { for (let i = 0; i < result.data.depository_data.mapData.mapDataList.length; i++) {
optionMap.dataset.source.push(result.data.depository_data.mapData.mapDataList[i]) optionMap.dataset.source.push(result.data.depository_data.mapData.mapDataList[i])
optionMap.series.push({type: 'line', smooth: true, seriesLayoutBy: 'row'}) optionMap.series.push({type: 'line', smooth: true, seriesLayoutBy: 'row'})
} }
optionMap.series.push( optionMap.series.push(
{ {
type: 'pie', type: 'pie',
@ -401,8 +406,7 @@
tooltip: '8月' tooltip: '8月'
} }
} }
) );
console.log(optionMap)
optionRecords = { optionRecords = {
title: { title: {
text: '入库仓库-报表图' text: '入库仓库-报表图'
@ -476,7 +480,7 @@
form.on('submit(thisWeek)', function () { form.on('submit(thisWeek)', function () {
$.ajax({ $.ajax({
url:'/repository/layui/echart_back?type=1', url: '/repository/layui/echart_back_thisWeek?type=1',
type: 'get', type: 'get',
async: true, async: true,
dataType: "json", dataType: "json",
@ -546,12 +550,12 @@
form.on('submit(lastWeek)', function () { form.on('submit(lastWeek)', function () {
$.ajax({ $.ajax({
url:'/repository/layui/echart_back?type=1&last=1', url: '/repository/layui/echart_back_lastWeek?type=1',
type: 'get', type: 'get',
async: true, async: true,
dataType: "json", dataType: "json",
complete: function (XHR, TS) { complete: function (XHR, TS) {
if(XHR.status != 200){ if (XHR.status !== 200) {
layer.alert("系统繁忙,稍后重试"); layer.alert("系统繁忙,稍后重试");
} }
}, },

22
src/main/resources/templates/pages/chart/chart-out_back.html

@ -15,14 +15,17 @@
border-radius: 5px; border-radius: 5px;
text-align: center; text-align: center;
} }
.top-panel > .layui-card-body { .top-panel > .layui-card-body {
height: 60px; height: 60px;
} }
.top-panel-number { .top-panel-number {
line-height: 60px; line-height: 60px;
font-size: 30px; font-size: 30px;
border-right: 1px solid #eceff9; border-right: 1px solid #eceff9;
} }
.top-panel-tips { .top-panel-tips {
line-height: 30px; line-height: 30px;
font-size: 12px font-size: 12px
@ -260,8 +263,7 @@
tooltip: {}, tooltip: {},
dataset: { dataset: {
dimensions: [], dimensions: [],
source: [ source: []
]
}, },
xAxis: {type: 'category'}, xAxis: {type: 'category'},
yAxis: {}, yAxis: {},
@ -284,8 +286,7 @@
showContent: false showContent: false
}, },
dataset: { dataset: {
source: [ source: []
]
}, },
xAxis: {type: 'category'}, xAxis: {type: 'category'},
yAxis: {gridIndex: 0}, yAxis: {gridIndex: 0},
@ -317,12 +318,16 @@
async: true, async: true,
dataType: "json", dataType: "json",
complete: function (XHR, TS) { complete: function (XHR, TS) {
if(XHR.status != 200){ if (XHR.status !== 200) {
layer.alert("系统繁忙,稍后重试"); layer.alert("系统繁忙,稍后重试");
} }
}, },
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) { success: function (result) {
if(result.code == 0){ layer.close(this.layerIndex);
if (result.code === 0) {
echartsRecords.setOption(optionRecords); echartsRecords.setOption(optionRecords);
echartsPies.setOption(optionPies); echartsPies.setOption(optionPies);
echartsDataset.setOption(optionDataset); echartsDataset.setOption(optionDataset);
@ -366,7 +371,8 @@
areaStyle: {} areaStyle: {}
}); });
optionPiesSeries.data.push({ optionPiesSeries.data.push({
value:result.data.depository_data.yesterdayData[result.data.depository_name[i]],name:result.data.depository_name[i] value: result.data.depository_data.yesterdayData[result.data.depository_name[i]],
name: result.data.depository_name[i]
}) })
} }
var dimensions = result.data.depository_data.sourceList[result.data.depository_data.sourceList.length - 1] var dimensions = result.data.depository_data.sourceList[result.data.depository_data.sourceList.length - 1]
@ -402,7 +408,6 @@
) )
optionRecords = { optionRecords = {
title: { title: {
text: '出库仓库-报表图' text: '出库仓库-报表图'
@ -475,7 +480,6 @@
} }
form.on('submit(thisWeek)', function () { form.on('submit(thisWeek)', function () {
$.ajax({ $.ajax({
url: '/repository/layui/echart_back?type=2', url: '/repository/layui/echart_back?type=2',

315
src/main/resources/templates/pages/uniApp/scanQrCode.html

@ -1,315 +0,0 @@
<template>
<div class="page-scan">
<div class="base-line">
<div class="pullWrap">
<div class="topTitle">
<div class="pullTitle">
<div class="pullName">二维码绑定</div>
<!-- 绑定状态图标 -->
<img class="left-icon" src="/static/img/noBind.svg" alt="" v-if="!dataObj.qrCodeId">
<img class="left-icon" src="/static/img/binded.svg" alt="" v-else>
<div class="right-part">
<input :disabled="dataObj.qrCodeId" type="text" v-model="dataObj.qrCodeId" placeholder="请输入二维码ID" v-if="dataObj.qrCodeId">
<input type="text" v-model="scanTextData.scanText" placeholder="请输入二维码ID" v-else>
<img src="/static/img/scan.svg" alt="" v-if="!dataObj.qrCodeId">
<span @click="toScanCode" v-if="!dataObj.qrCodeId">扫码填入</span>
<span v-if="dataObj.qrCodeId">解绑</span>
</div>
</div>
</div>
</div>
</div>
<!-- 扫描盒子 -->
<div class="scan-box" v-if="scanTextData.showScanBox">
<div class="scan-cacel" @click="cancelScan" v-show="scanTextData.showScanBoxInfo">
<!-- <img src="" alt=""> -->
取消
</div>
<video ref="video" id="video" class="scan-video" v-show="scanTextData.showScanBoxInfo" autoplay></video>
<div class="scan-img" v-show="scanTextData.showScanBoxInfo">
<div class="scan-frame">
<span class="left-t"></span>
<span class="right-t"></span>
<span class="left-b"></span>
<span class="right-b"></span>
<span class="cross-line"></span>
</div>
</div>
<!-- <img src="/static/img/scan.svg" alt="" v-show="scanTextData.showScanBoxInfo"> -->
<div class="scan-tip" v-show="scanTextData.showScanBoxInfo"> {{scanTextData.tipMsg}} </div>
</div>
</div>
</template>
<script>
import { BrowserMultiFormatReader } from '@zxing/library';
let scanTextData = {
loadingShow: false,
codeReader: null,
scanText: '',
vin: null,
tipMsg: '将二维码置于屏幕中,即可识别',
tipShow: false
}
export default {
name: 'scanCodePage',
data() {
return {
scanTextData:{
loadingShow: false,
codeReader: null,
scanText: '',
vin: null,
tipMsg: '将二维码置于屏幕中,即可识别',
tipShow: false,
showScanBox:false,
showScanBoxInfo:false,
},
hasBind:false
}
},
methods: {
toScanCode(){
console.log('识别二维码',this.dataObj)
scanTextData.codeReader = new BrowserMultiFormatReader();
this.scanTextData.showScanBox = true
this.openScan();
},
cancelScan(){
//识别完停止使用摄像头
let thisVideo = document.getElementById("video");
thisVideo.srcObject.getTracks()[0].stop()
scanTextData.codeReader.reset(); // 重置
this.scanTextData.showScanBox = false
setTimeout(()=>{
this.scanTextData.showScanBoxInfo = false
},1000)
},
async openScan() {
scanTextData.codeReader.getVideoInputDevices().then((videoInputDevices) => {
scanTextData.tipShow = true;
scanTextData.tipMsg = '正在调用摄像头...';
console.log('videoInputDevices', videoInputDevices);
// 默认获取第一个摄像头设备id
let firstDeviceId = videoInputDevices[0].deviceId;
// 获取第一个摄像头设备的名称
const videoInputDeviceslablestr = JSON.stringify(videoInputDevices[0].label);
if (videoInputDevices.length > 1) {
// 判断是否后置摄像头
if (videoInputDeviceslablestr.indexOf('back') > -1) {
firstDeviceId = videoInputDevices[0].deviceId;
} else {
firstDeviceId = videoInputDevices[1].deviceId;
}
}
this.decodeFromInputVideoFunc(firstDeviceId);
}).catch(err => {
scanTextData.tipShow = false;
console.error(err);
});
},
decodeFromInputVideoFunc(firstDeviceId) {
scanTextData.codeReader.reset(); // 重置
scanTextData.scanText = '';
scanTextData.codeReader.decodeFromInputVideoDeviceContinuously(firstDeviceId, 'video', (result, err) => {
scanTextData.tipMsg = '将二维码置于屏幕中,即可识别';
scanTextData.scanText = '';
setTimeout(()=>{
this.scanTextData.showScanBoxInfo = true
},1000)
if (result) {
console.log('扫描结果', result.text);
if (result.text) {
console.log('扫描结果11', result.text);
this.scanTextData.showScanBox = false
this.scanTextData.showScanBoxInfo = false
this.scanTextData.scanText = result.text
//这里扫描出结果可以调用你想要的方法
//识别完停止使用摄像头
let thisVideo = document.getElementById("video");
thisVideo.srcObject.getTracks()[0].stop()
scanTextData.codeReader.reset(); // 重置
}
}else{
// console.log('没出来?',result,err)
}
if (err && !(err)) {
scanTextData.tipMsg = '识别失败';
setTimeout(() => {
scanTextData.tipShow = false;
}, 2000)
console.error(err);
}
});
},
},
props:['dataObj']
}
</script>
<style scoped lang="scss">
.pullWrap {
width: 100%;
height: 100px;
padding-top: 50px;
background: #fff;
}
.topTitle {
width: 100%;
position: relative;
}
.pullTitle {
display: flex;
height: 80px;
line-height: 80px;
margin-top: -40px;
background: #fff;
align-items: center;
justify-content: space-between;
}
.pullName{
font-size: 30px;
color: rgba(0,0,0,0.85);
}
img{
width: 40px;
height: 40px;
}
.left-icon{
margin:0 15px;
}
span{
text-decoration: underline;
text-decoration-color: #42a5ff;
color: #42a5ff;
margin-left: 5px;
}
.right-part {
flex: 1;
display: flex;
align-items: center;
justify-content: space-around;
border-bottom: 1px solid #e5e5e5;
overflow: hidden;
text-overflow: ellipsis;
}
input{
border:none;
flex: 1;
}
.scan-index-bar{
background-image: linear-gradient( -45deg, #42a5ff ,#59cfff);
}
.van-nav-bar__title{
color: #fff !important;
}
.scan-box {
position: fixed;
top: 0;
left: 0;
z-index: 5;
height: 100%;
width: 100vw;
}
.scan-cacel{
position: absolute;
top: 30px;
left: 30px;
z-index: 9;
color: #fff;
font-size: 35px;
}
.scan-video{
height: 100vh;
width: 100vw;
object-fit:cover;
}
.scan-img {
width: 500px;
height: 500px;
position: fixed;
top: 40%;
left: 50%;
margin-top: -200px;
margin-left: -250px;
z-index: 6;
}
.scan-frame {
width: 100%;
height: 100%;
position: relative;
}
.left-t,.right-t,.left-b,.right-b{
position: absolute;
width: 80px;
height: 80px;
}
.left-t{
top: 0;
left: 0;
border-top:2px solid #17B1B7;
border-left:2px solid #17B1B7;
}
.right-t{
top: 0;
right: 0;
border-top:2px solid #17B1B7;
border-right:2px solid #17B1B7;
}
.left-b{
bottom: 0;
left: 0;
border-bottom:2px solid #17B1B7;
border-left:2px solid #17B1B7;
}
.right-b{
bottom: 0;
right: 0;
border-bottom:2px solid #17B1B7;
border-right:2px solid #17B1B7;
}
.cross-line{
width: 600px;
height: 10px;
background: linear-gradient(to right, rgba(255, 255, 255, 0),#5DDDD3,rgba(255,255,255,0));
position: absolute;
top: 0;
left: -50px;
animation: identifier_p 5s infinite;
}
@keyframes identifier_p {
0%{
top: 0%;
}
50%{
top: 100%;
}
100%{
top: 0;
}
}
.scan-tip{
width: 100vw;
text-align: center;
margin-bottom: 10vh;
color: white;
font-size: 5vw;
position: absolute;
bottom: 50px;
left: 0;
color: #fff;
}
.page-scan{
overflow-y: hidden;
// background-color: #363636;
}
</style>

4
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.service.MaterialTypeService;
import com.dreamchaser.depository_manage.utils.*; import com.dreamchaser.depository_manage.utils.*;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.joda.time.DateTimeUtils;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
@ -30,8 +31,9 @@ import java.util.concurrent.TimeUnit;
public class Test { public class Test {
@org.junit.Test
public void test1(){ public void test1(){
System.out.println(DateUtil.TimeStampToDateTime(Long.valueOf("1664035200000")));
} }

40
target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml

@ -124,6 +124,7 @@
<if test="code != null and code != '' "> <if test="code != null and code != '' ">
and code = #{code} and code = #{code}
</if> </if>
and depository_id is null
<if test="begin != null and size != null"> <if test="begin != null and size != null">
LIMIT #{begin},#{size} LIMIT #{begin},#{size}
</if> </if>
@ -165,6 +166,38 @@
</if> </if>
</select> </select>
<select id="findInventoryCount" parameterType="map" resultType="int">
SELECT
count(*)
from findMaterial
where 1 = 1
<if test="mid != null">
and id = #{mid}
</if>
<if test="depositoryId != null">
AND depository_id = #{depositoryId}
</if>
<if test="mname != null and mname != ''">
AND mname LIKE CONCAT('%', #{mname}, '%')
</if>
<if test="quantity != null">
AND quantity = #{quantity}
</if>
<if test="price != null">
AND price = #{price}
</if>
<if test="materialTypeId != null">
AND type_id = #{materialTypeId}
</if>
<if test="state != null and state != ''">
And state = #{state}
</if>
<if test="code != null and code != '' ">
and code = #{code}
</if>
and depository_id is not null
</select>
<!-- 根据仓库查询物料--> <!-- 根据仓库查询物料-->
<select id="findMaterialByDepositorys" resultMap="materialMap" parameterType="list"> <select id="findMaterialByDepositorys" resultMap="materialMap" parameterType="list">
SELECT SELECT
@ -176,6 +209,13 @@
#{item} #{item}
</foreach> </foreach>
</select> </select>
<!-- 根据仓库查询物料-->
<select id="findMaterialByDepository" resultMap="materialMap" parameterType="int">
SELECT
<include refid="allColumns" />
from material m
where m.depository_id = #{depositoryId}
</select>
<!-- 根据主键查询数据 --> <!-- 根据主键查询数据 -->

7
target/classes/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml

@ -53,12 +53,13 @@
<include refid="allColumns" /> <include refid="allColumns" />
from materialandplace mp left join place p on p.id = mp.pid from materialandplace mp left join place p on p.id = mp.pid
where 1 = 1 where 1 = 1
<if test="did != null and did != ''">
and p.did = #{did}
</if>
<if test="mid != null and mid != ''"> <if test="mid != null and mid != ''">
and mp.mid = #{mid} and mp.mid = #{mid}
</if> </if>
<if test="did != null and did != ''">
and ( p.did = #{did} or p.did = 0)
</if>
</select> </select>
<!-- 根据条件参数查询列表 --> <!-- 根据条件参数查询列表 -->

2
target/classes/static/js/lay-module/step-lay/step.css

@ -58,7 +58,7 @@
/*margin-left: -20px;*/ /*margin-left: -20px;*/
/*margin-left: -50%;*/ /*margin-left: -50%;*/
/*margin-right: 50%;*/ /*margin-right: 50%;*/
padding-left: 26px; /*padding-left: 26px;*/
text-align: center; text-align: center;
} }

13
target/classes/templates/index.html

@ -137,6 +137,7 @@
<script src="/static/js/lay-config.js?v=2.0.0" charset="utf-8"></script> <script src="/static/js/lay-config.js?v=2.0.0" charset="utf-8"></script>
<script> <script>
layui.use(['jquery', 'layer', 'miniAdmin','miniTongji'], function () { layui.use(['jquery', 'layer', 'miniAdmin','miniTongji'], function () {
var $ = layui.jquery, var $ = layui.jquery,
layer = layui.layer, layer = layui.layer,
@ -158,17 +159,7 @@
$("#scan").on("click",function () { $("#scan").on("click",function () {
layer.open({
type: 2,
title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
move : '.layui-layer-title',
fixed:false,
content: '/scanQrCode',
})
}); });

10
target/classes/templates/pages/application/form-step-look_back.html

@ -123,19 +123,11 @@
var state=$("#state").text(); var state=$("#state").text();
//当前处于的状态 //当前处于的状态
var position=0,states={},number = 1; var position=0,states={},number = 1;
/*if (state === "待部门负责人审核" || state === "部门负责人审核未通过") {
position = 1;
states = [{title: "提交申请"}, {title: state}, {title: "未入库"}];
} else {
position = 2;
states = [{title: "提交申请"}, {title: "审核通过"}, {title: state}];
}*/
if (state === "待部门负责人审核" || state === "部门负责人审核未通过") { if (state === "待部门负责人审核" || state === "部门负责人审核未通过") {
// , {title: "未入库"}
states = [ {title: state}]; states = [ {title: state}];
number = 2; number = 2;
} else { } else {
// {title: "提交申请"},
states = [ {title: state}]; states = [ {title: state}];
number = 3; number = 3;
} }

54
target/classes/templates/pages/chart/chart-in_back.html

@ -15,14 +15,17 @@
border-radius: 5px; border-radius: 5px;
text-align: center; text-align: center;
} }
.top-panel > .layui-card-body { .top-panel > .layui-card-body {
height: 60px; height: 60px;
} }
.top-panel-number { .top-panel-number {
line-height: 60px; line-height: 60px;
font-size: 30px; font-size: 30px;
border-right: 1px solid #eceff9; border-right: 1px solid #eceff9;
} }
.top-panel-tips { .top-panel-tips {
line-height: 30px; line-height: 30px;
font-size: 12px font-size: 12px
@ -44,8 +47,8 @@
<span th:text="${allInCount}"></span> <span th:text="${allInCount}"></span>
</div> </div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips"> <div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br> <!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
比七日 <a style="color: #bd3004">▼0.06</a> <!-- 比七日 <a style="color: #bd3004">▼0.06</a>-->
</div> </div>
</div> </div>
</div> </div>
@ -62,8 +65,8 @@
<span th:text="${allInPrice}"></span> <span th:text="${allInPrice}"></span>
</div> </div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips"> <div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br> <!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
比七日 <a style="color: #bd3004">▼0.06</a> <!-- 比七日 <a style="color: #bd3004">▼0.06</a>-->
</div> </div>
</div> </div>
</div> </div>
@ -80,8 +83,8 @@
<span th:text="${InCount}"></span> <span th:text="${InCount}"></span>
</div> </div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips"> <div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br> <!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
比七日 <a style="color: #bd3004">▼0.06</a> <!-- 比七日 <a style="color: #bd3004">▼0.06</a>-->
</div> </div>
</div> </div>
</div> </div>
@ -98,8 +101,8 @@
<span th:text="${InPrice}"></span> <span th:text="${InPrice}"></span>
</div> </div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips"> <div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br> <!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
比七日 <a style="color: #bd3004">▼0.06</a> <!-- 比七日 <a style="color: #bd3004">▼0.06</a>-->
</div> </div>
</div> </div>
</div> </div>
@ -261,8 +264,7 @@
tooltip: {}, tooltip: {},
dataset: { dataset: {
dimensions: [], dimensions: [],
source: [ source: []
]
}, },
xAxis: {type: 'category'}, xAxis: {type: 'category'},
yAxis: {}, yAxis: {},
@ -285,8 +287,7 @@
showContent: false showContent: false
}, },
dataset: { dataset: {
source: [ source: []
]
}, },
xAxis: {type: 'category'}, xAxis: {type: 'category'},
yAxis: {gridIndex: 0}, yAxis: {gridIndex: 0},
@ -318,18 +319,20 @@
async: true, async: true,
dataType: "json", dataType: "json",
complete: function (XHR, TS) { complete: function (XHR, TS) {
if(XHR.status != 200){ if (XHR.status !== 200) {
layer.alert("系统繁忙,稍后重试"); layer.alert("系统繁忙,稍后重试");
} }
}, },
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) { success: function (result) {
if(result.code == 0){ layer.close(this.layerIndex);
if (result.code === 0) {
echartsRecords.setOption(optionRecords); echartsRecords.setOption(optionRecords);
echartsPies.setOption(optionPies); echartsPies.setOption(optionPies);
echartsDataset.setOption(optionDataset); echartsDataset.setOption(optionDataset);
echartsMap.setOption(optionMap); echartsMap.setOption(optionMap);
console.log(result)
// 折线图 // 折线图
var optionRecordsSeries = []; var optionRecordsSeries = [];
// 饼状图 // 饼状图
@ -347,7 +350,7 @@
} }
}, },
data: [] data: []
} };
// 柱状图 // 柱状图
optionDataset = { optionDataset = {
legend: {}, legend: {},
@ -369,11 +372,13 @@
areaStyle: {} areaStyle: {}
}); });
optionPiesSeries.data.push({ optionPiesSeries.data.push({
value:result.data.depository_data.yesterdayData[result.data.depository_name[i]],name:result.data.depository_name[i] value: result.data.depository_data.yesterdayData[result.data.depository_name[i]],
name: result.data.depository_name[i]
}) })
} }
var dimensions = result.data.depository_data.sourceList[result.data.depository_data.sourceList.length - 1] var dimensions = result.data.depository_data.sourceList[result.data.depository_data.sourceList.length - 1]
optionDataset.dataset.dimensions = dimensions optionDataset.dataset.dimensions = dimensions;
for (let i = result.data.depository_data.sourceList.length - 2; i >= 0; i--) { for (let i = result.data.depository_data.sourceList.length - 2; i >= 0; i--) {
optionDataset.dataset.source.push(result.data.depository_data.sourceList[i]) optionDataset.dataset.source.push(result.data.depository_data.sourceList[i])
} }
@ -384,8 +389,8 @@
for (let i = 0; i < result.data.depository_data.mapData.mapDataList.length; i++) { for (let i = 0; i < result.data.depository_data.mapData.mapDataList.length; i++) {
optionMap.dataset.source.push(result.data.depository_data.mapData.mapDataList[i]) optionMap.dataset.source.push(result.data.depository_data.mapData.mapDataList[i])
optionMap.series.push({type: 'line', smooth: true, seriesLayoutBy: 'row'}) optionMap.series.push({type: 'line', smooth: true, seriesLayoutBy: 'row'})
} }
optionMap.series.push( optionMap.series.push(
{ {
type: 'pie', type: 'pie',
@ -401,8 +406,7 @@
tooltip: '8月' tooltip: '8月'
} }
} }
) );
console.log(optionMap)
optionRecords = { optionRecords = {
title: { title: {
text: '入库仓库-报表图' text: '入库仓库-报表图'
@ -476,7 +480,7 @@
form.on('submit(thisWeek)', function () { form.on('submit(thisWeek)', function () {
$.ajax({ $.ajax({
url:'/repository/layui/echart_back?type=1', url: '/repository/layui/echart_back_thisWeek?type=1',
type: 'get', type: 'get',
async: true, async: true,
dataType: "json", dataType: "json",
@ -546,12 +550,12 @@
form.on('submit(lastWeek)', function () { form.on('submit(lastWeek)', function () {
$.ajax({ $.ajax({
url:'/repository/layui/echart_back?type=1&last=1', url: '/repository/layui/echart_back_lastWeek?type=1',
type: 'get', type: 'get',
async: true, async: true,
dataType: "json", dataType: "json",
complete: function (XHR, TS) { complete: function (XHR, TS) {
if(XHR.status != 200){ if (XHR.status !== 200) {
layer.alert("系统繁忙,稍后重试"); layer.alert("系统繁忙,稍后重试");
} }
}, },

22
target/classes/templates/pages/chart/chart-out_back.html

@ -15,14 +15,17 @@
border-radius: 5px; border-radius: 5px;
text-align: center; text-align: center;
} }
.top-panel > .layui-card-body { .top-panel > .layui-card-body {
height: 60px; height: 60px;
} }
.top-panel-number { .top-panel-number {
line-height: 60px; line-height: 60px;
font-size: 30px; font-size: 30px;
border-right: 1px solid #eceff9; border-right: 1px solid #eceff9;
} }
.top-panel-tips { .top-panel-tips {
line-height: 30px; line-height: 30px;
font-size: 12px font-size: 12px
@ -260,8 +263,7 @@
tooltip: {}, tooltip: {},
dataset: { dataset: {
dimensions: [], dimensions: [],
source: [ source: []
]
}, },
xAxis: {type: 'category'}, xAxis: {type: 'category'},
yAxis: {}, yAxis: {},
@ -284,8 +286,7 @@
showContent: false showContent: false
}, },
dataset: { dataset: {
source: [ source: []
]
}, },
xAxis: {type: 'category'}, xAxis: {type: 'category'},
yAxis: {gridIndex: 0}, yAxis: {gridIndex: 0},
@ -317,12 +318,16 @@
async: true, async: true,
dataType: "json", dataType: "json",
complete: function (XHR, TS) { complete: function (XHR, TS) {
if(XHR.status != 200){ if (XHR.status !== 200) {
layer.alert("系统繁忙,稍后重试"); layer.alert("系统繁忙,稍后重试");
} }
}, },
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) { success: function (result) {
if(result.code == 0){ layer.close(this.layerIndex);
if (result.code === 0) {
echartsRecords.setOption(optionRecords); echartsRecords.setOption(optionRecords);
echartsPies.setOption(optionPies); echartsPies.setOption(optionPies);
echartsDataset.setOption(optionDataset); echartsDataset.setOption(optionDataset);
@ -366,7 +371,8 @@
areaStyle: {} areaStyle: {}
}); });
optionPiesSeries.data.push({ optionPiesSeries.data.push({
value:result.data.depository_data.yesterdayData[result.data.depository_name[i]],name:result.data.depository_name[i] value: result.data.depository_data.yesterdayData[result.data.depository_name[i]],
name: result.data.depository_name[i]
}) })
} }
var dimensions = result.data.depository_data.sourceList[result.data.depository_data.sourceList.length - 1] var dimensions = result.data.depository_data.sourceList[result.data.depository_data.sourceList.length - 1]
@ -402,7 +408,6 @@
) )
optionRecords = { optionRecords = {
title: { title: {
text: '出库仓库-报表图' text: '出库仓库-报表图'
@ -475,7 +480,6 @@
} }
form.on('submit(thisWeek)', function () { form.on('submit(thisWeek)', function () {
$.ajax({ $.ajax({
url: '/repository/layui/echart_back?type=2', url: '/repository/layui/echart_back?type=2',

315
target/classes/templates/pages/uniApp/scanQrCode.html

@ -1,315 +0,0 @@
<template>
<div class="page-scan">
<div class="base-line">
<div class="pullWrap">
<div class="topTitle">
<div class="pullTitle">
<div class="pullName">二维码绑定</div>
<!-- 绑定状态图标 -->
<img class="left-icon" src="/static/img/noBind.svg" alt="" v-if="!dataObj.qrCodeId">
<img class="left-icon" src="/static/img/binded.svg" alt="" v-else>
<div class="right-part">
<input :disabled="dataObj.qrCodeId" type="text" v-model="dataObj.qrCodeId" placeholder="请输入二维码ID" v-if="dataObj.qrCodeId">
<input type="text" v-model="scanTextData.scanText" placeholder="请输入二维码ID" v-else>
<img src="/static/img/scan.svg" alt="" v-if="!dataObj.qrCodeId">
<span @click="toScanCode" v-if="!dataObj.qrCodeId">扫码填入</span>
<span v-if="dataObj.qrCodeId">解绑</span>
</div>
</div>
</div>
</div>
</div>
<!-- 扫描盒子 -->
<div class="scan-box" v-if="scanTextData.showScanBox">
<div class="scan-cacel" @click="cancelScan" v-show="scanTextData.showScanBoxInfo">
<!-- <img src="" alt=""> -->
取消
</div>
<video ref="video" id="video" class="scan-video" v-show="scanTextData.showScanBoxInfo" autoplay></video>
<div class="scan-img" v-show="scanTextData.showScanBoxInfo">
<div class="scan-frame">
<span class="left-t"></span>
<span class="right-t"></span>
<span class="left-b"></span>
<span class="right-b"></span>
<span class="cross-line"></span>
</div>
</div>
<!-- <img src="/static/img/scan.svg" alt="" v-show="scanTextData.showScanBoxInfo"> -->
<div class="scan-tip" v-show="scanTextData.showScanBoxInfo"> {{scanTextData.tipMsg}} </div>
</div>
</div>
</template>
<script>
import { BrowserMultiFormatReader } from '@zxing/library';
let scanTextData = {
loadingShow: false,
codeReader: null,
scanText: '',
vin: null,
tipMsg: '将二维码置于屏幕中,即可识别',
tipShow: false
}
export default {
name: 'scanCodePage',
data() {
return {
scanTextData:{
loadingShow: false,
codeReader: null,
scanText: '',
vin: null,
tipMsg: '将二维码置于屏幕中,即可识别',
tipShow: false,
showScanBox:false,
showScanBoxInfo:false,
},
hasBind:false
}
},
methods: {
toScanCode(){
console.log('识别二维码',this.dataObj)
scanTextData.codeReader = new BrowserMultiFormatReader();
this.scanTextData.showScanBox = true
this.openScan();
},
cancelScan(){
//识别完停止使用摄像头
let thisVideo = document.getElementById("video");
thisVideo.srcObject.getTracks()[0].stop()
scanTextData.codeReader.reset(); // 重置
this.scanTextData.showScanBox = false
setTimeout(()=>{
this.scanTextData.showScanBoxInfo = false
},1000)
},
async openScan() {
scanTextData.codeReader.getVideoInputDevices().then((videoInputDevices) => {
scanTextData.tipShow = true;
scanTextData.tipMsg = '正在调用摄像头...';
console.log('videoInputDevices', videoInputDevices);
// 默认获取第一个摄像头设备id
let firstDeviceId = videoInputDevices[0].deviceId;
// 获取第一个摄像头设备的名称
const videoInputDeviceslablestr = JSON.stringify(videoInputDevices[0].label);
if (videoInputDevices.length > 1) {
// 判断是否后置摄像头
if (videoInputDeviceslablestr.indexOf('back') > -1) {
firstDeviceId = videoInputDevices[0].deviceId;
} else {
firstDeviceId = videoInputDevices[1].deviceId;
}
}
this.decodeFromInputVideoFunc(firstDeviceId);
}).catch(err => {
scanTextData.tipShow = false;
console.error(err);
});
},
decodeFromInputVideoFunc(firstDeviceId) {
scanTextData.codeReader.reset(); // 重置
scanTextData.scanText = '';
scanTextData.codeReader.decodeFromInputVideoDeviceContinuously(firstDeviceId, 'video', (result, err) => {
scanTextData.tipMsg = '将二维码置于屏幕中,即可识别';
scanTextData.scanText = '';
setTimeout(()=>{
this.scanTextData.showScanBoxInfo = true
},1000)
if (result) {
console.log('扫描结果', result.text);
if (result.text) {
console.log('扫描结果11', result.text);
this.scanTextData.showScanBox = false
this.scanTextData.showScanBoxInfo = false
this.scanTextData.scanText = result.text
//这里扫描出结果可以调用你想要的方法
//识别完停止使用摄像头
let thisVideo = document.getElementById("video");
thisVideo.srcObject.getTracks()[0].stop()
scanTextData.codeReader.reset(); // 重置
}
}else{
// console.log('没出来?',result,err)
}
if (err && !(err)) {
scanTextData.tipMsg = '识别失败';
setTimeout(() => {
scanTextData.tipShow = false;
}, 2000)
console.error(err);
}
});
},
},
props:['dataObj']
}
</script>
<style scoped lang="scss">
.pullWrap {
width: 100%;
height: 100px;
padding-top: 50px;
background: #fff;
}
.topTitle {
width: 100%;
position: relative;
}
.pullTitle {
display: flex;
height: 80px;
line-height: 80px;
margin-top: -40px;
background: #fff;
align-items: center;
justify-content: space-between;
}
.pullName{
font-size: 30px;
color: rgba(0,0,0,0.85);
}
img{
width: 40px;
height: 40px;
}
.left-icon{
margin:0 15px;
}
span{
text-decoration: underline;
text-decoration-color: #42a5ff;
color: #42a5ff;
margin-left: 5px;
}
.right-part {
flex: 1;
display: flex;
align-items: center;
justify-content: space-around;
border-bottom: 1px solid #e5e5e5;
overflow: hidden;
text-overflow: ellipsis;
}
input{
border:none;
flex: 1;
}
.scan-index-bar{
background-image: linear-gradient( -45deg, #42a5ff ,#59cfff);
}
.van-nav-bar__title{
color: #fff !important;
}
.scan-box {
position: fixed;
top: 0;
left: 0;
z-index: 5;
height: 100%;
width: 100vw;
}
.scan-cacel{
position: absolute;
top: 30px;
left: 30px;
z-index: 9;
color: #fff;
font-size: 35px;
}
.scan-video{
height: 100vh;
width: 100vw;
object-fit:cover;
}
.scan-img {
width: 500px;
height: 500px;
position: fixed;
top: 40%;
left: 50%;
margin-top: -200px;
margin-left: -250px;
z-index: 6;
}
.scan-frame {
width: 100%;
height: 100%;
position: relative;
}
.left-t,.right-t,.left-b,.right-b{
position: absolute;
width: 80px;
height: 80px;
}
.left-t{
top: 0;
left: 0;
border-top:2px solid #17B1B7;
border-left:2px solid #17B1B7;
}
.right-t{
top: 0;
right: 0;
border-top:2px solid #17B1B7;
border-right:2px solid #17B1B7;
}
.left-b{
bottom: 0;
left: 0;
border-bottom:2px solid #17B1B7;
border-left:2px solid #17B1B7;
}
.right-b{
bottom: 0;
right: 0;
border-bottom:2px solid #17B1B7;
border-right:2px solid #17B1B7;
}
.cross-line{
width: 600px;
height: 10px;
background: linear-gradient(to right, rgba(255, 255, 255, 0),#5DDDD3,rgba(255,255,255,0));
position: absolute;
top: 0;
left: -50px;
animation: identifier_p 5s infinite;
}
@keyframes identifier_p {
0%{
top: 0%;
}
50%{
top: 100%;
}
100%{
top: 0;
}
}
.scan-tip{
width: 100vw;
text-align: center;
margin-bottom: 10vh;
color: white;
font-size: 5vw;
position: absolute;
bottom: 50px;
left: 0;
color: #fff;
}
.page-scan{
overflow-y: hidden;
// background-color: #363636;
}
</style>
Loading…
Cancel
Save