Browse Source

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

lwx_dev
erdanergou 3 years ago
parent
commit
5224f6b460
  1. 510
      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. 190
      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. 120
      src/main/resources/templates/pages/chart/chart-in_back.html
  23. 94
      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. 120
      target/classes/templates/pages/chart/chart-in_back.html
  32. 94
      target/classes/templates/pages/chart/chart-out_back.html
  33. 315
      target/classes/templates/pages/uniApp/scanQrCode.html

510
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,22 +95,23 @@ public class DepositoryController {
/**
* 获取之前仓库的库存值
*
* @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<Long> days = getLastTimeInterval();
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId();
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(user);
Iterator it = depositoryAllNameAndId.keySet().iterator();
Map<String,Object> map = new HashMap<>();
Map<String, Object> map = new HashMap<>();
// 获取本周仓库库存
Map<String, Object> thisWeekInventoryByDName = getThisWeekInventoryByDName(depositoryService, depositoryRecordService);
while (it.hasNext()){
Map<String, Object> thisWeekInventoryByDName = getThisWeekInventoryByDName(depositoryService, depositoryRecordService, user);
while (it.hasNext()) {
int i;
Object key = it.next();
Double thisDayInventory = 0.0;
// 本周周一的总量
thisDayInventory = ((List<Double>)thisWeekInventoryByDName.get(key.toString())).get(0);
thisDayInventory = ((List<Double>) thisWeekInventoryByDName.get(key.toString())).get(0);
result.add(thisDayInventory);
int j = 0;
for (i = days.size() - 1; i > 0; i--) {
@ -132,24 +134,25 @@ public class DepositoryController {
/**
* 获取本周库存容量
*
* @param depositoryService
* @param depositoryRecordService
* @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();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
int weekDay = instance.get(Calendar.DAY_OF_WEEK);
weekDay = weekDay - 1;
// 获取所有仓库名称
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId();
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(user);
Iterator it = depositoryAllNameAndId.keySet().iterator();
//result用来接收每个仓库每天的库存
List<Double> result = new ArrayList<>();
// map用来存储仓库与库存的映射
Map<String,Object> map = new HashMap<>();
Map<String, Object> 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<Double>) result).clone());
result.clear();
}
}else {
} else {
int now = instance.get(Calendar.DAY_OF_WEEK) - 1;
List<Long> 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<days.size() - 1;i++) {
for (i = 0; i < days.size() - 1; i++) {
// 获取本周周一日期
String mondayOnThisWeek = DateUtil.getMondayOnThisWeek();
if(mondayOnThisWeek.equals(DateUtil.TimeStampToDateTime(days.get(i)))){
if (mondayOnThisWeek.equals(DateUtil.TimeStampToDateTime(days.get(i)))) {
break;
}
// 当前日期额度
@ -197,7 +200,7 @@ public class DepositoryController {
// 获取当前仓库
Integer val = (Integer) depositoryAllNameAndId.get(key);
// 如果今天有出入库记录
if(flag){
if (flag) {
Double inRecordByDate = depositoryRecordService.findApplicationInRecordByDate(end, start, val);
Double OutRecordByDate = depositoryRecordService.findApplicationOutRecordByDate(end, start, val);
aDouble = aDouble - inRecordByDate + OutRecordByDate;
@ -237,11 +240,12 @@ public class DepositoryController {
/**
* 获取之前各月的库存容量
*
* @param depositoryService
* @param depositoryRecordService
* @return
*/
public static List<Object> getBeforeInventoryByMonth(DepositoryService depositoryService,DepositoryRecordService depositoryRecordService){
public static List<Object> getBeforeInventoryByMonth(DepositoryService depositoryService, DepositoryRecordService depositoryRecordService) {
List<Depository> depositoryAll = depositoryService.findDepositoryAll();
Map<String, Object> previousMonth = getPreviousMonth();
List<Object> months = (List<Object>) previousMonth.get("months");
@ -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<String,Object> getBeforeInventoryOnMap(DepositoryService depositoryService,DepositoryRecordService depositoryRecordService){
public static Map<String, Object> 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<String, Object> 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<Object> 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<String, Object> map){
public RestResponse findDepositoryByNoParent(@RequestParam Map<String, Object> map) {
if ("".equals(map.get("parentId")) || map.get("parentId") == null) {
map.put("parentId",0);
map.put("parentId", 0);
}
List<Depository> 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<String, Object> findAdministration(){
Map<String,Object> map = new HashMap<>();
String url = PortConfig.external_url +"/org/govlist";
public static Map<String, Object> findAdministration() {
Map<String, Object> 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<String,Object> result = new HashMap();
Map<String, Object> result = new HashMap();
List<AdministrationP> 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<String,Object> map){
if (map.containsKey("id")){
Integer id= ObjectFormatUtil.toInteger(map.get("id"));
public RestResponse realDeleteDepository(@RequestBody Map<String, Object> 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<Integer> ids=(List<Integer>) map.get("ids");
return CrudUtil.deleteHandle(depositoryService.deleteDepositoryRecordById(id), 1);
} else if (map.containsKey("ids")) {
List<Integer> ids = (List<Integer>) 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<String,Object> param = new HashMap<>();
param.put("parentId",parentId);
public void RealDeleteSonDepository(String parentId) {
Map<String, Object> param = new HashMap<>();
param.put("parentId", parentId);
// 获取当前仓库所有子仓库
List<Depository> 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,28 +577,29 @@ public class DepositoryController {
/**
* 修改仓库状态
*
* @param map
* @return
*/
@PostMapping("/EditDepositoryState")
public RestResponse EditDepositoryState(@RequestBody Map<String,Object> map){
public RestResponse EditDepositoryState(@RequestBody Map<String, Object> 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")){
if (state == 2) {
if (map.containsKey("envelop")) {
// 封库
new Thread(new Runnable() {
@Override
public void run() {
UpdateSonState(id,state,true);
UpdateSonState(id, state, true);
}
}).start();
}else {
} else {
// 禁用仓库
new Thread(new Runnable() {
@Override
@ -598,11 +608,11 @@ public class DepositoryController {
}
}).start();
}
}else if(state == 1){ // 如果是启用仓库,则只启用当前仓库下的物品
} 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<String,Object> param = new HashMap<>();
param.put("parentId",parentId);
public void UpdateSonState(String parentId, Integer state, boolean envelop) {
Map<String, Object> param = new HashMap<>();
param.put("parentId", parentId);
// 获取当前仓库所有子仓库
List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param);
if(envelop){
if (envelop) {
// 将当前仓库下的产品状态改为禁用
UpdateSonMaterialState(parentId,state);
UpdateSonMaterialState(parentId, state);
}
for (int i = 0; i < depositoryRecordPByCondition.size(); i++) {
Depository depository = depositoryRecordPByCondition.get(i);
int depositoryId = depository.getId();
Map<String,Object> newMap = new HashMap<>();
newMap.put("parentId",depositoryId);
UpdateSonState(String.valueOf(depositoryId),state,envelop);
Map<String,Object> map = new HashMap<>();
map.put("id",depositoryId);
map.put("state",state);
Map<String, Object> newMap = new HashMap<>();
newMap.put("parentId", depositoryId);
UpdateSonState(String.valueOf(depositoryId), state, envelop);
Map<String, Object> 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<String,Object> param = new HashMap<>();
param.put("depositoryId",parentId);
public void UpdateSonMaterialState(String parentId, Integer state) {
Map<String, Object> param = new HashMap<>();
param.put("depositoryId", parentId);
List<MaterialP> materialPByCondition = materialService.findMaterialPByCondition(param);
for (int i = 0; i < materialPByCondition.size(); i++) {
MaterialP materialP = materialPByCondition.get(i);
Map<String,Object> map = new HashMap<>();
map.put("id",materialP.getId());
map.put("state",state);
Map<String, Object> 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<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)
@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>();
show_weekday.add("周一");
@ -674,7 +897,8 @@ public class DepositoryController {
show_weekday.add("周日");
// 获取各仓库名称以及id
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId();
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(userByPort);
Iterator it = depositoryAllNameAndId.keySet().iterator();
// 仓库名称列表
List<String> depositoryName = new ArrayList<>();
@ -683,7 +907,7 @@ public class DepositoryController {
// 每天各仓库入库数目
Map<String, Object> show_data = new HashMap<>();
// 各仓库当前库存数目
Map<String,Object> todayInventory = new HashMap<>();
Map<String, Object> todayInventory = new HashMap<>();
//获取获取系统的当前日历对象
Calendar instance = Calendar.getInstance();
// 获取昨天数据标志位
@ -719,8 +943,7 @@ public class DepositoryController {
show_data.put(key.toString(), ((ArrayList<Double>) 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<Double> drCountbyDrName = new ArrayList<>();
drCountbyDrName.add(depositoryRecordByDate1);
@ -744,7 +967,7 @@ public class DepositoryController {
}
} else {
int now = instance.get(Calendar.DAY_OF_WEEK) - 1;
List<Long> days = new ArrayList<>();
List<Long> 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<MaterialType> materialTypeAll = materialTypeService.findMaterialTypeAll();
// 获取本月及之前月份各种类别入/出库总量
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");
@ -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<String, Object> data = new LinkedHashMap<String, Object>();
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<String,Object> param = new HashMap<>();
Map<String, Object> param = new HashMap<>();
param.put("depositoryId", materialById.getDepositoryId());
List<Depository> 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){
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<String, Object> map){
public RestResponse FindRelevancyByDepository(@RequestBody Map<String, Object> 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<Integer> ids = (List<Integer>) map.get("ids");
for (int i = 0; i < ids.size(); i++) {
allSonDepositoryOfRelevancy |= findAllSonDepositoryOfRelevancy(ids.get(i).toString());
if(allSonDepositoryOfRelevancy){
if (allSonDepositoryOfRelevancy) {
break;
}
}
}
else {
} else {
throw new MyException("所需请求参数缺失!");
}
return new RestResponse(allSonDepositoryOfRelevancy);
@ -941,22 +1168,23 @@ public class DepositoryController {
/**
* 根据父级编号查询所有仓库物品
*
* @param parentid
* @return
*/
public Boolean findAllSonDepository(String parentid){
Map<String,Object> param = new HashMap<>();
param.put("parentId",parentid);
param.put("state",1);
public Boolean findAllSonDepository(String parentid) {
Map<String, Object> param = new HashMap<>();
param.put("parentId", parentid);
param.put("state", 1);
boolean materialByDepository = findMaterialByDepository(parentid);
if(materialByDepository){
if (materialByDepository) {
return true;
}
List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param);
for (int i = 0; i < depositoryRecordPByCondition.size(); i++) {
if(!findMaterialByDepository(depositoryRecordPByCondition.get(i).getId().toString())){
if (!findMaterialByDepository(depositoryRecordPByCondition.get(i).getId().toString())) {
findAllSonDepository(depositoryRecordPByCondition.get(i).getId().toString());
}else{
} else {
return true;
}
}
@ -965,24 +1193,25 @@ public class DepositoryController {
/**
* 根据父级编号查询所有关联信息
*
* @param parentid
* @return
*/
public Boolean findAllSonDepositoryOfRelevancy(String parentid) {
Map<String,Object> param = new HashMap<>();
param.put("parentId",parentid);
param.put("state",1);
Map<String, Object> 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<Depository> 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<String,Object> param = new HashMap<>();
param.put("state",1);
param.put("depositoryId",parentId);
public boolean findMaterialByDepository(String parentId) {
Map<String, Object> param = new HashMap<>();
param.put("state", 1);
param.put("depositoryId", parentId);
List<MaterialP> 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<String,Object> param = new HashMap<>();
param.put("depositoryId",depositoryId);
public Boolean findDepositoryRecord(String depositoryId) {
Map<String, Object> param = new HashMap<>();
param.put("depositoryId", depositoryId);
List<DepositoryRecordP> 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<String,Object> param = new HashMap<>();
param.put("parentId",parentId);
public RestResponse FindDepositoryByParentId(@RequestParam("parentId") String parentId) {
Map<String, Object> param = new HashMap<>();
param.put("parentId", parentId);
List<Depository> 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<Integer> userIdByDid = roleService.findUserIdByDid(did);
List<UserByPort> 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<AdministrationP> 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<Object> 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);
}

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) {
// 获取库位id
Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId"));
if(placeId == -1) {// 如果插入到仓库
if(placeId == 0) {// 如果插入到仓库
map.put("placeId",0); // 到默认库位
integer += depositoryRecordService.applicationInPlace(map);
}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){
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
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<>();
for (RoleAndDepository roleAndDepository : depositoryAndRole) {
for (MaterialP materialP : materialPByCondition) {
if (Objects.equals(materialP.getDepositoryId(), roleAndDepository.getDepositoryId())) {
list.add(materialP);
}
Integer total = 0;
for (int i = 0; i < depositoryByAdminorg.size(); i++) {
map.put("depositoryId",depositoryByAdminorg.get(i).getId());
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)) {
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;
}

10
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'";
}
}

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 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<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)) {
return CrudUtil.postHandle(success, 1);
} 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);
/**
* 根据条件查询符合条件的库存总数
* @param map
* @return
*/
Integer findInventoryCount(Map<String,Object> map);
/**
* 根据条件查询符合条件的库存
* @param map
@ -136,4 +143,11 @@ public interface MaterialMapper {
*/
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 != '' ">
and code = #{code}
</if>
and depository_id is null
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
@ -165,6 +166,38 @@
</if>
</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
@ -176,6 +209,13 @@
#{item}
</foreach>
</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" />
from materialandplace mp left join place p on p.id = mp.pid
where 1 = 1
<if test="did != null and did != ''">
and p.did = #{did}
</if>
<if test="mid != null and mid != ''">
and mp.mid = #{mid}
</if>
<if test="did != null and did != ''">
and ( p.did = #{did} or p.did = 0)
</if>
</select>
<!-- 根据条件参数查询列表 -->

5
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<String,Integer> findDepositoryAllNameAndId();
Map<String,Integer> findDepositoryAllNameAndId(UserByPort user);
/**
* 根据仓库名称获取当前仓库库存容量
* 根据名称或编码获取当前仓库库存容量
* @param dname
* @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);
/**
* 根据条件查询符合条件的库存总数
* @param map
* @return
*/
Integer findInventoryCount(Map<String,Object> map);
/**
* 根据编码获取对应物料
* @return
@ -149,4 +156,11 @@ public interface MaterialService {
* @return
*/
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);
/**
* 添加物料到库位
* @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<>();
param.put("depositoryId", depositoryId);
param.put("mname", material.getMname());
List<Material> materialByCondition = materialMapper.findMaterialByCondition(param);
param.put("code", material.getCode());
// 判断该仓库中有无该物体
List<Material> 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<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) {
// 当前出库金额
@ -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<Material> materiallist = materialMapper.findMaterialByCondition(param);
List<Material> materiallist = materialMapper.findInventory(param);
if (materiallist.size() > 0) {
// 如果在该仓库
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();
}
/**
* 获取本部门以及个人管理仓库的名称和id
* @return
*/
@Override
public Map<String, Integer> findDepositoryAllNameAndId() {
List<Depository> depositoryAll = depositoryMapper.findDepositoryAll();
Map<String,Integer> 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<String, Integer> findDepositoryAllNameAndId(UserByPort user) {
// 获取当前用户所在部门管理的仓库
List<Depository> depositoryByAdminorg = depositoryMapper.findDepositoryByAdminorg(user.getMaindeparmentname());
// 仓库id列表
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;
}

190
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<String> 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<String,Object> readResult = new HashMap<>();
if("material".equals(excelInfo)){
Map<String, Object> readResult = new HashMap<>();
if ("material".equals(excelInfo)) {
readResult = excelutil.simpleExcelRead(filePath, ExcelInfo.class);
}
List<ExcelInfo> excelVos = (List<ExcelInfo>) readResult.get("dataList");
List<String> errMsg =(List<String>) readResult.get("errMsg");
List<String> errMsg = (List<String>) 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<Object> success = new ArrayList<>();
Map<String,Object> returnResult = new HashMap<>();
Map<String, Object> returnResult = new HashMap<>();
for (int i = 0; i < excelVos.size(); i++) {
Map<String,Object> 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<String, Object> 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<String,Object> readResult = excelutil.simpleExcelRead(filePath, ExcelInfoByMT.class);
Map<String, Object> readResult = excelutil.simpleExcelRead(filePath, ExcelInfoByMT.class);
List<ExcelInfoByMT> excelVos = (List<ExcelInfoByMT>) readResult.get("dataList");
List<String> errMsg =(List<String>) readResult.get("errMsg");
List<String> errMsg = (List<String>) 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<Object> success = new ArrayList<>();
Map<String,Object> returnResult = new HashMap<>();
Map<String, Object> returnResult = new HashMap<>();
for (int i = 0; i < excelVos.size(); i++) {
Map<String,Object> 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<String, Object> 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<String,Object> readResult = excelutil.simpleExcelRead(filePath, ExcelInfoByInventory.class);
Map<String, Object> readResult = excelutil.simpleExcelRead(filePath, ExcelInfoByInventory.class);
List<ExcelInfoByInventory> excelInfoByInventories = (List<ExcelInfoByInventory>) readResult.get("dataList");
List<String> errMsg =(List<String>) readResult.get("errMsg");
List<String> dataIndex =(List<String>) readResult.get("dataIndex");
List<String> errMsg = (List<String>) readResult.get("errMsg");
List<String> dataIndex = (List<String>) 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<String,Object> placeMap = new HashMap<>();
placeMap.put("did",depositoryId);
placeMap.put("code",placeCode);
if (placeCode != null && !placeCode.isEmpty()) {
Map<String, Object> placeMap = new HashMap<>();
placeMap.put("did", depositoryId);
placeMap.put("code", placeCode);
// 根据仓库及库位码获取库位
List<Place> placeByCondition = placeService.findPlaceByCondition(placeMap);
if(placeByCondition.size()>0){
if (placeByCondition.size() > 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());
if(quantity > place.getMax() - place.getQuantity()){
if (quantity > place.getMax() - place.getQuantity()) {
// 如果当前库位无法放下
String s = dataIndex.get(i);
String msg = s + "出现异常:" + excelInfoByInventories.get(i).getDepositoryCode() + " 该库位无法存放当前数目的物料";
errMsg.add(msg);
continue;
}else {
} else {
// 修改当前库位库存
Map<String, Object> updatePlace = new HashMap<>();
updatePlace.put("mid", materialByCode.getId());
updatePlace.put("id", place.getId());
updatePlace.put("quantity",quantity + place.getQuantity());
excelVos.add(excelInfoByInventories.get(i));
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<Object> success = new ArrayList<>();
Map<String,Object> returnResult = new HashMap<>();
Map<String, Object> returnResult = new HashMap<>();
for (int i = 0; i < excelVos.size(); i++) {
// 获取对应物料
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();
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 {
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));
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<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));
}
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, "结果");
}
}

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();
// 获取当前物料所处库位
StringBuilder placeCode = new StringBuilder();
if(depositoryId != null) {
Integer mid = list.get(i).getId();
List<PlaceP> 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){
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<String, Object> map) {
return materialMapper.findInventoryCount(map);
}
/**
* 根据编码获取对应物料
* @return
@ -362,6 +376,12 @@ public class MaterialServiceImpl implements MaterialService {
return materialMapper.findMaterialByDepositorys(dids);
}
@Override
public List<MaterialP> findMaterialByDepository(Integer depositoryId) {
List<Material> materialByDepository = materialMapper.findMaterialByDepository(depositoryId);
return pack(materialByDepository);
}
/**
* 构造树形选择框
* @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++) {
Place place = placeByCondition.get(i);
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());
}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<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: -50%;*/
/*margin-right: 50%;*/
padding-left: 26px;
/*padding-left: 26px;*/
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>
layui.use(['jquery', 'layer', 'miniAdmin','miniTongji'], function () {
var $ = layui.jquery,
layer = layui.layer,
@ -158,17 +159,7 @@
$("#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 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 === "部门负责人审核未通过") {
// , {title: "未入库"}
states = [ {title: state}];
number = 2;
} else {
// {title: "提交申请"},
states = [ {title: state}];
number = 3;
}

120
src/main/resources/templates/pages/chart/chart-in_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
}
</style>
@ -44,8 +47,8 @@
<span th:text="${allInCount}"></span>
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br>
比七日 <a style="color: #bd3004">▼0.06</a>
<!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
<!-- 比七日 <a style="color: #bd3004">▼0.06</a>-->
</div>
</div>
</div>
@ -62,8 +65,8 @@
<span th:text="${allInPrice}"></span>
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br>
比七日 <a style="color: #bd3004">▼0.06</a>
<!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
<!-- 比七日 <a style="color: #bd3004">▼0.06</a>-->
</div>
</div>
</div>
@ -80,8 +83,8 @@
<span th:text="${InCount}"></span>
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br>
比七日 <a style="color: #bd3004">▼0.06</a>
<!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
<!-- 比七日 <a style="color: #bd3004">▼0.06</a>-->
</div>
</div>
</div>
@ -98,8 +101,8 @@
<span th:text="${InPrice}"></span>
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br>
比七日 <a style="color: #bd3004">▼0.06</a>
<!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
<!-- 比七日 <a style="color: #bd3004">▼0.06</a>-->
</div>
</div>
</div>
@ -114,7 +117,7 @@
<button class="layui-btn" lay-submit lay-filter="thisWeek">
&emsp;本周&emsp;
</button>
<button class="layui-btn" lay-submit lay-filter="lastWeek" >
<button class="layui-btn" lay-submit lay-filter="lastWeek">
&emsp;上周&emsp;
</button>
<div id="echarts-records" style="background-color:#ffffff;min-height:400px;padding: 10px">
@ -261,8 +264,7 @@
tooltip: {},
dataset: {
dimensions: [],
source: [
]
source: []
},
xAxis: {type: 'category'},
yAxis: {},
@ -285,8 +287,7 @@
showContent: false
},
dataset: {
source: [
]
source: []
},
xAxis: {type: 'category'},
yAxis: {gridIndex: 0},
@ -313,25 +314,27 @@
//动态加载相关数据
$.ajax({
url:'/repository/layui/echart_back?type=1',
type:'get',
async:true,
url: '/repository/layui/echart_back?type=1',
type: 'get',
async: true,
dataType: "json",
complete:function (XHR,TS){
if(XHR.status != 200){
complete: function (XHR, TS) {
if (XHR.status !== 200) {
layer.alert("系统繁忙,稍后重试");
}
},
success:function (result){
if(result.code == 0){
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) {
layer.close(this.layerIndex);
if (result.code === 0) {
echartsRecords.setOption(optionRecords);
echartsPies.setOption(optionPies);
echartsDataset.setOption(optionDataset);
echartsMap.setOption(optionMap);
console.log(result)
// 折线图
var optionRecordsSeries=[];
var optionRecordsSeries = [];
// 饼状图
var optionPiesSeries = {
name: '昨日占比',
@ -346,46 +349,48 @@
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
},
data:[]
}
data: []
};
// 柱状图
optionDataset = {
legend: {},
tooltip: {},
dataset: {
dimensions:[],
source:[]
dimensions: [],
source: []
},
xAxis: {type: 'category'},
yAxis: {},
series:[]
series: []
};
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.data[result.data.depository_name[i]],
data: result.data.depository_data.data[result.data.depository_name[i]],
areaStyle: {}
});
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]
optionDataset.dataset.dimensions = dimensions
optionDataset.dataset.dimensions = dimensions;
for (let i = result.data.depository_data.sourceList.length - 2; i >= 0; i--) {
optionDataset.dataset.source.push(result.data.depository_data.sourceList[i])
}
for (let i = 0; i < dimensions.length - 1; i++) {
optionDataset.series.push({type:'bar'})
optionDataset.series.push({type: 'bar'})
}
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.series.push({type: 'line', smooth: true, seriesLayoutBy: 'row'})
}
optionMap.series.push(
{
type: 'pie',
@ -401,8 +406,7 @@
tooltip: '8月'
}
}
)
console.log(optionMap)
);
optionRecords = {
title: {
text: '入库仓库-报表图'
@ -476,25 +480,25 @@
form.on('submit(thisWeek)', function () {
$.ajax({
url:'/repository/layui/echart_back?type=1',
type:'get',
async:true,
url: '/repository/layui/echart_back_thisWeek?type=1',
type: 'get',
async: true,
dataType: "json",
complete:function (XHR,TS){
if(XHR.status != 200){
complete: function (XHR, TS) {
if (XHR.status != 200) {
layer.alert("系统繁忙,稍后重试");
}
},
success:function (result){
success: function (result) {
echartsRecords.setOption(optionRecords);
// 折线图
var optionRecordsSeries=[];
var optionRecordsSeries = [];
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.data[result.data.depository_name[i]],
data: result.data.depository_data.data[result.data.depository_name[i]],
areaStyle: {}
});
}
@ -546,25 +550,25 @@
form.on('submit(lastWeek)', function () {
$.ajax({
url:'/repository/layui/echart_back?type=1&last=1',
type:'get',
async:true,
url: '/repository/layui/echart_back_lastWeek?type=1',
type: 'get',
async: true,
dataType: "json",
complete:function (XHR,TS){
if(XHR.status != 200){
complete: function (XHR, TS) {
if (XHR.status !== 200) {
layer.alert("系统繁忙,稍后重试");
}
},
success:function (result){
success: function (result) {
echartsRecords.setOption(optionRecords);
// 折线图
var optionRecordsSeries=[];
var optionRecordsSeries = [];
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.data[result.data.depository_name[i]],
data: result.data.depository_data.data[result.data.depository_name[i]],
areaStyle: {}
});
}

94
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
}
</style>
@ -114,7 +117,7 @@
<button class="layui-btn" lay-submit lay-filter="thisWeek">
&emsp;本周&emsp;
</button>
<button class="layui-btn" lay-submit lay-filter="lastWeek" >
<button class="layui-btn" lay-submit lay-filter="lastWeek">
&emsp;上周&emsp;
</button>
<div id="echarts-records" style="background-color:#ffffff;min-height:400px;padding: 10px"></div>
@ -260,8 +263,7 @@
tooltip: {},
dataset: {
dimensions: [],
source: [
]
source: []
},
xAxis: {type: 'category'},
yAxis: {},
@ -284,8 +286,7 @@
showContent: false
},
dataset: {
source: [
]
source: []
},
xAxis: {type: 'category'},
yAxis: {gridIndex: 0},
@ -312,17 +313,21 @@
//动态加载相关数据
$.ajax({
url:'/repository/layui/echart_back?type=2',
type:'get',
async:true,
url: '/repository/layui/echart_back?type=2',
type: 'get',
async: true,
dataType: "json",
complete:function (XHR,TS){
if(XHR.status != 200){
complete: function (XHR, TS) {
if (XHR.status !== 200) {
layer.alert("系统繁忙,稍后重试");
}
},
success:function (result){
if(result.code == 0){
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) {
layer.close(this.layerIndex);
if (result.code === 0) {
echartsRecords.setOption(optionRecords);
echartsPies.setOption(optionPies);
echartsDataset.setOption(optionDataset);
@ -330,7 +335,7 @@
console.log(result)
// 折线图
var optionRecordsSeries=[];
var optionRecordsSeries = [];
// 饼状图
var optionPiesSeries = {
name: '昨日占比',
@ -345,28 +350,29 @@
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
},
data:[]
data: []
}
// 柱状图
optionDataset = {
legend: {},
tooltip: {},
dataset: {
dimensions:[],
source:[]
dimensions: [],
source: []
},
series:[]
series: []
};
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.data[result.data.depository_name[i]],
data: result.data.depository_data.data[result.data.depository_name[i]],
areaStyle: {}
});
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]
@ -375,10 +381,10 @@
optionDataset.dataset.source.push(result.data.depository_data.sourceList[i])
}
for (let i = 0; i < dimensions.length - 1; i++) {
optionDataset.series.push({type:'bar'})
optionDataset.series.push({type: 'bar'})
}
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.series.push({type: 'line', smooth: true, seriesLayoutBy: 'row'})
@ -402,7 +408,6 @@
)
optionRecords = {
title: {
text: '出库仓库-报表图'
@ -475,28 +480,27 @@
}
form.on('submit(thisWeek)', function () {
$.ajax({
url:'/repository/layui/echart_back?type=2',
type:'get',
async:true,
url: '/repository/layui/echart_back?type=2',
type: 'get',
async: true,
dataType: "json",
complete:function (XHR,TS){
if(XHR.status != 200){
complete: function (XHR, TS) {
if (XHR.status != 200) {
layer.alert("系统繁忙,稍后重试");
}
},
success:function (result){
success: function (result) {
echartsRecords.setOption(optionRecords);
// 折线图
var optionRecordsSeries=[];
var optionRecordsSeries = [];
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.data[result.data.depository_name[i]],
data: result.data.depository_data.data[result.data.depository_name[i]],
areaStyle: {}
});
}
@ -548,25 +552,25 @@
form.on('submit(lastWeek)', function () {
$.ajax({
url:'/repository/layui/echart_back?type=2&last=1',
type:'get',
async:true,
url: '/repository/layui/echart_back?type=2&last=1',
type: 'get',
async: true,
dataType: "json",
complete:function (XHR,TS){
if(XHR.status != 200){
complete: function (XHR, TS) {
if (XHR.status != 200) {
layer.alert("系统繁忙,稍后重试");
}
},
success:function (result){
success: function (result) {
echartsRecords.setOption(optionRecords);
// 折线图
var optionRecordsSeries=[];
var optionRecordsSeries = [];
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.data[result.data.depository_name[i]],
data: result.data.depository_data.data[result.data.depository_name[i]],
areaStyle: {}
});
}

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.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")));
}

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

@ -124,6 +124,7 @@
<if test="code != null and code != '' ">
and code = #{code}
</if>
and depository_id is null
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
@ -165,6 +166,38 @@
</if>
</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
@ -176,6 +209,13 @@
#{item}
</foreach>
</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" />
from materialandplace mp left join place p on p.id = mp.pid
where 1 = 1
<if test="did != null and did != ''">
and p.did = #{did}
</if>
<if test="mid != null and mid != ''">
and mp.mid = #{mid}
</if>
<if test="did != null and did != ''">
and ( p.did = #{did} or p.did = 0)
</if>
</select>
<!-- 根据条件参数查询列表 -->

2
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;
}

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>
layui.use(['jquery', 'layer', 'miniAdmin','miniTongji'], function () {
var $ = layui.jquery,
layer = layui.layer,
@ -158,17 +159,7 @@
$("#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 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 === "部门负责人审核未通过") {
// , {title: "未入库"}
states = [ {title: state}];
number = 2;
} else {
// {title: "提交申请"},
states = [ {title: state}];
number = 3;
}

120
target/classes/templates/pages/chart/chart-in_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
}
</style>
@ -44,8 +47,8 @@
<span th:text="${allInCount}"></span>
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br>
比七日 <a style="color: #bd3004">▼0.06</a>
<!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
<!-- 比七日 <a style="color: #bd3004">▼0.06</a>-->
</div>
</div>
</div>
@ -62,8 +65,8 @@
<span th:text="${allInPrice}"></span>
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br>
比七日 <a style="color: #bd3004">▼0.06</a>
<!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
<!-- 比七日 <a style="color: #bd3004">▼0.06</a>-->
</div>
</div>
</div>
@ -80,8 +83,8 @@
<span th:text="${InCount}"></span>
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br>
比七日 <a style="color: #bd3004">▼0.06</a>
<!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
<!-- 比七日 <a style="color: #bd3004">▼0.06</a>-->
</div>
</div>
</div>
@ -98,8 +101,8 @@
<span th:text="${InPrice}"></span>
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br>
比七日 <a style="color: #bd3004">▼0.06</a>
<!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
<!-- 比七日 <a style="color: #bd3004">▼0.06</a>-->
</div>
</div>
</div>
@ -114,7 +117,7 @@
<button class="layui-btn" lay-submit lay-filter="thisWeek">
&emsp;本周&emsp;
</button>
<button class="layui-btn" lay-submit lay-filter="lastWeek" >
<button class="layui-btn" lay-submit lay-filter="lastWeek">
&emsp;上周&emsp;
</button>
<div id="echarts-records" style="background-color:#ffffff;min-height:400px;padding: 10px">
@ -261,8 +264,7 @@
tooltip: {},
dataset: {
dimensions: [],
source: [
]
source: []
},
xAxis: {type: 'category'},
yAxis: {},
@ -285,8 +287,7 @@
showContent: false
},
dataset: {
source: [
]
source: []
},
xAxis: {type: 'category'},
yAxis: {gridIndex: 0},
@ -313,25 +314,27 @@
//动态加载相关数据
$.ajax({
url:'/repository/layui/echart_back?type=1',
type:'get',
async:true,
url: '/repository/layui/echart_back?type=1',
type: 'get',
async: true,
dataType: "json",
complete:function (XHR,TS){
if(XHR.status != 200){
complete: function (XHR, TS) {
if (XHR.status !== 200) {
layer.alert("系统繁忙,稍后重试");
}
},
success:function (result){
if(result.code == 0){
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) {
layer.close(this.layerIndex);
if (result.code === 0) {
echartsRecords.setOption(optionRecords);
echartsPies.setOption(optionPies);
echartsDataset.setOption(optionDataset);
echartsMap.setOption(optionMap);
console.log(result)
// 折线图
var optionRecordsSeries=[];
var optionRecordsSeries = [];
// 饼状图
var optionPiesSeries = {
name: '昨日占比',
@ -346,46 +349,48 @@
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
},
data:[]
}
data: []
};
// 柱状图
optionDataset = {
legend: {},
tooltip: {},
dataset: {
dimensions:[],
source:[]
dimensions: [],
source: []
},
xAxis: {type: 'category'},
yAxis: {},
series:[]
series: []
};
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.data[result.data.depository_name[i]],
data: result.data.depository_data.data[result.data.depository_name[i]],
areaStyle: {}
});
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]
optionDataset.dataset.dimensions = dimensions
optionDataset.dataset.dimensions = dimensions;
for (let i = result.data.depository_data.sourceList.length - 2; i >= 0; i--) {
optionDataset.dataset.source.push(result.data.depository_data.sourceList[i])
}
for (let i = 0; i < dimensions.length - 1; i++) {
optionDataset.series.push({type:'bar'})
optionDataset.series.push({type: 'bar'})
}
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.series.push({type: 'line', smooth: true, seriesLayoutBy: 'row'})
}
optionMap.series.push(
{
type: 'pie',
@ -401,8 +406,7 @@
tooltip: '8月'
}
}
)
console.log(optionMap)
);
optionRecords = {
title: {
text: '入库仓库-报表图'
@ -476,25 +480,25 @@
form.on('submit(thisWeek)', function () {
$.ajax({
url:'/repository/layui/echart_back?type=1',
type:'get',
async:true,
url: '/repository/layui/echart_back_thisWeek?type=1',
type: 'get',
async: true,
dataType: "json",
complete:function (XHR,TS){
if(XHR.status != 200){
complete: function (XHR, TS) {
if (XHR.status != 200) {
layer.alert("系统繁忙,稍后重试");
}
},
success:function (result){
success: function (result) {
echartsRecords.setOption(optionRecords);
// 折线图
var optionRecordsSeries=[];
var optionRecordsSeries = [];
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.data[result.data.depository_name[i]],
data: result.data.depository_data.data[result.data.depository_name[i]],
areaStyle: {}
});
}
@ -546,25 +550,25 @@
form.on('submit(lastWeek)', function () {
$.ajax({
url:'/repository/layui/echart_back?type=1&last=1',
type:'get',
async:true,
url: '/repository/layui/echart_back_lastWeek?type=1',
type: 'get',
async: true,
dataType: "json",
complete:function (XHR,TS){
if(XHR.status != 200){
complete: function (XHR, TS) {
if (XHR.status !== 200) {
layer.alert("系统繁忙,稍后重试");
}
},
success:function (result){
success: function (result) {
echartsRecords.setOption(optionRecords);
// 折线图
var optionRecordsSeries=[];
var optionRecordsSeries = [];
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.data[result.data.depository_name[i]],
data: result.data.depository_data.data[result.data.depository_name[i]],
areaStyle: {}
});
}

94
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
}
</style>
@ -114,7 +117,7 @@
<button class="layui-btn" lay-submit lay-filter="thisWeek">
&emsp;本周&emsp;
</button>
<button class="layui-btn" lay-submit lay-filter="lastWeek" >
<button class="layui-btn" lay-submit lay-filter="lastWeek">
&emsp;上周&emsp;
</button>
<div id="echarts-records" style="background-color:#ffffff;min-height:400px;padding: 10px"></div>
@ -260,8 +263,7 @@
tooltip: {},
dataset: {
dimensions: [],
source: [
]
source: []
},
xAxis: {type: 'category'},
yAxis: {},
@ -284,8 +286,7 @@
showContent: false
},
dataset: {
source: [
]
source: []
},
xAxis: {type: 'category'},
yAxis: {gridIndex: 0},
@ -312,17 +313,21 @@
//动态加载相关数据
$.ajax({
url:'/repository/layui/echart_back?type=2',
type:'get',
async:true,
url: '/repository/layui/echart_back?type=2',
type: 'get',
async: true,
dataType: "json",
complete:function (XHR,TS){
if(XHR.status != 200){
complete: function (XHR, TS) {
if (XHR.status !== 200) {
layer.alert("系统繁忙,稍后重试");
}
},
success:function (result){
if(result.code == 0){
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) {
layer.close(this.layerIndex);
if (result.code === 0) {
echartsRecords.setOption(optionRecords);
echartsPies.setOption(optionPies);
echartsDataset.setOption(optionDataset);
@ -330,7 +335,7 @@
console.log(result)
// 折线图
var optionRecordsSeries=[];
var optionRecordsSeries = [];
// 饼状图
var optionPiesSeries = {
name: '昨日占比',
@ -345,28 +350,29 @@
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
},
data:[]
data: []
}
// 柱状图
optionDataset = {
legend: {},
tooltip: {},
dataset: {
dimensions:[],
source:[]
dimensions: [],
source: []
},
series:[]
series: []
};
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.data[result.data.depository_name[i]],
data: result.data.depository_data.data[result.data.depository_name[i]],
areaStyle: {}
});
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]
@ -375,10 +381,10 @@
optionDataset.dataset.source.push(result.data.depository_data.sourceList[i])
}
for (let i = 0; i < dimensions.length - 1; i++) {
optionDataset.series.push({type:'bar'})
optionDataset.series.push({type: 'bar'})
}
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.series.push({type: 'line', smooth: true, seriesLayoutBy: 'row'})
@ -402,7 +408,6 @@
)
optionRecords = {
title: {
text: '出库仓库-报表图'
@ -475,28 +480,27 @@
}
form.on('submit(thisWeek)', function () {
$.ajax({
url:'/repository/layui/echart_back?type=2',
type:'get',
async:true,
url: '/repository/layui/echart_back?type=2',
type: 'get',
async: true,
dataType: "json",
complete:function (XHR,TS){
if(XHR.status != 200){
complete: function (XHR, TS) {
if (XHR.status != 200) {
layer.alert("系统繁忙,稍后重试");
}
},
success:function (result){
success: function (result) {
echartsRecords.setOption(optionRecords);
// 折线图
var optionRecordsSeries=[];
var optionRecordsSeries = [];
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.data[result.data.depository_name[i]],
data: result.data.depository_data.data[result.data.depository_name[i]],
areaStyle: {}
});
}
@ -548,25 +552,25 @@
form.on('submit(lastWeek)', function () {
$.ajax({
url:'/repository/layui/echart_back?type=2&last=1',
type:'get',
async:true,
url: '/repository/layui/echart_back?type=2&last=1',
type: 'get',
async: true,
dataType: "json",
complete:function (XHR,TS){
if(XHR.status != 200){
complete: function (XHR, TS) {
if (XHR.status != 200) {
layer.alert("系统繁忙,稍后重试");
}
},
success:function (result){
success: function (result) {
echartsRecords.setOption(optionRecords);
// 折线图
var optionRecordsSeries=[];
var optionRecordsSeries = [];
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.data[result.data.depository_name[i]],
data: result.data.depository_data.data[result.data.depository_name[i]],
areaStyle: {}
});
}

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