Browse Source

导出图片时可以导出该仓库下所有库位图片

lwx_dev
erdanergou 3 years ago
parent
commit
f95a3cf288
  1. 475
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java
  2. 45
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java
  3. 6
      src/main/java/com/dreamchaser/depository_manage/controller/DownLoadFileController.java
  4. 1
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  5. 40
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  6. 32
      src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java
  7. 91
      src/main/java/com/dreamchaser/depository_manage/controller/UserController.java
  8. 5
      src/main/java/com/dreamchaser/depository_manage/entity/Inventory.java
  9. 5
      src/main/java/com/dreamchaser/depository_manage/entity/MaterialAndPlace.java
  10. 6
      src/main/java/com/dreamchaser/depository_manage/entity/Place.java
  11. 7
      src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.java
  12. 13
      src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.xml
  13. 24
      src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml
  14. 80
      src/main/java/com/dreamchaser/depository_manage/mapper/RoleMapper.java
  15. 118
      src/main/java/com/dreamchaser/depository_manage/mapper/RoleMapper.xml
  16. 6
      src/main/java/com/dreamchaser/depository_manage/pojo/InventoryP.java
  17. 5
      src/main/java/com/dreamchaser/depository_manage/pojo/MaterialAndPlaceForView.java
  18. 6
      src/main/java/com/dreamchaser/depository_manage/pojo/PlaceP.java
  19. 52
      src/main/java/com/dreamchaser/depository_manage/pojo/RestResponse.java
  20. 51
      src/main/java/com/dreamchaser/depository_manage/pojo/RoleAndMaterialType.java
  21. 6
      src/main/java/com/dreamchaser/depository_manage/pojo/UserByPortP.java
  22. 8
      src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java
  23. 80
      src/main/java/com/dreamchaser/depository_manage/service/RoleService.java
  24. 13
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
  25. 22
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java
  26. 28
      src/main/java/com/dreamchaser/depository_manage/service/impl/GroupServiceImpl.java
  27. 13
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  28. 20
      src/main/java/com/dreamchaser/depository_manage/service/impl/PlaceServiceImpl.java
  29. 162
      src/main/java/com/dreamchaser/depository_manage/service/impl/RoleServiceImpl.java
  30. 10
      src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java
  31. 115
      src/main/java/com/dreamchaser/depository_manage/utils/ZipMultiFileUtil.java
  32. 2
      src/main/resources/templates/pages/company/company-out.html
  33. 2
      src/main/resources/templates/pages/company/companyByParentId.html
  34. 193
      src/main/resources/templates/pages/constructionunit/constructionunit_add.html
  35. 26
      src/main/resources/templates/pages/depository/table-in.html
  36. 9
      src/main/resources/templates/pages/depository/table-stock.html
  37. 3
      src/main/resources/templates/pages/material/material-add.html
  38. 37
      src/main/resources/templates/pages/material/material-out.html
  39. 2
      src/main/resources/templates/pages/post/post-out.html
  40. 2
      src/main/resources/templates/pages/post/postRole.html
  41. 2
      src/main/resources/templates/pages/user/table-user.html
  42. 111
      src/main/resources/templates/pages/user/user-addForIn.html
  43. 112
      src/main/resources/templates/pages/user/user-role-editForIn.html
  44. 2
      src/main/resources/templates/pages/user/userRole.html
  45. 26
      src/main/resources/templates/pages/user/userRoleForIn.html
  46. 42
      src/main/resources/templates/pages/warehouse/depository-out.html
  47. 2
      src/main/resources/templates/pages/warehouse/manager.html
  48. 38
      src/main/resources/templates/pages/warehouse/warehouseByParentId.html
  49. 73
      src/main/resources/templates/pages/warehouse/warehouse_view.html
  50. 63
      src/test/java/com/dreamchaser/depository_manage/TestForOther.java
  51. 13
      target/classes/com/dreamchaser/depository_manage/mapper/DepositoryMapper.xml
  52. 24
      target/classes/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml
  53. 118
      target/classes/com/dreamchaser/depository_manage/mapper/RoleMapper.xml
  54. 2
      target/classes/templates/pages/company/company-out.html
  55. 2
      target/classes/templates/pages/company/companyByParentId.html
  56. 26
      target/classes/templates/pages/depository/table-in.html
  57. 9
      target/classes/templates/pages/depository/table-stock.html
  58. 3
      target/classes/templates/pages/material/material-add.html
  59. 37
      target/classes/templates/pages/material/material-out.html
  60. 2
      target/classes/templates/pages/post/post-out.html
  61. 2
      target/classes/templates/pages/post/postRole.html
  62. 2
      target/classes/templates/pages/user/table-user.html
  63. 2
      target/classes/templates/pages/user/userRole.html
  64. 28
      target/classes/templates/pages/user/userRoleForIn.html
  65. 42
      target/classes/templates/pages/warehouse/depository-out.html
  66. 2
      target/classes/templates/pages/warehouse/manager.html
  67. 38
      target/classes/templates/pages/warehouse/warehouseByParentId.html
  68. 73
      target/classes/templates/pages/warehouse/warehouse_view.html

475
src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java

@ -12,6 +12,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
@ -42,6 +44,10 @@ public class DepositoryController {
@Autowired @Autowired
StockTakingService stockTakingService; StockTakingService stockTakingService;
@Autowired
PlaceService placeService;
/** /**
* 获取本月之前的月份 * 获取本月之前的月份
* *
@ -310,6 +316,7 @@ public class DepositoryController {
/** /**
* 获取当前仓库下的库存 * 获取当前仓库下的库存
*
* @param dname * @param dname
* @param list * @param list
* @return * @return
@ -949,8 +956,7 @@ public class DepositoryController {
drCountbyDrName.add(depositoryRecordByDate1); drCountbyDrName.add(depositoryRecordByDate1);
show_data.put(key.toString(), ((ArrayList<Integer>) drCountbyDrName).clone()); show_data.put(key.toString(), ((ArrayList<Integer>) drCountbyDrName).clone());
} }
} } else {
else {
Future<Object> future = completionService.submit(new distributeTasks(type, 1, userByPort, yesterdayData, depositoryName)); Future<Object> future = completionService.submit(new distributeTasks(type, 1, userByPort, yesterdayData, depositoryName));
futureList.add(future); futureList.add(future);
taskNum += 1; taskNum += 1;
@ -1039,8 +1045,7 @@ public class DepositoryController {
depository_data.put("sourceListByMonth", beforeInventoryByMonth); depository_data.put("sourceListByMonth", beforeInventoryByMonth);
depository_data.put("ThisWeekInventory", thisWeekInventoryByDName); depository_data.put("ThisWeekInventory", thisWeekInventoryByDName);
depository_data.put("MapInventory", beforeInventoryOnMap); depository_data.put("MapInventory", beforeInventoryOnMap);
} } else {
else {
// 如果不是 // 如果不是
depository_data.put("yesterdayData", yesterdayData); depository_data.put("yesterdayData", yesterdayData);
depository_data.put("mapData", mapData); depository_data.put("mapData", mapData);
@ -1058,60 +1063,6 @@ public class DepositoryController {
return resMap; return resMap;
} }
// 用于分发任务
@Data
class distributeTasks implements Callable<Object>{
String type; //请求类型
int taskType; // 任务类型
UserByPort userByPort; // 登录用户
Map<String,Integer> yesterdayData; // 昨天的数据
List<String> depositoryName; // 仓库名称
DepositoryService depositoryService; // 操作depository的service
DepositoryRecordService depositoryRecordService; // 操作订单的service
Map<String, Object> todayInventory; // 当前仓库的额度
distributeTasks(String type ,int taskType,UserByPort userByPort,Map<String,Integer> yesterdayData,List<String> depositoryName){
this.taskType = taskType; // 任务类型
this.type = type; // 请求类型
this.userByPort = userByPort; // 登录用户
this.yesterdayData = yesterdayData; // 昨天的数据
this.depositoryName = depositoryName; // 仓库名称
}
@Override
public Object call() throws Exception {
// taskType 1为折线图2为饼图3为柱状图4为中国地图5为库存可视化中的折线图6为库存可视化中中国地图7为库存可视化中柱状图
Map<String,Object> result = new HashMap<>();
if(1 == taskType){
Map<String, Object> showData = getShowData(type, userByPort, yesterdayData,depositoryName);
result.put("show_data",showData);
}else if(2 == taskType){
}else if(3 == taskType){
List<Object> sourceList = getSourceList(type);
result.put("sourceList",sourceList);
}else if(4 == taskType){
Map<String, Object> mapData = getMapData(type);
result.put("mapData",mapData);
}else if(5 == taskType){
List<Object> beforeInventoryByMonth = getBeforeInventoryByMonth(depositoryService, todayInventory,depositoryRecordService, userByPort);
result.put("sourceListByMonth",beforeInventoryByMonth);
}else if(6 == taskType){
Map<String, Object> thisWeekInventoryByDName = getThisWeekInventoryByDName(depositoryService, depositoryRecordService, userByPort);
result.put("ThisWeekInventory",thisWeekInventoryByDName);
}else if(7 == taskType){
Map<String, Object> beforeInventoryOnMap = getBeforeInventoryOnMap(depositoryService, depositoryRecordService, userByPort);
result.put("MapInventory",beforeInventoryOnMap);
}
return result;
}
}
// 用于获取折线图
public Map<String, Object> getShowData(String type, UserByPort userByPort, Map<String, Integer> yesterdayData, List<String> depositoryName) { public Map<String, Object> getShowData(String type, UserByPort userByPort, Map<String, Integer> yesterdayData, List<String> depositoryName) {
// 获取各仓库名称以及id // 获取各仓库名称以及id
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(userByPort); Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(userByPort);
@ -1166,43 +1117,9 @@ public class DepositoryController {
return show_data; return show_data;
} }
@Data
class getApplicationRecordByDate implements Callable<Object>{
Object key;
List<Long> days;
Map<String, Integer> depositoryAllNameAndId;
List<String> depositoryName;
Map<String,Integer> yesterdayData;
String type;
Map<String, Object> show_data;
getApplicationRecordByDate(String type,Object key,List<Long> days,Map<String, Integer> depositoryAllNameAndId ){
this.key = key;
this.depositoryAllNameAndId = depositoryAllNameAndId;
this.days = days;
this.type = type;
}
@Override // 用于获取折线图
public Object call() throws Exception {
int i;
List<Integer> drCountbyDrName = new ArrayList<>();
for (i = days.size() - 1; i > 0; i--) {
// 遍历 Map并计算各仓库的入库数
if (i == days.size() - 1) {
depositoryName.add(key.toString());
}
Integer val = (Integer) depositoryAllNameAndId.get(key);
// 获取一段时间内的库存额度
Integer depositoryRecordByDate1 = depositoryRecordService.findApplicationRecordByDate(days.get(i - 1), days.get(i), Integer.parseInt(type), val);
drCountbyDrName.add(depositoryRecordByDate1);
if (i == 2) {
yesterdayData.put(key.toString(), depositoryRecordByDate1);
}
}
show_data.put(key.toString(),drCountbyDrName);
return null;
}
}
//获取本月及之前月份各种类别入/出库总量 //获取本月及之前月份各种类别入/出库总量
public List<Object> getSourceList(String type) { public List<Object> getSourceList(String type) {
@ -1237,82 +1154,6 @@ public class DepositoryController {
return sourceList; return sourceList;
} }
// 具体执行getSourceList逻辑
class getSourceListTask implements Callable<Object> {
String type;
String start;
String end;
Map<String,Object> map;
getSourceListTask(Map<String,Object> map, String type, String start, String end){
this.map = map;
this.type = type;
this.start = start;
this.end = end;
}
@Override
public Object call() throws Exception {
List<MaterialType> materialTypeAll = materialTypeService.findMaterialTypeNoParent();
ExecutorService exs = Executors.newFixedThreadPool(materialTypeAll.size());
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
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",start);
parm.put("end", end);
parm.put("oldId", materialTypeAll.get(j).getOldId());
//根据条件获取月份中物料的总额
// 测试
Future<Object> future = completionService.submit(new findMaterialCountTaskForSourceList(parm));
futureList.add(future);
}
for (int i = 0; i < materialTypeAll.size(); i++) {
Object result = null;
try {
result = completionService.take().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
map.putAll((Map<? extends String, ?>) result);
}
return map;
}
}
// 根据条件获取月份中物料的总额用于sourcelist
class findMaterialCountTaskForSourceList implements Callable<Object> {
Map<String,Object> map;
findMaterialCountTaskForSourceList(Map<String,Object> map){
this.map = map;
}
@Override
public Object call() throws Exception {
Map<String,Object> result = new HashMap<>();
Integer materialCountByMonth1 = depositoryRecordService.findMaterialCountByMonth2(map);
Long oldId = Long.valueOf(map.get("oldId").toString());
MaterialType materialTypeByOldId = materialTypeService.findMaterialTypeByOldId(oldId);
result.put(materialTypeByOldId.getTname(),materialCountByMonth1);
return result;
}
}
// 中国地图数据 // 中国地图数据
public Map<String, Object> getMapData(String type) { public Map<String, Object> getMapData(String type) {
List<Object> mapDataList = new ArrayList<>(); List<Object> mapDataList = new ArrayList<>();
@ -1353,42 +1194,6 @@ public class DepositoryController {
return mapData; return mapData;
} }
class findMapData implements Callable<Object>{
String type ;
MaterialType mt;
Map<String, Object> previousMonth1;
findMapData( Map<String, Object> previousMonth1,String type ,MaterialType mt){
this.previousMonth1 = previousMonth1;
this.type = type;
this.mt = mt;
}
@Override
public Object call() throws Exception {
List<Object> productData = new ArrayList<>();
List<Object> months1 = (List<Object>) previousMonth1.get("months");
productData.add(mt.getTname());
for (int j = months1.size() - 1; j > 0; 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", months1.get(j));
parm.put("end", months1.get(j - 1));
parm.put("oldId", mt.getOldId());
//根据条件获取月份中物料的总额
// 测试
Integer materialCountByMonth1 = depositoryRecordService.findMaterialCountByMonth2(parm);
productData.add(materialCountByMonth1);
}
return productData;
}
}
/** /**
* 根据物料编号查询所在仓库 * 根据物料编号查询所在仓库
* *
@ -1420,7 +1225,6 @@ public class DepositoryController {
return null; return null;
} }
/** /**
* 查找仓库内是否有物品 * 查找仓库内是否有物品
* *
@ -1487,6 +1291,7 @@ public class DepositoryController {
/** /**
* 根据父级编号查询所有关联信息 * 根据父级编号查询所有关联信息
*
* @param did 待查询仓库 * @param did 待查询仓库
* @return * @return
*/ */
@ -1529,6 +1334,7 @@ public class DepositoryController {
/** /**
* 根据仓库编号查询与其有关的订单信息 * 根据仓库编号查询与其有关的订单信息
*
* @param depositoryId 待查询仓库id * @param depositoryId 待查询仓库id
* @return * @return
*/ */
@ -1543,6 +1349,7 @@ public class DepositoryController {
/** /**
* 查询当前仓库子仓库 * 查询当前仓库子仓库
*
* @param parentId * @param parentId
* @return * @return
*/ */
@ -1561,6 +1368,7 @@ public class DepositoryController {
/** /**
* 查询当前仓库的管理员 * 查询当前仓库的管理员
*
* @param did 待查询仓库 * @param did 待查询仓库
* @param request * @param request
* @return * @return
@ -1583,7 +1391,6 @@ public class DepositoryController {
return new RestResponse(list, size, 200); return new RestResponse(list, size, 200);
} }
@GetMapping("/findPostByCompany") @GetMapping("/findPostByCompany")
public RestResponse findPostByCompany(@RequestParam("company") String company, HttpServletRequest request) { public RestResponse findPostByCompany(@RequestParam("company") String company, HttpServletRequest request) {
String token = request.getHeader("user-token"); String token = request.getHeader("user-token");
@ -1630,7 +1437,6 @@ public class DepositoryController {
return new RestResponse(depositoryRecordById); return new RestResponse(depositoryRecordById);
} }
@GetMapping("/findDepositoryCountInfo") @GetMapping("/findDepositoryCountInfo")
public RestResponse findDepositoryCountInfo(HttpServletRequest request) { public RestResponse findDepositoryCountInfo(HttpServletRequest request) {
// 获取当前登录的用户 // 获取当前登录的用户
@ -1664,26 +1470,14 @@ public class DepositoryController {
return new RestResponse(result); return new RestResponse(result);
} }
// 构造仓库二维码 // 构造仓库二维码
@PostMapping("/createQrCode") @PostMapping("/createQrCode")
public RestResponse createQrCode(@RequestBody Map<String, Object> map) { public RestResponse createQrCode(@RequestBody Map<String, Object> map) {
// 通过雪花算法计算随机数
Snowflake snowflake = new Snowflake(10, 10, true);
String qrCode = snowflake.nextIdStr();
Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId")); Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId"));
Depository depository = depositoryService.findDepositoryById(depositoryId); Depository depository = depositoryService.findDepositoryById(depositoryId);
String qrCodeByDepository = depositoryService.findQrCodeByDepository(depository.getId()); String qrCode = depositoryService.findQrCodeByDepository(depository.getId());
if (qrCodeByDepository == null) {
Map<String, Object> param = new HashMap<>();
param.put("depositoryId", depository.getId());
param.put("qrCode", qrCode);
depositoryService.addQrCodeByDepository(param);
} else {
qrCode = qrCodeByDepository;
}
try { try {
// 二维码保存信息 // 二维码保存信息
return RestResponse.CreateBarCode(qrCode, depository.getDname()); return RestResponse.CreateBarCode(qrCode, depository.getDname());
@ -1692,9 +1486,41 @@ public class DepositoryController {
} }
} }
@GetMapping("/allBarCodeImgForDepository")
public void allBarCodeImgForDepository(@RequestParam Map<String, Object> map, HttpServletRequest request, HttpServletResponse response) {
// 获取当前仓库id
Integer id = ObjectFormatUtil.toInteger(map.get("id"));
// 获取当前仓库
Depository depository = depositoryService.findDepositoryById(id);
List<Place> placeByDid = placeService.findPlaceByDid(depository.getId());
List<File> qrCodeListForPlaces = new ArrayList<>();
for (Place place : placeByDid
) {
String qrCodeByDepository = placeService.findQrCodeByPlace(place.getId());
String qrCode = CreateQrCodeUtil.CreateBarCode128(qrCodeByDepository, depository.getDname() + "-" + place.getCode(), 60, 200);
try {
File file = RestResponse.base64ToFile(qrCode);
qrCodeListForPlaces.add(file);
} catch (Exception e) {
e.printStackTrace();
}
}
// 将其暂存到本地
String qrCodeByDepository = depositoryService.findQrCodeByDepository(depository.getId());
String qrCode = CreateQrCodeUtil.CreateBarCode128(qrCodeByDepository, depository.getDname(), 60, 200);
try {
File file = RestResponse.base64ToFile(qrCode);
qrCodeListForPlaces.add(file);
} catch (Exception e) {
e.printStackTrace();
}
ZipMultiFileUtil.zipDownload(response, depository.getDname() + "图片.zip", qrCodeListForPlaces);
}
/** /**
* 用于获取当前仓库的所有子类 * 用于获取当前仓库的所有子类
*
* @param d 待查询仓库 * @param d 待查询仓库
* @return * @return
*/ */
@ -1731,4 +1557,207 @@ public class DepositoryController {
} }
return false; return false;
} }
// 用于分发任务
@Data
class distributeTasks implements Callable<Object> {
String type; //请求类型
int taskType; // 任务类型
UserByPort userByPort; // 登录用户
Map<String, Integer> yesterdayData; // 昨天的数据
List<String> depositoryName; // 仓库名称
DepositoryService depositoryService; // 操作depository的service
DepositoryRecordService depositoryRecordService; // 操作订单的service
Map<String, Object> todayInventory; // 当前仓库的额度
distributeTasks(String type, int taskType, UserByPort userByPort, Map<String, Integer> yesterdayData, List<String> depositoryName) {
this.taskType = taskType; // 任务类型
this.type = type; // 请求类型
this.userByPort = userByPort; // 登录用户
this.yesterdayData = yesterdayData; // 昨天的数据
this.depositoryName = depositoryName; // 仓库名称
}
@Override
public Object call() throws Exception {
// taskType 1为折线图2为饼图3为柱状图4为中国地图5为库存可视化中的折线图6为库存可视化中中国地图7为库存可视化中柱状图
Map<String, Object> result = new HashMap<>();
if (1 == taskType) {
Map<String, Object> showData = getShowData(type, userByPort, yesterdayData, depositoryName);
result.put("show_data", showData);
} else if (2 == taskType) {
} else if (3 == taskType) {
List<Object> sourceList = getSourceList(type);
result.put("sourceList", sourceList);
} else if (4 == taskType) {
Map<String, Object> mapData = getMapData(type);
result.put("mapData", mapData);
} else if (5 == taskType) {
List<Object> beforeInventoryByMonth = getBeforeInventoryByMonth(depositoryService, todayInventory, depositoryRecordService, userByPort);
result.put("sourceListByMonth", beforeInventoryByMonth);
} else if (6 == taskType) {
Map<String, Object> thisWeekInventoryByDName = getThisWeekInventoryByDName(depositoryService, depositoryRecordService, userByPort);
result.put("ThisWeekInventory", thisWeekInventoryByDName);
} else if (7 == taskType) {
Map<String, Object> beforeInventoryOnMap = getBeforeInventoryOnMap(depositoryService, depositoryRecordService, userByPort);
result.put("MapInventory", beforeInventoryOnMap);
}
return result;
}
}
@Data
class getApplicationRecordByDate implements Callable<Object> {
Object key;
List<Long> days;
Map<String, Integer> depositoryAllNameAndId;
List<String> depositoryName;
Map<String, Integer> yesterdayData;
String type;
Map<String, Object> show_data;
getApplicationRecordByDate(String type, Object key, List<Long> days, Map<String, Integer> depositoryAllNameAndId) {
this.key = key;
this.depositoryAllNameAndId = depositoryAllNameAndId;
this.days = days;
this.type = type;
}
@Override
public Object call() throws Exception {
int i;
List<Integer> drCountbyDrName = new ArrayList<>();
for (i = days.size() - 1; i > 0; i--) {
// 遍历 Map并计算各仓库的入库数
if (i == days.size() - 1) {
depositoryName.add(key.toString());
}
Integer val = (Integer) depositoryAllNameAndId.get(key);
// 获取一段时间内的库存额度
Integer depositoryRecordByDate1 = depositoryRecordService.findApplicationRecordByDate(days.get(i - 1), days.get(i), Integer.parseInt(type), val);
drCountbyDrName.add(depositoryRecordByDate1);
if (i == 2) {
yesterdayData.put(key.toString(), depositoryRecordByDate1);
}
}
show_data.put(key.toString(), drCountbyDrName);
return null;
}
}
// 具体执行getSourceList逻辑
class getSourceListTask implements Callable<Object> {
String type;
String start;
String end;
Map<String, Object> map;
getSourceListTask(Map<String, Object> map, String type, String start, String end) {
this.map = map;
this.type = type;
this.start = start;
this.end = end;
}
@Override
public Object call() throws Exception {
List<MaterialType> materialTypeAll = materialTypeService.findMaterialTypeNoParent();
ExecutorService exs = Executors.newFixedThreadPool(materialTypeAll.size());
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
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", start);
parm.put("end", end);
parm.put("oldId", materialTypeAll.get(j).getOldId());
//根据条件获取月份中物料的总额
// 测试
Future<Object> future = completionService.submit(new findMaterialCountTaskForSourceList(parm));
futureList.add(future);
}
for (int i = 0; i < materialTypeAll.size(); i++) {
Object result = null;
try {
result = completionService.take().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
map.putAll((Map<? extends String, ?>) result);
}
return map;
}
}
// 根据条件获取月份中物料的总额用于sourcelist
class findMaterialCountTaskForSourceList implements Callable<Object> {
Map<String, Object> map;
findMaterialCountTaskForSourceList(Map<String, Object> map) {
this.map = map;
}
@Override
public Object call() throws Exception {
Map<String, Object> result = new HashMap<>();
Integer materialCountByMonth1 = depositoryRecordService.findMaterialCountByMonth2(map);
Long oldId = Long.valueOf(map.get("oldId").toString());
MaterialType materialTypeByOldId = materialTypeService.findMaterialTypeByOldId(oldId);
result.put(materialTypeByOldId.getTname(), materialCountByMonth1);
return result;
}
}
class findMapData implements Callable<Object> {
String type;
MaterialType mt;
Map<String, Object> previousMonth1;
findMapData(Map<String, Object> previousMonth1, String type, MaterialType mt) {
this.previousMonth1 = previousMonth1;
this.type = type;
this.mt = mt;
}
@Override
public Object call() throws Exception {
List<Object> productData = new ArrayList<>();
List<Object> months1 = (List<Object>) previousMonth1.get("months");
productData.add(mt.getTname());
for (int j = months1.size() - 1; j > 0; 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", months1.get(j));
parm.put("end", months1.get(j - 1));
parm.put("oldId", mt.getOldId());
//根据条件获取月份中物料的总额
// 测试
Integer materialCountByMonth1 = depositoryRecordService.findMaterialCountByMonth2(parm);
productData.add(materialCountByMonth1);
}
return productData;
}
}
} }

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

@ -230,7 +230,7 @@ public class DepositoryRecordController {
// 定义列表用于储存入库单id // 定义列表用于储存入库单id
List<Integer> recordIds = new ArrayList<>(); List<Integer> recordIds = new ArrayList<>();
// 定义列表用于存储入库仓库id // 定义列表用于存储入库仓库id
List<Integer> depositoryIds = new ArrayList<>(); List<Long> mtIdList = new ArrayList<>();
if (params.size() < 1 && map.size() > 3) { if (params.size() < 1 && map.size() > 3) {
@ -242,22 +242,23 @@ public class DepositoryRecordController {
if (addSplitInventory != -1) { if (addSplitInventory != -1) {
integer += addSplitInventory; integer += addSplitInventory;
recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId"))); recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId")));
depositoryIds.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId")));
} }
} else { }
else {
// 获取库位id // 获取库位id
Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId")); Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId"));
if (placeId == 0) {// 如果插入到仓库 if (placeId == 0) {// 如果插入到仓库
map.put("placeId", 0); // 到默认库位 map.put("placeId", 0); // 到默认库位
integer += depositoryRecordService.applicationInPlace(map, false); integer += depositoryRecordService.applicationInPlace(map, false);
recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId"))); recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId")));
depositoryIds.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId")));
} else { // 如果具体到库位 } else { // 如果具体到库位
Integer flag = depositoryRecordService.applicationInPlace(map, false); Integer flag = depositoryRecordService.applicationInPlace(map, false);
if (flag != -1) { if (flag != -1) {
integer += flag; integer += flag;
recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId"))); recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId")));
depositoryIds.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId")));
} }
} }
} }
@ -286,7 +287,7 @@ public class DepositoryRecordController {
if (addSplitInventory != -1) { if (addSplitInventory != -1) {
integer += addSplitInventory; integer += addSplitInventory;
recordIds.add(ObjectFormatUtil.toInteger(insert.get("applicationInId"))); recordIds.add(ObjectFormatUtil.toInteger(insert.get("applicationInId")));
depositoryIds.add(ObjectFormatUtil.toInteger(insert.get("depositoryId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId")));
successMsg.add(insert); successMsg.add(insert);
} else { } else {
errMsg.add(insert); errMsg.add(insert);
@ -301,7 +302,7 @@ public class DepositoryRecordController {
integer += add; integer += add;
successMsg.add(insert); successMsg.add(insert);
recordIds.add(ObjectFormatUtil.toInteger(insert.get("applicationInId"))); recordIds.add(ObjectFormatUtil.toInteger(insert.get("applicationInId")));
depositoryIds.add(ObjectFormatUtil.toInteger(insert.get("depositoryId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId")));
} }
} else {// 如果具体到库位 } else {// 如果具体到库位
@ -313,7 +314,7 @@ public class DepositoryRecordController {
} else { } else {
integer += flag; integer += flag;
recordIds.add(ObjectFormatUtil.toInteger(insert.get("applicationInId"))); recordIds.add(ObjectFormatUtil.toInteger(insert.get("applicationInId")));
depositoryIds.add(ObjectFormatUtil.toInteger(insert.get("depositoryId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId")));
} }
} }
@ -327,7 +328,7 @@ public class DepositoryRecordController {
integer += addSplitInventory; integer += addSplitInventory;
successMsg.add(map); successMsg.add(map);
recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId"))); recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId")));
depositoryIds.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId")));
} else { } else {
errMsg.add(map); errMsg.add(map);
} }
@ -343,7 +344,7 @@ public class DepositoryRecordController {
integer += add; integer += add;
successMsg.add(map); successMsg.add(map);
recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId"))); recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId")));
depositoryIds.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId")));
} }
} else { // 如果具体到库位 } else { // 如果具体到库位
@ -354,7 +355,7 @@ public class DepositoryRecordController {
} else { } else {
integer += flag; integer += flag;
recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId"))); recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId")));
depositoryIds.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId")));
} }
} }
} }
@ -367,14 +368,14 @@ public class DepositoryRecordController {
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
Map<Integer, List<Integer>> depositoryIdToRecordId = new HashMap<>(); Map<Long, List<Integer>> MtIdToRecordId = new HashMap<>();
for (int i = 0; i < recordIds.size(); i++) { for (int i = 0; i < recordIds.size(); i++) {
Integer recordId = recordIds.get(i); Integer recordId = recordIds.get(i);
if (recordId != null) { if (recordId != null) {
// 如果当前id不是空 获取对应的入库仓库id // 如果当前id不是空 获取对应的入库仓库id
Integer depositoryId = depositoryIds.get(i); Long mtId = mtIdList.get(i);
// 将对应仓库与订单id添加映射关系 // 将对应仓库与订单id添加映射关系
List<Integer> integers = depositoryIdToRecordId.get(depositoryId); List<Integer> integers = MtIdToRecordId.get(mtId);
if (integers != null) { if (integers != null) {
// 如果有对应关系 // 如果有对应关系
integers.add(recordId); integers.add(recordId);
@ -382,25 +383,25 @@ public class DepositoryRecordController {
// 如果没有 // 如果没有
integers = new ArrayList<>(); integers = new ArrayList<>();
integers.add(recordId); integers.add(recordId);
depositoryIdToRecordId.put(depositoryId, integers); MtIdToRecordId.put(mtId, integers);
} }
} }
} }
// 获取遍历器 // 获取遍历器
Iterator<Integer> iterator = depositoryIdToRecordId.keySet().iterator(); Iterator<Long> iterator = MtIdToRecordId.keySet().iterator();
if (iterator.hasNext()) { if (iterator.hasNext()) {
// 获取当前仓库 // 获取当前仓库
Integer next = iterator.next(); Long next = iterator.next();
// 获取入库到当前仓库的订单id // 获取入库到当前仓库的订单id
List<Integer> integerList = depositoryIdToRecordId.get(next); List<Integer> integerList = MtIdToRecordId.get(next);
// 获取当前仓库的管理员 // 获取当前类型的管理员
List<RoleAndDepository> depositoryIdForIn = roleService.findRoleAndDepositoryByDepositoryIdForIn(next); List<RoleAndMaterialType> materialTypeIdForIn = roleService.findRoleAndMaterialTypeByMtId(next);
// 用于存储当前仓库的管理员企业微信userId // 用于存储当前仓库的管理员企业微信userId
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (RoleAndDepository depository : depositoryIdForIn for (RoleAndMaterialType mt : materialTypeIdForIn
) { ) {
// 获取管理员数据 // 获取管理员数据
UserByPort userByPort = LinkInterfaceUtil.FindUserById(depository.getUserId(), userToken); UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUid(), userToken);
String workwechat = userByPort.getWorkwechat(); String workwechat = userByPort.getWorkwechat();
if (workwechat == null || "".equals(workwechat)) { if (workwechat == null || "".equals(workwechat)) {
workwechat = userByPort.getWechat(); workwechat = userByPort.getWechat();

6
src/main/java/com/dreamchaser/depository_manage/controller/DownLoadFileController.java

@ -1,6 +1,7 @@
package com.dreamchaser.depository_manage.controller; package com.dreamchaser.depository_manage.controller;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -25,9 +26,7 @@ public class DownLoadFileController {
@RequestMapping("/zipDownload") @RequestMapping("/zipDownload")
public void zipDownload(HttpServletRequest request,HttpServletResponse response) { public void zipDownload(HttpServletRequest request,HttpServletResponse response) {
try { try {
String path = "static/upload/PrintServer.zip"; String path = "static/upload/PrintServer.zip";
String fileName = "PrintServer.zip"; String fileName = "PrintServer.zip";
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
response.setContentType("content-type:octet-stream"); response.setContentType("content-type:octet-stream");
@ -160,4 +159,7 @@ public class DownLoadFileController {
} }

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

@ -160,7 +160,6 @@ public class MaterialController {
// 定义仓库编号列表 // 定义仓库编号列表
List<Integer> didList = new ArrayList<>(); List<Integer> didList = new ArrayList<>();
Integer size = 10, page = 1; // 定义每页展示数量 Integer size = 10, page = 1; // 定义每页展示数量
if (map.containsKey("size")) { if (map.containsKey("size")) {
size = ObjectFormatUtil.toInteger(map.get("size")); size = ObjectFormatUtil.toInteger(map.get("size"));

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

@ -1166,6 +1166,23 @@ public class PageController {
return mv; return mv;
} }
@GetMapping("/user_addForIn")
public ModelAndView user_addForIn(Integer userId, Integer classes, HttpServletRequest request) {
String token = request.getHeader("user-token");
if (token == null) {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
ModelAndView mv = new ModelAndView();
mv.setViewName("pages/user/user-addForIn");
UserByPort userByPort = LinkInterfaceUtil.FindUserById(userId, userToken);
UserByPortP userByPortP = new UserByPortP(userByPort);
mv.addObject("userByPort", userByPortP);
mv.addObject("classes", classes);
return mv;
}
@GetMapping("/user_role_edit") @GetMapping("/user_role_edit")
public ModelAndView user_role_edit(Integer id, HttpServletRequest request) { public ModelAndView user_role_edit(Integer id, HttpServletRequest request) {
String token = request.getHeader("user-token"); String token = request.getHeader("user-token");
@ -1188,6 +1205,29 @@ public class PageController {
return mv; return mv;
} }
@GetMapping("/user_role_editForIn")
public ModelAndView user_role_editForIn(Integer id, HttpServletRequest request) {
String token = request.getHeader("user-token");
if (token == null) {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
ModelAndView mv = new ModelAndView();
mv.setViewName("pages/user/user-role-editForIn");
RoleAndMaterialType roleAndMaterialTypeById = roleService.findRoleAndMaterialTypeById(id);
UserByPortP userByPortP = null;
if (roleAndMaterialTypeById != null) {
UserByPort userByPort = LinkInterfaceUtil.FindUserById(roleAndMaterialTypeById.getUid(), userToken);
userByPortP = new UserByPortP(userByPort);
userByPortP.setMaterialTypeName(roleAndMaterialTypeById.getTname());
}
mv.addObject("userByPort", userByPortP);
mv.addObject("roleId", roleAndMaterialTypeById.getId());
mv.addObject("mtid", roleAndMaterialTypeById.getMtid());
return mv;
}
@GetMapping("/post_role_edit") @GetMapping("/post_role_edit")
public ModelAndView post_role_edit(Integer id, Integer depositoryId, HttpServletRequest request) { public ModelAndView post_role_edit(Integer id, Integer depositoryId, HttpServletRequest request) {
String token = request.getHeader("user-token"); String token = request.getHeader("user-token");

32
src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java

@ -93,7 +93,11 @@ public class PlaceController {
// insert.put("y", place_y); // insert.put("y", place_y);
insert.put("z", place_z); insert.put("z", place_z);
insert.put("code", code); insert.put("code", code);
Depository depository = depositoryService.findDepositoryById(ObjectFormatUtil.toInteger(map.get("depositoryId")));
String depositoryCode = depository.getCode();
String kingdeeCode = depositoryCode.substring(depositoryCode.length() - 2) + code;
insert.put("did", map.get("depositoryId")); insert.put("did", map.get("depositoryId"));
insert.put("kingdeecode", kingdeeCode);
if (!"".equals(min)) { if (!"".equals(min)) {
insert.put("min", map.get("min")); insert.put("min", map.get("min"));
} else { } else {
@ -124,6 +128,8 @@ public class PlaceController {
total = (place_end_x - place_start_x + 1) * (place_end_z - place_start_z + 1); total = (place_end_x - place_start_x + 1) * (place_end_z - place_start_z + 1);
String min = (String) map.get("min"); String min = (String) map.get("min");
String max = (String) map.get("max"); String max = (String) map.get("max");
Depository depository = depositoryService.findDepositoryById(ObjectFormatUtil.toInteger(map.get("depositoryId")));
String depositoryCode = depository.getCode();
for (int i = place_start_x; i <= place_end_x; i++) { for (int i = place_start_x; i <= place_end_x; i++) {
// for (int j = place_start_y; j < place_end_y; j++) { // for (int j = place_start_y; j < place_end_y; j++) {
for (int k = place_start_z; k <= place_end_z; k++) { for (int k = place_start_z; k <= place_end_z; k++) {
@ -133,9 +139,11 @@ public class PlaceController {
// insert.put("y",j); // insert.put("y",j);
insert.put("z",k); insert.put("z",k);
insert.put("code",code); insert.put("code",code);
String kingdeeCode = depositoryCode.substring(depositoryCode.length() - 2) + code;
insert.put("did", map.get("depositoryId"));
insert.put("kingdeecode", kingdeeCode);
insert.put("min",min); insert.put("min",min);
insert.put("max",max); insert.put("max",max);
insert.put("did", map.get("depositoryId"));
insert.put("state",1); insert.put("state",1);
insert.put("quantity",0); insert.put("quantity",0);
insert.put("flagType",1); insert.put("flagType",1);
@ -239,7 +247,6 @@ public class PlaceController {
Object id = map.get("id"); Object id = map.get("id");
// 获取当前修改的库位 // 获取当前修改的库位
Place placeById = placeService.findPlaceById(ObjectFormatUtil.toInteger(id)); Place placeById = placeService.findPlaceById(ObjectFormatUtil.toInteger(id));
Map<String, Object> update = new HashMap<>(); Map<String, Object> update = new HashMap<>();
Integer place_x = ObjectFormatUtil.toInteger(map.get("place_x")); Integer place_x = ObjectFormatUtil.toInteger(map.get("place_x"));
// Integer place_y = ObjectFormatUtil.toInteger(map.get("place_y")); // Integer place_y = ObjectFormatUtil.toInteger(map.get("place_y"));
@ -257,7 +264,7 @@ public class PlaceController {
// 如果编码发生改变 // 如果编码发生改变
// 获取当前修改后的库位编码是否存在 // 获取当前修改后的库位编码是否存在
Place placeByDidAndCode = placeService.findPlaceByDidAndCode(placeById.getDid(), oldCode); Place placeByDidAndCode = placeService.findPlaceByDidAndCode(placeById.getDid(), newCode);
if(placeByDidAndCode != null){ if(placeByDidAndCode != null){
// 如果存在 // 如果存在
return new RestResponse("",12345,new StatusInfo("修改失败","该编码或位置已经存在")); return new RestResponse("",12345,new StatusInfo("修改失败","该编码或位置已经存在"));
@ -269,6 +276,7 @@ public class PlaceController {
// update.put("y", place_y); // update.put("y", place_y);
update.put("z", place_z); update.put("z", place_z);
update.put("code", newCode); update.put("code", newCode);
update.put("kingdeecode",placeById.getKingdeecode().substring(0,2) + newCode);
update.put("oldCode", oldCode); update.put("oldCode", oldCode);
update.put("did", map.get("did")); update.put("did", map.get("did"));
if (!"".equals(min)) { if (!"".equals(min)) {
@ -396,28 +404,14 @@ public class PlaceController {
// 构造仓库二维码 // 构造仓库二维码
@PostMapping("/createQrCode") @PostMapping("/createQrCode")
public RestResponse createQrCode(@RequestBody Map<String,Object> map) { public RestResponse createQrCode(@RequestBody Map<String,Object> map) {
// 通过雪花算法计算随机数
Snowflake snowflake = new Snowflake(10,10,true);
String qrCode = snowflake.nextIdStr();
Integer pid = ObjectFormatUtil.toInteger(map.get("pid"));
String qrCodeByDepository = placeService.findQrCodeByPlace(pid);
if(qrCodeByDepository == null) { Integer pid = ObjectFormatUtil.toInteger(map.get("pid"));
Map<String, Object> param = new HashMap<>(); String qrCode = placeService.findQrCodeByPlace(pid);
param.put("pid", pid);
param.put("qrCode", qrCode);
placeService.addQrCodeByPlace(param);
}else{
qrCode = qrCodeByDepository;
}
try { try {
// 二维码保存信息 // 二维码保存信息
Place placeById = placeService.findPlaceById(pid); Place placeById = placeService.findPlaceById(pid);
Depository depositoryById = depositoryService.findDepositoryById(placeById.getDid()); Depository depositoryById = depositoryService.findDepositoryById(placeById.getDid());
return RestResponse.CreateBarCode(qrCode,depositoryById.getDname() + "-" + placeById.getCode()); return RestResponse.CreateBarCode(qrCode,depositoryById.getDname() + "-" + placeById.getCode());
} catch (IOException e) { } catch (IOException e) {
return new RestResponse("err: " + e.getMessage(), 678, new StatusInfo("失败", "请联系开发人员")); return new RestResponse("err: " + e.getMessage(), 678, new StatusInfo("失败", "请联系开发人员"));

91
src/main/java/com/dreamchaser/depository_manage/controller/UserController.java

@ -7,10 +7,7 @@ import com.dreamchaser.depository_manage.entity.Depository;
import com.dreamchaser.depository_manage.entity.User; import com.dreamchaser.depository_manage.entity.User;
import com.dreamchaser.depository_manage.entity.UserByPort; import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.RestResponse; import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.pojo.RoleAndDepository;
import com.dreamchaser.depository_manage.pojo.StatusInfo;
import com.dreamchaser.depository_manage.pojo.UserByPortP;
import com.dreamchaser.depository_manage.security.bean.LoginRealms; import com.dreamchaser.depository_manage.security.bean.LoginRealms;
import com.dreamchaser.depository_manage.security.bean.LoginType; import com.dreamchaser.depository_manage.security.bean.LoginType;
import com.dreamchaser.depository_manage.security.bean.UserToken; import com.dreamchaser.depository_manage.security.bean.UserToken;
@ -296,11 +293,8 @@ public class UserController {
} }
/** /**
* 添加用户权限 * 添加用户管理仓库的权限
* @param map *
* @return
*/
/**
* @param map * @param map
* @return * @return
*/ */
@ -331,7 +325,28 @@ public class UserController {
} }
return CrudUtil.postHandle(success, depositoryAll.size()); return CrudUtil.postHandle(success, depositoryAll.size());
} }
}
/**
* 添加用户管理仓库的权限
*
* @param map
* @return
*/
@PostMapping("/sys/user_roleForIn")
public RestResponse addUserForIn(@RequestBody Map<String, Object> map) {
Map<String, Object> param = new HashMap<>();
param.put("userId", map.get("userid"));
param.put("classes", map.get("classes"));
param.put("mtid", map.get("mtid"));
List<RoleAndMaterialType> roleAndMaterialTypeByCondition = roleService.findRoleAndMaterialTypeByCondition(param);
if (roleAndMaterialTypeByCondition.size() > 0) {
return CrudUtil.postHandle(-1, -1);
} else {
Integer integer = roleService.addUserOrPostRoleAndMaterialType(map);
return CrudUtil.postHandle(integer, integer);
}
} }
@PostMapping("/sys/userRole_edit") @PostMapping("/sys/userRole_edit")
@ -339,6 +354,11 @@ public class UserController {
return CrudUtil.postHandle(roleService.UpdateRoleAndDepositoryById(map), 1); return CrudUtil.postHandle(roleService.UpdateRoleAndDepositoryById(map), 1);
} }
@PostMapping("/sys/userRole_editForIn")
public RestResponse editUserRoleForIn(@RequestBody Map<String, Object> map) {
return CrudUtil.postHandle(roleService.UpdateRoleAndMaterialTypeById(map), 1);
}
@PostMapping("/sys/user_detail") @PostMapping("/sys/user_detail")
public RestResponse updateUser(@RequestBody Map<String, Object> map) { public RestResponse updateUser(@RequestBody Map<String, Object> map) {
if (map.containsKey("pwd") && map.get("pwd") != "") { if (map.containsKey("pwd") && map.get("pwd") != "") {
@ -369,7 +389,7 @@ public class UserController {
} }
/** /**
* 根据主键删除权限类型 * 根据主键删除管理仓库权限
* *
* @param map * @param map
* @return * @return
@ -382,8 +402,7 @@ public class UserController {
} else if (map.containsKey("ids")) { } else if (map.containsKey("ids")) {
Integer num = 0; Integer num = 0;
List<Integer> ids = (List<Integer>) map.get("ids"); List<Integer> ids = (List<Integer>) map.get("ids");
for (int i = 0; i < ids.size(); i++) { for (Integer id : ids) {
Integer id = ids.get(i);
num += roleService.deleteRoleAndDepositoryById(id); num += roleService.deleteRoleAndDepositoryById(id);
} }
return CrudUtil.deleteHandle(num, ids.size()); return CrudUtil.deleteHandle(num, ids.size());
@ -392,6 +411,30 @@ public class UserController {
} }
} }
/**
* 根据主键删除管理类型权限
*
* @param map
* @return
*/
@PostMapping("/sys/userRole_delForIn")
public RestResponse deleteRoleAndMaterialType(@RequestBody Map<String, Object> map) {
if (map.containsKey("id")) {
Integer id = ObjectFormatUtil.toInteger(map.get("id"));
return CrudUtil.deleteHandle(roleService.deleteRoleAndMaterialTypeById(id), 1);
} else if (map.containsKey("ids")) {
Integer num = 0;
List<Integer> ids = (List<Integer>) map.get("ids");
for (Integer id : ids) {
num += roleService.deleteRoleAndMaterialTypeById(id);
}
return CrudUtil.deleteHandle(num, ids.size());
} else {
throw new MyException("所需请求参数缺失!");
}
}
@PutMapping("/user") @PutMapping("/user")
public RestResponse updateSelf(@RequestBody Map<String, Object> map, HttpServletRequest request) { public RestResponse updateSelf(@RequestBody Map<String, Object> map, HttpServletRequest request) {
UserToken userToken = (UserToken) request.getAttribute("userToken"); UserToken userToken = (UserToken) request.getAttribute("userToken");
@ -500,6 +543,7 @@ public class UserController {
} }
UserByPort userToken = AuthenticationTokenPool.getUserToken(token); UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
List<UserByPortP> userByPortPList = new ArrayList<>(); List<UserByPortP> userByPortPList = new ArrayList<>();
String classes = (String) map.get("classes");
List<RoleAndDepository> roleAndDepositoryByCondition = roleService.findRoleAndDepositoryByCondition(map); List<RoleAndDepository> roleAndDepositoryByCondition = roleService.findRoleAndDepositoryByCondition(map);
for (RoleAndDepository roleAndDepository : roleAndDepositoryByCondition) { for (RoleAndDepository roleAndDepository : roleAndDepositoryByCondition) {
UserByPort userByPort = LinkInterfaceUtil.FindUserById(roleAndDepository.getUserId(), userToken); UserByPort userByPort = LinkInterfaceUtil.FindUserById(roleAndDepository.getUserId(), userToken);
@ -508,7 +552,28 @@ public class UserController {
up.setDepositoryName(roleAndDepository.getDepositoryName()); up.setDepositoryName(roleAndDepository.getDepositoryName());
userByPortPList.add(up); userByPortPList.add(up);
} }
return new RestResponse(userByPortPList, userByPortPList.size(), 200); return new RestResponse(userByPortPList, roleService.findRoleAndDepositoryCountByCondition(map), 200);
}
@GetMapping("/findUserInRole")
public RestResponse findUserInRole(@RequestParam Map<String, Object> map, HttpServletRequest request) {
String token = request.getHeader("user-token");
if (token == null) {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
List<UserByPortP> userByPortPList = new ArrayList<>();
// 如果查询的是入库
List<RoleAndMaterialType> roleAndMaterialTypeByCondition = roleService.findRoleAndMaterialTypeByCondition(map);
for (RoleAndMaterialType roleAndMaterialType : roleAndMaterialTypeByCondition
) {
UserByPort userByPort = LinkInterfaceUtil.FindUserById(roleAndMaterialType.getUid(), userToken);
UserByPortP up = new UserByPortP(userByPort);
up.setId(roleAndMaterialType.getId());
up.setMaterialTypeName(roleAndMaterialType.getTname());
userByPortPList.add(up);
}
return new RestResponse(userByPortPList, roleService.findRoleAndMaterialTypeCountByCondition(map), 200);
} }

5
src/main/java/com/dreamchaser/depository_manage/entity/Inventory.java

@ -104,6 +104,11 @@ public class Inventory {
*/ */
private String placeCode; private String placeCode;
/**
* 库位编码金蝶
*/
private String placeKingdeeCode;
/** /**
* 暂存额度 * 暂存额度

5
src/main/java/com/dreamchaser/depository_manage/entity/MaterialAndPlace.java

@ -24,6 +24,11 @@ public class MaterialAndPlace {
* 库位编码 * 库位编码
*/ */
private String code; private String code;
/**
* 库位编码金蝶
*/
private String kingdeecode;
/** /**
* 库位最大存储量 * 库位最大存储量
*/ */

6
src/main/java/com/dreamchaser/depository_manage/entity/Place.java

@ -64,4 +64,10 @@ public class Place {
* 当前库位类型1库位2托盘 * 当前库位类型1库位2托盘
*/ */
private Integer flagForType; private Integer flagForType;
/**
* 库位编码金蝶
*/
private String kingdeecode;
} }

7
src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.java

@ -73,6 +73,13 @@ public interface DepositoryMapper {
*/ */
Depository findDepositoryById(Integer id); Depository findDepositoryById(Integer id);
/**
* 根据主键id批量获取数据
* @param list
* @return 查询数据
*/
List<Depository> findDepositoryByIds(List<Integer> list);
/** /**

13
src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.xml

@ -77,9 +77,6 @@
</select> </select>
<!-- 获取当前部门仓库以及公共仓库--> <!-- 获取当前部门仓库以及公共仓库-->
<select id="findDepositoryByAdminorg" resultMap="depositoryMap" parameterType="string"> <select id="findDepositoryByAdminorg" resultMap="depositoryMap" parameterType="string">
SELECT SELECT
@ -204,6 +201,15 @@
</select> </select>
<select id="findDepositoryByIds" resultMap="depositoryMap" parameterType="list">
SELECT
<include refid="allColumns"/>
FROM depository d WHERE d.id in
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<!-- 插入数据 --> <!-- 插入数据 -->
<insert id="insertDepository" parameterType="map"> <insert id="insertDepository" parameterType="map">
@ -374,7 +380,6 @@
</select> </select>
<select id="findUserNameByDepositoryId" resultType="string" parameterType="int"> <select id="findUserNameByDepositoryId" resultType="string" parameterType="int">
select uname select uname
from depositoryanduser from depositoryanduser

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

@ -13,6 +13,7 @@
<result column="mid" property="mid" jdbcType="INTEGER"/> <result column="mid" property="mid" jdbcType="INTEGER"/>
<result column="did" property="did" jdbcType="INTEGER"/> <result column="did" property="did" jdbcType="INTEGER"/>
<result column="code" property="code" jdbcType="VARCHAR"/> <result column="code" property="code" jdbcType="VARCHAR"/>
<result column="kingdeecode" property="kingdeecode" jdbcType="VARCHAR"/>
<result column="min" property="min" jdbcType="INTEGER"/> <result column="min" property="min" jdbcType="INTEGER"/>
<result column="max" property="max" jdbcType="INTEGER"/> <result column="max" property="max" jdbcType="INTEGER"/>
<result column="state" property="state" jdbcType="INTEGER"/> <result column="state" property="state" jdbcType="INTEGER"/>
@ -29,6 +30,7 @@
<result column="max" property="max" jdbcType="INTEGER"/> <result column="max" property="max" jdbcType="INTEGER"/>
<result column="min" property="min" jdbcType="INTEGER"/> <result column="min" property="min" jdbcType="INTEGER"/>
<result column="code" property="code" jdbcType="VARCHAR"/> <result column="code" property="code" jdbcType="VARCHAR"/>
<result column="kingdeecode" property="kingdeecode" jdbcType="VARCHAR"/>
</resultMap> </resultMap>
<resultMap id="MaterialAndPlaceForViewMap" type="com.dreamchaser.depository_manage.pojo.MaterialAndPlaceForView"> <resultMap id="MaterialAndPlaceForViewMap" type="com.dreamchaser.depository_manage.pojo.MaterialAndPlaceForView">
@ -50,11 +52,12 @@
<result column="tname" property="tname" jdbcType="VARCHAR"/> <result column="tname" property="tname" jdbcType="VARCHAR"/>
<result column="mname" property="mname" jdbcType="VARCHAR"/> <result column="mname" property="mname" jdbcType="VARCHAR"/>
<result column="adminorg" property="adminorg" jdbcType="VARCHAR"/> <result column="adminorg" property="adminorg" jdbcType="VARCHAR"/>
<result column="kingdeecode" property="kingdeecode" jdbcType="VARCHAR"/>
</resultMap> </resultMap>
<!-- 表查询字段 --> <!-- 表查询字段 -->
<sql id="allColumns"> <sql id="allColumns">
p.id,p.x,p.y,p.z,p.code,p.mid,p.did,p.min,p.max,p.state,p.quantity,p.flagForType p.id,p.x,p.y,p.z,p.code,p.mid,p.did,p.min,p.max,p.state,p.quantity,p.flagForType,p.kingdeecode
</sql> </sql>
<sql id="allColumnsByMaterialAndPlace"> <sql id="allColumnsByMaterialAndPlace">
@ -62,7 +65,7 @@
</sql> </sql>
<sql id="allColumnsForView"> <sql id="allColumnsForView">
depository_id,mname,type_id,tname,mcode,version,price,unit,texture,pcode,dname,adminorg,dcode,iid,inventory,id,pid,mid depository_id,mname,type_id,tname,mcode,version,price,unit,texture,pcode,dname,adminorg,dcode,iid,inventory,id,pid,mid,kingdeecode
</sql> </sql>
@ -96,6 +99,9 @@
<if test="code != '' and code != null"> <if test="code != '' and code != null">
and p.code = #{code} and p.code = #{code}
</if> </if>
<if test="kingdeecode != '' and kingdeecode != null">
and p.kingdeecode = #{kingdeecode}
</if>
<if test="did != '' and did != null"> <if test="did != '' and did != null">
and p.did = #{did} and p.did = #{did}
</if> </if>
@ -216,6 +222,9 @@
<if test="code != null and code != ''"> <if test="code != null and code != ''">
AND p.code LIKE CONCAT('%', #{code}, '%') AND p.code LIKE CONCAT('%', #{code}, '%')
</if> </if>
<if test="kingdeecode != '' and kingdeecode != null">
and p.kingdeecode = #{kingdeecode}
</if>
<if test="mid != null and mid != ''"> <if test="mid != null and mid != ''">
AND find_in_set(#{mid},p.mid) AND find_in_set(#{mid},p.mid)
</if> </if>
@ -263,6 +272,9 @@
<if test="code != null and code != ''"> <if test="code != null and code != ''">
AND p.code LIKE CONCAT('%', #{code}, '%') AND p.code LIKE CONCAT('%', #{code}, '%')
</if> </if>
<if test="kingdeecode != '' and kingdeecode != null">
and p.kingdeecode LIKE CONCAT('%', #{kingdeecode}, '%')
</if>
<if test="z != null and z != ''"> <if test="z != null and z != ''">
AND p.z = #{z} AND p.z = #{z}
</if> </if>
@ -341,7 +353,7 @@
<!-- 新增信息 --> <!-- 新增信息 -->
<insert id="InsertPlace"> <insert id="InsertPlace">
INSERT INTO place ( INSERT INTO place (
id,x,y,z,code, mid,did,min,max,state,quantity,flagForType id,x,y,z,code, mid,did,min,max,state,quantity,flagForType,kingdeecode
) VALUES ( ) VALUES (
#{id}, #{id},
#{x}, #{x},
@ -354,7 +366,8 @@
#{max}, #{max},
#{state}, #{state},
#{quantity}, #{quantity},
#{flagType} #{flagType},
#{kingdeecode}
) )
</insert> </insert>
@ -387,6 +400,9 @@
</if> </if>
<if test="code != null"> <if test="code != null">
code = #{code}, code = #{code},
</if>
<if test="kingdeecode != null">
kingdeecode = #{kingdeecode},
</if> </if>
<if test="mid != null"> <if test="mid != null">
mid = #{mid}, mid = #{mid},

80
src/main/java/com/dreamchaser/depository_manage/mapper/RoleMapper.java

@ -2,6 +2,7 @@ package com.dreamchaser.depository_manage.mapper;
import com.dreamchaser.depository_manage.entity.Role; import com.dreamchaser.depository_manage.entity.Role;
import com.dreamchaser.depository_manage.pojo.RoleAndDepository; import com.dreamchaser.depository_manage.pojo.RoleAndDepository;
import com.dreamchaser.depository_manage.pojo.RoleAndMaterialType;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@ -13,9 +14,9 @@ import java.util.Map;
public interface RoleMapper { public interface RoleMapper {
/** /**
* 添加用户或者岗位权限及管理的仓库 * 添加用户或者岗位权限及管理的仓库
*
* @param map * @param map
* @return * @return
*/ */
@ -24,13 +25,33 @@ public interface RoleMapper {
/** /**
* 添加用户或者岗位权限及管理的仓库 * 添加用户或者岗位权限及管理的仓库
*
* @param map * @param map
* @return * @return
*/ */
Integer addUserOrPostRoleAndDepositorys(Map<String, Object> map); Integer addUserOrPostRoleAndDepositorys(Map<String, Object> map);
/**
* 添加用户或者岗位权限及管理的物料类型
*
* @param map
* @return
*/
Integer addUserOrPostRoleAndMaterialType(Map<String, Object> map);
/**
* 添加用户或者岗位权限及管理的物料类型
*
* @param map
* @return
*/
Integer addUserOrPostRoleAndMaterialTypes(Map<String, Object> map);
/** /**
* 获取仓库和权限名称 * 获取仓库和权限名称
*
* @param userid * @param userid
* @return * @return
*/ */
@ -38,14 +59,25 @@ public interface RoleMapper {
/** /**
* 修改用户或者岗位权限及管理的仓库 * 修改用户或者岗位权限及管理的仓库
*
* @param map * @param map
* @return * @return
*/ */
Integer updateUserOrPostRoleAndDepository(Map<String, Object> map); Integer updateUserOrPostRoleAndDepository(Map<String, Object> map);
/**
* 修改管理类型权限列表
*
* @param map
* @return
*/
Integer UpdateRoleAndMaterialTypeById(Map<String, Object> map);
/** /**
* 获取当前登录用户的权限 * 获取当前登录用户的权限
*
* @param uid * @param uid
* @return * @return
*/ */
@ -54,6 +86,7 @@ public interface RoleMapper {
/** /**
* 根据仓库获取用户 * 根据仓库获取用户
*
* @param did * @param did
* @return * @return
*/ */
@ -61,39 +94,76 @@ public interface RoleMapper {
/** /**
* 根据条件获取权限 * 根据条件获取权限
*
* @param map * @param map
* @return * @return
*/ */
List<RoleAndDepository> findRoleAndDepositoryByCondition(Map<String, Object> map); List<RoleAndDepository> findRoleAndDepositoryByCondition(Map<String, Object> map);
/** /**
* 判断当前仓库是否需要入库审批 * 根据条件获取管理仓库权限数量
*
* @param map
* @return * @return
*/ */
List<RoleAndDepository> findRoleAndDepositoryByDepositoryIdForIn(Integer depositoryId); Integer findRoleAndDepositoryCountByCondition(Map<String, Object> map);
/**
* 根据条件获取管理类型权限
*
* @param map 查询条件
* @return
*/
List<RoleAndMaterialType> findRoleAndMaterialTypeByCondition(Map<String, Object> map);
/**
* 根据条件获取管理类型权限数量
*
* @param map
* @return
*/
Integer findRoleAndMaterialTypeCountByCondition(Map<String, Object> map);
/** /**
* 根据id获取权限 * 根据id获取权限
*
* @param id * @param id
* @return * @return
*/ */
RoleAndDepository findRoleAndDepositoryById(Integer id); RoleAndDepository findRoleAndDepositoryById(Integer id);
/**
* 根据id获取用户管理类型的权限
*
* @param id
* @return
*/
RoleAndMaterialType findRoleAndMaterialTypeById(Integer id);
/** /**
* 修改权限列表 * 修改权限列表
*
* @param map * @param map
* @return * @return
*/ */
Integer UpdateRoleAndDepositoryById(Map<String, Object> map); Integer UpdateRoleAndDepositoryById(Map<String, Object> map);
/** /**
* 根据id删除 * 根据id删除用户管理的仓库
*
* @param id * @param id
* @return * @return
*/ */
Integer deleteRoleAndDepositoryById(Integer id); Integer deleteRoleAndDepositoryById(Integer id);
/**
* 根据id删除用户管理的物料类型
*
* @param id
* @return
*/
Integer deleteRoleAndMaterialTypeById(Integer id);
} }

118
src/main/java/com/dreamchaser/depository_manage/mapper/RoleMapper.xml

@ -26,6 +26,17 @@
<result column="classes" property="classes" jdbcType="INTEGER"/> <result column="classes" property="classes" jdbcType="INTEGER"/>
</resultMap> </resultMap>
<resultMap id="materialTypeAndRole" type="com.dreamchaser.depository_manage.pojo.RoleAndMaterialType">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="classes" property="classes" jdbcType="INTEGER"/>
<result column="mtid" property="mtid" jdbcType="INTEGER"/>
<result column="uid" property="uid" jdbcType="INTEGER"/>
<result column="tname" property="tname" jdbcType="VARCHAR"/>
<result column="mtstate" property="mtstate" jdbcType="INTEGER"/>
<result column="mtintroduce" property="mtintroduce" jdbcType="VARCHAR"/>
<result column="mtparentId" property="mtparentId" jdbcType="INTEGER"/>
</resultMap>
<sql id="allColumns"> <sql id="allColumns">
r.id,r.name r.id,r.name
</sql> </sql>
@ -34,6 +45,10 @@
prid,userid as userId,dname as depositoryName,address as depositoryAddress ,introduce as depositoryIntroduce,state as depositoryState,did,classes,code as depositoryCode prid,userid as userId,dname as depositoryName,address as depositoryAddress ,introduce as depositoryIntroduce,state as depositoryState,did,classes,code as depositoryCode
</sql> </sql>
<sql id="roleNameAndMaterialTypeName">
id,classes,mtid,uid,tname,mtstate,mtintroduce,mtparentId
</sql>
<update id="updateUserOrPostRoleAndDepository" parameterType="map"> <update id="updateUserOrPostRoleAndDepository" parameterType="map">
@ -65,6 +80,20 @@
where id = #{roleId} where id = #{roleId}
</update> </update>
<update id="UpdateRoleAndMaterialTypeById" parameterType="map">
update mtanduserrole
<set>
<if test="mtid != null and mtid != ''">
mtid = #{mtid},
</if>
<if test="classes != null and classes != ''">
classes = #{classes}
</if>
</set>
where id = #{roleId}
</update>
<insert id="addUserOrPostRoleAndDepository" parameterType="map"> <insert id="addUserOrPostRoleAndDepository" parameterType="map">
INSERT INTO postoruserrole ( INSERT INTO postoruserrole (
id, classes, role,userid,did id, classes, role,userid,did
@ -92,6 +121,32 @@
</insert> </insert>
<insert id="addUserOrPostRoleAndMaterialType" parameterType="map">
INSERT INTO mtanduserrole (
id, classes,uid,mtid
) VALUES (
#{id},
#{classes},
#{userid},
#{mtid}
)
</insert>
<insert id="addUserOrPostRoleAndMaterialTypes" parameterType="map">
INSERT INTO mtanduserrole (
id, classes,uid,mtid
)
VALUES
<foreach collection="mtIds" index="index" item="mtid" separator="," >
(#{id},
#{classes},
#{userid},
#{mtid})
</foreach>
</insert>
<select id="findDepositoryAndRole" parameterType="int" resultMap="depositoryAndrole"> <select id="findDepositoryAndRole" parameterType="int" resultMap="depositoryAndrole">
@ -106,8 +161,6 @@
</select> </select>
<select id="findUserIdByDid" parameterType="int" resultType="int"> <select id="findUserIdByDid" parameterType="int" resultType="int">
select userid from postoruserrole where 1 = 1 and did = #{did} and classes in (1,2) group by userid select userid from postoruserrole where 1 = 1 and did = #{did} and classes in (1,2) group by userid
</select> </select>
@ -126,19 +179,63 @@
<if test="classes != null and classes != ''"> <if test="classes != null and classes != ''">
and classes = #{classes} and classes = #{classes}
</if> </if>
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select> </select>
<select id="findRoleAndDepositoryByDepositoryIdForIn" parameterType="int" resultMap="depositoryAndrole"> <select id="findRoleAndDepositoryCountByCondition" parameterType="map" resultType="int">
select select
<include refid="roleNameAnddepositoryName"/> COUNT(*)
from userroleanddepository from userroleanddepository
where 1 = 1 where 1 = 1
<if test="depositoryId != null and depositoryId != ''"> <if test="depositoryId != null and depositoryId != ''">
and did = #{depositoryId} and did = #{depositoryId}
</if> </if>
and classes in (3,4) <if test="userId != null and userId != ''">
and userId = #{userId}
</if>
<if test="classes != null and classes != ''">
and classes = #{classes}
</if>
</select>
<select id="findRoleAndMaterialTypeByCondition" parameterType="map" resultMap="materialTypeAndRole">
select
<include refid="roleNameAndMaterialTypeName"/>
from materialtypeanduser
where 1 = 1
<if test="mtid != null and mtid != ''">
and mtid = #{mtid}
</if>
<if test="uid != null and uid != ''">
and uid = #{uid}
</if>
<if test="classes != null and classes != ''">
and classes = #{classes}
</if>
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select> </select>
<select id="findRoleAndMaterialTypeCountByCondition" parameterType="map" resultType="int">
select
COUNT(*)
from materialtypeanduser
where 1 = 1
<if test="mtid != null and mtid != ''">
and mtid = #{mtid}
</if>
<if test="uid != null and uid != ''">
and uid = #{uid}
</if>
<if test="classes != null and classes != ''">
and classes = #{classes}
</if>
</select>
<select id="findRoleAndDepositoryById" parameterType="int" resultMap="depositoryAndrole"> <select id="findRoleAndDepositoryById" parameterType="int" resultMap="depositoryAndrole">
@ -148,10 +245,21 @@
where prid = #{id} where prid = #{id}
</select> </select>
<select id="findRoleAndMaterialTypeById" parameterType="int" resultMap="materialTypeAndRole">
select
<include refid="roleNameAndMaterialTypeName"/>
from materialtypeanduser
where id = #{id}
</select>
<delete id="deleteRoleAndDepositoryById" parameterType="int"> <delete id="deleteRoleAndDepositoryById" parameterType="int">
delete from postoruserrole WHERE id = #{id} delete from postoruserrole WHERE id = #{id}
</delete> </delete>
<delete id="deleteRoleAndMaterialTypeById" parameterType="int">
delete from mtanduserrole WHERE id = #{id}
</delete>
</mapper> </mapper>

6
src/main/java/com/dreamchaser/depository_manage/pojo/InventoryP.java

@ -109,6 +109,11 @@ public class InventoryP {
*/ */
private String placeCode; private String placeCode;
/**
* 库位编码(金蝶)
*/
private String placeKingdeeCode;
/** /**
* 物料编码与条形码的对应关系 * 物料编码与条形码的对应关系
@ -238,6 +243,7 @@ public class InventoryP {
this.shelfLifeForCalc = inventory.getShelfLife(); //保质期,用于计算 this.shelfLifeForCalc = inventory.getShelfLife(); //保质期,用于计算
this.numberOfTemporary = inventory.getNumberOfTemporary(); // 临时数量(出库数量) this.numberOfTemporary = inventory.getNumberOfTemporary(); // 临时数量(出库数量)
this.baseUnit = inventory.getUnit(); // 基础单位 this.baseUnit = inventory.getUnit(); // 基础单位
this.placeKingdeeCode = inventory.getPlaceKingdeeCode(); // 库位编码(金蝶)
} }
public InventoryP() { public InventoryP() {

5
src/main/java/com/dreamchaser/depository_manage/pojo/MaterialAndPlaceForView.java

@ -111,6 +111,11 @@ public class MaterialAndPlaceForView {
*/ */
private String takingUnit; private String takingUnit;
/**
* 库位编码金蝶使用
*/
private String kingdeecode;
/** /**
* 拆单单位 * 拆单单位
*/ */

6
src/main/java/com/dreamchaser/depository_manage/pojo/PlaceP.java

@ -81,6 +81,11 @@ public class PlaceP {
private List<MaterialAndPlace> materialAndPlaceList; private List<MaterialAndPlace> materialAndPlaceList;
/**
* 库位编码金蝶
*/
private String kingdeecode;
public PlaceP(Integer id, Integer x, Integer y, Integer z, Integer mid, Integer did, String code, Integer min, Integer max, Integer state, String mname, String mcode, String depositoryCode, String depositoryName) { public PlaceP(Integer id, Integer x, Integer y, Integer z, Integer mid, Integer did, String code, Integer min, Integer max, Integer state, String mname, String mcode, String depositoryCode, String depositoryName) {
this.id = id; this.id = id;
this.x = x; this.x = x;
@ -109,5 +114,6 @@ public class PlaceP {
this.min = p.getMin(); this.min = p.getMin();
this.max = p.getMax(); this.max = p.getMax();
this.state = p.getState(); this.state = p.getState();
this.kingdeecode = p.getKingdeecode();
} }
} }

52
src/main/java/com/dreamchaser/depository_manage/pojo/RestResponse.java

@ -9,12 +9,11 @@ import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import sun.misc.BASE64Decoder; import sun.misc.BASE64Decoder;
import java.io.FileOutputStream; import java.io.*;
import java.io.IOException; import java.util.Base64;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID;
/** /**
* 所有服务统一响应数据格式 * 所有服务统一响应数据格式
@ -101,7 +100,7 @@ public class RestResponse implements Serializable {
/** /**
* 将base64编码转为图片 * 将base64编码转为图片并保存到本地
* @param imgStr * @param imgStr
* @param imgFilePath * @param imgFilePath
* @return * @return
@ -130,5 +129,48 @@ public class RestResponse implements Serializable {
} }
/**
* 将base64编码转为file对象
* @param base64
* @return
* @throws Exception
*/
public static File base64ToFile(String base64) throws Exception {
if(base64.contains("data:image")){
base64 = base64.substring(base64.indexOf(",")+1);
}
base64 = base64.toString().replace("\r\n", "");
//创建文件目录
String prefix=".jpeg";
File file = File.createTempFile(UUID.randomUUID().toString(), prefix);
BufferedOutputStream bos = null;
FileOutputStream fos = null;
try {
BASE64Decoder decoder = new BASE64Decoder();
byte[] bytes = decoder.decodeBuffer(base64);
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos);
bos.write(bytes);
}finally {
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return file;
}
} }

51
src/main/java/com/dreamchaser/depository_manage/pojo/RoleAndMaterialType.java

@ -0,0 +1,51 @@
package com.dreamchaser.depository_manage.pojo;
import lombok.Data;
/**
* 用于存储用户与物料类型之间的权限关系
*/
@Data
public class RoleAndMaterialType {
/**
* id
*/
private Integer id;
/**
* 类型id
*/
private Integer mtid;
/**
* 类型名称
*/
private String tname;
/**
* 类型介绍
*/
private String mtintroduce;
/**
* 类型父级
*/
private Integer mtparentId;
/**
* 用户名称
*/
private String username;
/**
* 用户id
*/
private Integer uid;
/**
* 1个人2岗位
*/
private Integer classes;
/**
* 类型状态
*/
private Integer mtstate;
/**
* 用户工号
*/
private String userNumber;
}

6
src/main/java/com/dreamchaser/depository_manage/pojo/UserByPortP.java

@ -70,6 +70,12 @@ public class UserByPortP {
*/ */
private String depositoryName; private String depositoryName;
/**
* 管理类型
*/
private String materialTypeName;
/** /**
* 是否为本部门负责人12 * 是否为本部门负责人12
*/ */

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

@ -57,6 +57,14 @@ public interface DepositoryService {
Depository findDepositoryById(Integer id); Depository findDepositoryById(Integer id);
/**
* 根据主键id批量获取数据
* @param ids
* @return 查询数据
*/
List<Depository> findDepositoryByIds(List<Integer> ids);
/** /**
* 根据多个id获取数据 * 根据多个id获取数据
* @param ids * @param ids

80
src/main/java/com/dreamchaser/depository_manage/service/RoleService.java

@ -2,6 +2,7 @@ package com.dreamchaser.depository_manage.service;
import com.dreamchaser.depository_manage.entity.Role; import com.dreamchaser.depository_manage.entity.Role;
import com.dreamchaser.depository_manage.pojo.RoleAndDepository; import com.dreamchaser.depository_manage.pojo.RoleAndDepository;
import com.dreamchaser.depository_manage.pojo.RoleAndMaterialType;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -16,6 +17,13 @@ public interface RoleService {
*/ */
Integer addUserOrPostRoleAndDepository(Map<String,Object> map); Integer addUserOrPostRoleAndDepository(Map<String,Object> map);
/**
* 添加用户或者岗位权限及管理的类型
* @param map
* @return
*/
Integer addUserOrPostRoleAndMaterialType(Map<String,Object> map);
/** /**
* 根据使用者id获取角色权限以及管理的仓库 * 根据使用者id获取角色权限以及管理的仓库
@ -47,45 +55,95 @@ public interface RoleService {
List<Integer> findUserIdByDid(Integer did); List<Integer> findUserIdByDid(Integer did);
/** /**
* 根据条件获取权限 * 根据条件获取管理仓库权限
* @param map * @param map 查询条件
* @return * @return
*/ */
List<RoleAndDepository> findRoleAndDepositoryByCondition(Map<String,Object> map); List<RoleAndDepository> findRoleAndDepositoryByCondition(Map<String,Object> map);
/**
* 根据条件获取管理类型权限
* @param map 查询条件
* @return
*/
List<RoleAndMaterialType> findRoleAndMaterialTypeByCondition(Map<String,Object> map);
/** /**
* 根据id获取权限 * 根据条件获取管理仓库权限数量
*
* @param map
* @return
*/
Integer findRoleAndDepositoryCountByCondition(Map<String, Object> map);
/**
* 根据条件获取管理类型权限数量
*
* @param map
* @return
*/
Integer findRoleAndMaterialTypeCountByCondition(Map<String, Object> map);
/**
* 根据id获取用户管理仓库的权限
* @param id * @param id
* @return * @return
*/ */
RoleAndDepository findRoleAndDepositoryById(Integer id); RoleAndDepository findRoleAndDepositoryById(Integer id);
/** /**
* 修改权限列表 * 查询当前物料类型的管理人员
* @param mtId 待查询类型id
* @return
*/
List<RoleAndMaterialType> findRoleAndMaterialTypeByMtId(Long mtId);
/**
* 根据id获取用户管理类型的权限
* @param id
* @return
*/
RoleAndMaterialType findRoleAndMaterialTypeById(Integer id);
/**
* 修改管理仓库权限列表
* @param map * @param map
* @return * @return
*/ */
Integer UpdateRoleAndDepositoryById(Map<String,Object> map); Integer UpdateRoleAndDepositoryById(Map<String,Object> map);
/**
* 修改管理类型权限列表
* @param map
* @return
*/
Integer UpdateRoleAndMaterialTypeById(Map<String,Object> map);
/** /**
* 根据id删除 * 根据id删除仓库管理权限
* @param id * @param id
* @return * @return
*/ */
Integer deleteRoleAndDepositoryById(Integer id); Integer deleteRoleAndDepositoryById(Integer id);
/** /**
* 根据仓库编号查询权限记录 * 根据id删除类型管理权限
* @param did * @param id
* @return * @return
*/ */
List<RoleAndDepository> findRoleAndDepositoryByDid(Integer did); Integer deleteRoleAndMaterialTypeById(Integer id);
/** /**
* 判断当前仓库是否需要入库审批 * 根据仓库编号查询权限记录
* @param did
* @return * @return
*/ */
List<RoleAndDepository> findRoleAndDepositoryByDepositoryIdForIn(Integer depositoryId); List<RoleAndDepository> findRoleAndDepositoryByDid(Integer did);
} }

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

@ -160,11 +160,11 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.put("state", "已入库"); map.put("state", "已入库");
} else { } else {
// 如果需要审批 // 如果需要审批
List<RoleAndDepository> depositoryListForIn = roleService.findRoleAndDepositoryByDepositoryIdForIn(depositoryId); List<RoleAndMaterialType> roleAndMaterials = roleService.findRoleAndMaterialTypeByMtId(material.getMaterialTypeId());
map.put("approverPass", 3); map.put("approverPass", 3);
StringBuilder approverId = new StringBuilder(); StringBuilder approverId = new StringBuilder();
for (RoleAndDepository roleAndDepository : depositoryListForIn) { for (RoleAndMaterialType roleAndMaterialType : roleAndMaterials) {
approverId.append(roleAndDepository.getUserId()).append(","); approverId.append(roleAndMaterialType.getUid()).append(",");
} }
map.put("approverId", approverId.toString()); map.put("approverId", approverId.toString());
map.put("state", "待审核"); map.put("state", "待审核");
@ -657,15 +657,16 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 获取当前物料基本信息 // 获取当前物料基本信息
Integer mid = ObjectFormatUtil.toInteger(map.get("mid")); Integer mid = ObjectFormatUtil.toInteger(map.get("mid"));
Material materialById = materialMapper.findMaterialById(mid); Material materialById = materialMapper.findMaterialById(mid);
map.put("mtId",materialById.getMaterialTypeId());
String unit = (String) map.get("unit"); String unit = (String) map.get("unit");
if ("-1".equals(unit)) { if ("-1".equals(unit)) {
map.put("unit", materialById.getUnit()); map.put("unit", materialById.getUnit());
} }
// 获取当前仓库是否需要审批 // 获取当前类别物料是否需要审批
List<RoleAndDepository> depositoryListForIn = roleService.findRoleAndDepositoryByDepositoryIdForIn(ObjectFormatUtil.toInteger(map.get("depositoryId"))); List<RoleAndMaterialType> roleAndMaterials = roleService.findRoleAndMaterialTypeByMtId(materialById.getMaterialTypeId());
boolean flagForApproval = false; // 默认不需要审批 boolean flagForApproval = false; // 默认不需要审批
if (depositoryListForIn.size() > 0) { if (roleAndMaterials.size() > 0) {
flagForApproval = true; flagForApproval = true;
} }
if (isApprovalPass) { if (isApprovalPass) {

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

@ -1,5 +1,6 @@
package com.dreamchaser.depository_manage.service.impl; package com.dreamchaser.depository_manage.service.impl;
import cn.hutool.core.lang.Snowflake;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.entity.*;
@ -200,6 +201,11 @@ public class DepositoryServiceImpl implements DepositoryService {
return depositoryMapper.findDepositoryById(id); return depositoryMapper.findDepositoryById(id);
} }
@Override
public List<Depository> findDepositoryByIds(List<Integer> ids) {
return depositoryMapper.findDepositoryByIds(ids);
}
/** /**
* 根据条件修改对应数据信息 * 根据条件修改对应数据信息
* *
@ -687,11 +693,25 @@ public class DepositoryServiceImpl implements DepositoryService {
*/ */
@Override @Override
public String findQrCodeByDepository(Integer did) { public String findQrCodeByDepository(Integer did) {
// 通过雪花算法计算随机数
Snowflake snowflake = new Snowflake(10, 10, true);
String qrCode = snowflake.nextIdStr();
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
// 1为库位2为仓库 // 1为库位2为仓库
map.put("flag", 2); map.put("flag", 2);
map.put("depositoryId", did); map.put("depositoryId", did);
return qrCodeMapper.selectQrCodeByDepositoryOrPlace(map);
String qrCodeByDepository = qrCodeMapper.selectQrCodeByDepositoryOrPlace(map);
if (qrCodeByDepository == null) {
Map<String, Object> param = new HashMap<>();
param.put("depositoryId", did);
param.put("qrCode", qrCode);
addQrCodeByDepository(param);
} else {
qrCode = qrCodeByDepository;
}
return qrCode;
} }
/** /**

28
src/main/java/com/dreamchaser/depository_manage/service/impl/GroupServiceImpl.java

@ -785,19 +785,19 @@ public class GroupServiceImpl implements GroupService {
// 获取入库到当前仓库的订单id // 获取入库到当前仓库的订单id
List<Integer> integerList = depositoryIdToRecordId.get(next); List<Integer> integerList = depositoryIdToRecordId.get(next);
// 获取当前仓库的管理员 // 获取当前仓库的管理员
List<RoleAndDepository> depositoryIdForIn = roleMapper.findRoleAndDepositoryByDepositoryIdForIn(next); // List<RoleAndDepository> depositoryIdForIn = roleMapper.findRoleAndDepositoryByDepositoryIdForIn(next);
// 用于存储当前仓库的管理员企业微信userId // 用于存储当前仓库的管理员企业微信userId
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (RoleAndDepository depository : depositoryIdForIn // for (RoleAndDepository depository : depositoryIdForIn
) { // ) {
// 获取管理员数据 // 获取管理员数据
UserByPort userByPort = LinkInterfaceUtil.FindUserById(depository.getUserId(), userToken); // UserByPort userByPort = LinkInterfaceUtil.FindUserById(depository.getUserId(), userToken);
String workwechat = userByPort.getWorkwechat(); // String workwechat = userByPort.getWorkwechat();
if (workwechat == null || "".equals(workwechat)) { // if (workwechat == null || "".equals(workwechat)) {
workwechat = userByPort.getWechat(); // workwechat = userByPort.getWechat();
} // }
sb.append(workwechat).append(","); // sb.append(workwechat).append(",");
} // }
JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(userAgent, userToken, integerList, sb.toString()); JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(userAgent, userToken, integerList, sb.toString());
String sp_no = jsonObject.getString("sp_no"); String sp_no = jsonObject.getString("sp_no");
Map<String, Object> QyWxApprovalMap = new HashMap<>(); Map<String, Object> QyWxApprovalMap = new HashMap<>();
@ -838,13 +838,13 @@ public class GroupServiceImpl implements GroupService {
// 获取入库的仓库 // 获取入库的仓库
Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId")); Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId"));
List<RoleAndDepository> depositoryIdForIn = roleMapper.findRoleAndDepositoryByDepositoryIdForIn(depositoryId); // List<RoleAndDepository> depositoryIdForIn = roleMapper.findRoleAndDepositoryByDepositoryIdForIn(depositoryId);
// 用于标志该仓库是否需要进行审批 // 用于标志该仓库是否需要进行审批
boolean flagForApproval = false; // 默认不需要 boolean flagForApproval = false; // 默认不需要
if (depositoryIdForIn.size() > 0) { // if (depositoryIdForIn.size() > 0) {
flagForApproval = true; // 需要 // flagForApproval = true; // 需要
} // }
map.put("flagForApproval", flagForApproval); map.put("flagForApproval", flagForApproval);
// 定义参数用与入库 // 定义参数用与入库

13
src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java

@ -311,7 +311,6 @@ public class MaterialServiceImpl implements MaterialService {
List<Inventory> list = materialMapper.findInventory(map); List<Inventory> list = materialMapper.findInventory(map);
for (Inventory inventory : list) { for (Inventory inventory : list) {
if (inventory.getPrice() != null) { if (inventory.getPrice() != null) {
inventory.setPrice(inventory.getPrice() / 100); inventory.setPrice(inventory.getPrice() / 100);
} else { } else {
inventory.setPrice(0.0); inventory.setPrice(0.0);
@ -323,7 +322,9 @@ public class MaterialServiceImpl implements MaterialService {
Integer mid = inventory.getId(); Integer mid = inventory.getId();
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(mid, depositoryId); List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(mid, depositoryId);
StringBuilder placeCode = new StringBuilder(); StringBuilder placeCode = new StringBuilder();
StringBuilder placeKingdeeCode = new StringBuilder();
for (PlaceP placeP : placeByMidAndDid) { for (PlaceP placeP : placeByMidAndDid) {
placeKingdeeCode.append(placeP.getKingdeecode()).append(" ");
placeCode.append(placeP.getCode()).append(" "); placeCode.append(placeP.getCode()).append(" ");
} }
if (depositoryId != null) { if (depositoryId != null) {
@ -332,6 +333,7 @@ public class MaterialServiceImpl implements MaterialService {
inventory.setDepositoryCode(code); inventory.setDepositoryCode(code);
} }
inventory.setPlaceCode(placeCode.toString()); inventory.setPlaceCode(placeCode.toString());
inventory.setPlaceKingdeeCode(placeKingdeeCode.toString());
} }
return pack(list); return pack(list);
} }
@ -349,8 +351,7 @@ public class MaterialServiceImpl implements MaterialService {
state = map.get("state"); state = map.get("state");
} }
map.put("state", state); map.put("state", state);
List<Inventory> list = materialMapper.findInventory(map); return materialMapper.findInventory(map);
return list;
} }
/** /**
@ -458,8 +459,10 @@ public class MaterialServiceImpl implements MaterialService {
@Override @Override
public Material findMaterialById(int id) { public Material findMaterialById(int id) {
Material material = materialMapper.findMaterialById(id); Material material = materialMapper.findMaterialById(id);
if (material.getMaterialTypeId() != null) {
MaterialType materialTypeByOldId = materialTypeMapper.findMaterialTypeByOldId(material.getMaterialTypeId()); MaterialType materialTypeByOldId = materialTypeMapper.findMaterialTypeByOldId(material.getMaterialTypeId());
material.setTypeName(materialTypeByOldId.getTname()); material.setTypeName(materialTypeByOldId.getTname());
}
if (material.getPrice() != null) { if (material.getPrice() != null) {
material.setPrice(material.getPrice() / 100); material.setPrice(material.getPrice() / 100);
@ -938,12 +941,14 @@ public class MaterialServiceImpl implements MaterialService {
Integer mid = inventory.getId(); Integer mid = inventory.getId();
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(mid, depositoryId); List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(mid, depositoryId);
StringBuilder placeCode = new StringBuilder(); StringBuilder placeCode = new StringBuilder();
StringBuilder placeKingdeeCode = new StringBuilder();
for (PlaceP placeP : placeByMidAndDid) { for (PlaceP placeP : placeByMidAndDid) {
placeKingdeeCode.append(placeP.getKingdeecode()).append(" ");
placeCode.append(placeP.getCode()).append(" "); placeCode.append(placeP.getCode()).append(" ");
} }
inventory.setPlaceCode(placeCode.toString()); inventory.setPlaceCode(placeCode.toString());
inventory.setPlaceKingdeeCode(placeKingdeeCode.toString());
if (inventory.getPrice() != null) { if (inventory.getPrice() != null) {
inventory.setPrice(inventory.getPrice() / 100); inventory.setPrice(inventory.getPrice() / 100);
} else { } else {
inventory.setPrice(0.0); inventory.setPrice(0.0);

20
src/main/java/com/dreamchaser/depository_manage/service/impl/PlaceServiceImpl.java

@ -1,5 +1,6 @@
package com.dreamchaser.depository_manage.service.impl; package com.dreamchaser.depository_manage.service.impl;
import cn.hutool.core.lang.Snowflake;
import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.MaterialMapper; import com.dreamchaser.depository_manage.mapper.MaterialMapper;
import com.dreamchaser.depository_manage.mapper.PlaceMapper; import com.dreamchaser.depository_manage.mapper.PlaceMapper;
@ -12,10 +13,7 @@ import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service @Service
public class PlaceServiceImpl implements PlaceService { public class PlaceServiceImpl implements PlaceService {
@ -421,11 +419,23 @@ public class PlaceServiceImpl implements PlaceService {
*/ */
@Override @Override
public String findQrCodeByPlace(Integer pid) { public String findQrCodeByPlace(Integer pid) {
// 通过雪花算法计算随机数
Snowflake snowflake = new Snowflake(10,10,true);
String qrCode = snowflake.nextIdStr();
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
// 1为库位2为仓库 // 1为库位2为仓库
map.put("flag", 1); map.put("flag", 1);
map.put("pid", pid); map.put("pid", pid);
return qrCodeMapper.selectQrCodeByDepositoryOrPlace(map); String qrCodeByDepository = qrCodeMapper.selectQrCodeByDepositoryOrPlace(map);
if(qrCodeByDepository == null) {
Map<String, Object> param = new HashMap<>();
param.put("pid", pid);
param.put("qrCode", qrCode);
addQrCodeByPlace(param);
}else{
qrCode = qrCodeByDepository;
}
return qrCode;
} }
/** /**

162
src/main/java/com/dreamchaser/depository_manage/service/impl/RoleServiceImpl.java

@ -1,9 +1,12 @@
package com.dreamchaser.depository_manage.service.impl; package com.dreamchaser.depository_manage.service.impl;
import com.dreamchaser.depository_manage.entity.Depository; import com.dreamchaser.depository_manage.entity.Depository;
import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.mapper.DepositoryMapper; import com.dreamchaser.depository_manage.mapper.DepositoryMapper;
import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper;
import com.dreamchaser.depository_manage.mapper.RoleMapper; import com.dreamchaser.depository_manage.mapper.RoleMapper;
import com.dreamchaser.depository_manage.pojo.RoleAndDepository; import com.dreamchaser.depository_manage.pojo.RoleAndDepository;
import com.dreamchaser.depository_manage.pojo.RoleAndMaterialType;
import com.dreamchaser.depository_manage.service.RoleService; import com.dreamchaser.depository_manage.service.RoleService;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil; import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -23,8 +26,13 @@ public class RoleServiceImpl implements RoleService {
@Autowired @Autowired
DepositoryMapper depositoryMapper; DepositoryMapper depositoryMapper;
@Autowired
MaterialTypeMapper materialTypeMapper;
/** /**
* 添加用户或者岗位权限及管理的仓库 * 添加用户或者岗位权限及管理的仓库
*
* @param map * @param map
* @return * @return
*/ */
@ -36,8 +44,25 @@ public class RoleServiceImpl implements RoleService {
map.put("depositoryIds", depositoryByParent); map.put("depositoryIds", depositoryByParent);
return roleMapper.addUserOrPostRoleAndDepositorys(map); return roleMapper.addUserOrPostRoleAndDepositorys(map);
} }
/**
* 添加用户或者岗位权限及管理的类型
*
* @param map
* @return
*/
@Override
public Integer addUserOrPostRoleAndMaterialType(Map<String, Object> map) {
long mtId = ObjectFormatUtil.toLong(map.get("mtid"));
MaterialType materialTypeByOldId = materialTypeMapper.findMaterialTypeByOldId(mtId);
List<Long> childForMaterialTypeByParent = findChildForMaterialTypeByParent(materialTypeByOldId);
map.put("mtIds", childForMaterialTypeByParent);
return roleMapper.addUserOrPostRoleAndMaterialTypes(map);
}
/** /**
* 根据使用者id获取角色权限以及管理的正常使用的仓库 * 根据使用者id获取角色权限以及管理的正常使用的仓库
*
* @param userid * @param userid
* @return * @return
*/ */
@ -45,8 +70,10 @@ public class RoleServiceImpl implements RoleService {
public List<RoleAndDepository> findDepositoryAndRole(Integer userid) { public List<RoleAndDepository> findDepositoryAndRole(Integer userid) {
return roleMapper.findDepositoryAndRole(userid); return roleMapper.findDepositoryAndRole(userid);
} }
/** /**
* 修改用户或者岗位权限及管理的仓库 * 修改用户或者岗位权限及管理的仓库
*
* @param map * @param map
* @return * @return
*/ */
@ -57,6 +84,7 @@ public class RoleServiceImpl implements RoleService {
/** /**
* 获取当前登录用户的权限 * 获取当前登录用户的权限
*
* @param userid * @param userid
* @return * @return
*/ */
@ -72,16 +100,69 @@ public class RoleServiceImpl implements RoleService {
/** /**
* 根据条件获取权限 * 根据条件获取权限
*
* @param map * @param map
* @return * @return
*/ */
@Override @Override
public List<RoleAndDepository> findRoleAndDepositoryByCondition(Map<String, Object> map) { public List<RoleAndDepository> findRoleAndDepositoryByCondition(Map<String, Object> map) {
Integer size = 10, page = 1;
if (map.containsKey("size")) {
size = ObjectFormatUtil.toInteger(map.get("size"));
map.put("size", size);
}
if (map.containsKey("page")) {
page = ObjectFormatUtil.toInteger(map.get("page"));
map.put("begin", (page - 1) * size);
}
return roleMapper.findRoleAndDepositoryByCondition(map); return roleMapper.findRoleAndDepositoryByCondition(map);
} }
/**
* 根据条件获取管理类型权限
*
* @param map 查询条件
* @return
*/
@Override
public List<RoleAndMaterialType> findRoleAndMaterialTypeByCondition(Map<String, Object> map) {
Integer size = 10, page = 1;
if (map.containsKey("size")) {
size = ObjectFormatUtil.toInteger(map.get("size"));
map.put("size", size);
}
if (map.containsKey("page")) {
page = ObjectFormatUtil.toInteger(map.get("page"));
map.put("begin", (page - 1) * size);
}
return roleMapper.findRoleAndMaterialTypeByCondition(map);
}
/**
* 根据条件获取管理类型仓库数量
*
* @param map
* @return
*/
@Override
public Integer findRoleAndDepositoryCountByCondition(Map<String, Object> map) {
return roleMapper.findRoleAndDepositoryCountByCondition(map);
}
/**
* 根据条件获取管理类型权限数量
*
* @param map
* @return
*/
@Override
public Integer findRoleAndMaterialTypeCountByCondition(Map<String, Object> map) {
return roleMapper.findRoleAndMaterialTypeCountByCondition(map);
}
/** /**
* 根据id获取权限 * 根据id获取权限
*
* @param id * @param id
* @return * @return
*/ */
@ -90,8 +171,32 @@ public class RoleServiceImpl implements RoleService {
return roleMapper.findRoleAndDepositoryById(id); return roleMapper.findRoleAndDepositoryById(id);
} }
/**
* 查询当前物料类型的管理人员
* @param mtId 待查询类型id
* @return
*/
@Override
public List<RoleAndMaterialType> findRoleAndMaterialTypeByMtId(Long mtId) {
Map<String, Object> map = new HashMap<>();
map.put("mtid",mtId);
return roleMapper.findRoleAndMaterialTypeByCondition(map);
}
/**
* 根据id获取用户管理类型的权限
*
* @param id
* @return
*/
@Override
public RoleAndMaterialType findRoleAndMaterialTypeById(Integer id) {
return roleMapper.findRoleAndMaterialTypeById(id);
}
/** /**
* 修改权限列表 * 修改权限列表
*
* @param map * @param map
* @return * @return
*/ */
@ -99,8 +204,21 @@ public class RoleServiceImpl implements RoleService {
public Integer UpdateRoleAndDepositoryById(Map<String, Object> map) { public Integer UpdateRoleAndDepositoryById(Map<String, Object> map) {
return roleMapper.UpdateRoleAndDepositoryById(map); return roleMapper.UpdateRoleAndDepositoryById(map);
} }
/**
* 修改管理类型权限列表
*
* @param map
* @return
*/
@Override
public Integer UpdateRoleAndMaterialTypeById(Map<String, Object> map) {
return roleMapper.UpdateRoleAndMaterialTypeById(map);
}
/** /**
* 根据id删除 * 根据id删除
*
* @param id * @param id
* @return * @return
*/ */
@ -109,8 +227,20 @@ public class RoleServiceImpl implements RoleService {
return roleMapper.deleteRoleAndDepositoryById(id); return roleMapper.deleteRoleAndDepositoryById(id);
} }
/**
* 根据id删除类型管理权限
*
* @param id
* @return
*/
@Override
public Integer deleteRoleAndMaterialTypeById(Integer id) {
return roleMapper.deleteRoleAndMaterialTypeById(id);
}
/** /**
* 根据仓库编号查询权限记录 * 根据仓库编号查询权限记录
*
* @param did * @param did
* @return * @return
*/ */
@ -120,22 +250,14 @@ public class RoleServiceImpl implements RoleService {
map.put("depositoryId", did); map.put("depositoryId", did);
return roleMapper.findRoleAndDepositoryByCondition(map); return roleMapper.findRoleAndDepositoryByCondition(map);
} }
/**
* 判断当前仓库是否需要入库审批
* @return
*/
@Override
public List<RoleAndDepository> findRoleAndDepositoryByDepositoryIdForIn(Integer depositoryId) {
return roleMapper.findRoleAndDepositoryByDepositoryIdForIn(depositoryId);
}
/** /**
* 获取当前仓库的子仓库 * 获取当前仓库的子仓库
*
* @param depositoryId 当前待查询仓库id * @param depositoryId 当前待查询仓库id
* @return * @return
*/ */
// 根据id获取子类
public List<Integer> findChildForDepositoryByParent(Integer depositoryId) { public List<Integer> findChildForDepositoryByParent(Integer depositoryId) {
List<Integer> result = new ArrayList<>(); List<Integer> result = new ArrayList<>();
result.add(depositoryId); result.add(depositoryId);
@ -150,4 +272,26 @@ public class RoleServiceImpl implements RoleService {
} }
return result; return result;
} }
/**
* 获取当前类型的子类型
*
* @param mt 当前待查询类型
* @return
*/
public List<Long> findChildForMaterialTypeByParent(MaterialType mt) {
List<Long> result = new ArrayList<>();
result.add(mt.getOldId());
List<Long> parentId = new ArrayList<>();
parentId.add(mt.getOldId());
List<MaterialType> materialTypeAll = materialTypeMapper.findMaterialTypeAll();
for (MaterialType materialType : materialTypeAll) {
if (parentId.contains(materialType.getParentId())) {
parentId.add(materialType.getOldId());
result.add(materialType.getOldId());
}
}
return result;
}
} }

10
src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java

@ -3,6 +3,7 @@ package com.dreamchaser.depository_manage.service.impl;
import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.*; import com.dreamchaser.depository_manage.mapper.*;
import com.dreamchaser.depository_manage.pojo.RoleAndDepository; import com.dreamchaser.depository_manage.pojo.RoleAndDepository;
import com.dreamchaser.depository_manage.pojo.RoleAndMaterialType;
import com.dreamchaser.depository_manage.pojo.SplitInfoP; import com.dreamchaser.depository_manage.pojo.SplitInfoP;
import com.dreamchaser.depository_manage.service.DepositoryRecordService; import com.dreamchaser.depository_manage.service.DepositoryRecordService;
import com.dreamchaser.depository_manage.service.SplitUnitService; import com.dreamchaser.depository_manage.service.SplitUnitService;
@ -88,11 +89,16 @@ public class SplitUnitServiceImpl implements SplitUnitService {
SplitInfo splitInfoForUnit = splitUnitMapper.findSplitInfoByMidAndUnit(paramForSplitInfo); SplitInfo splitInfoForUnit = splitUnitMapper.findSplitInfoByMidAndUnit(paramForSplitInfo);
// 获取当前仓库是否有用户进行管理入库审批 // 获取当前仓库是否有用户进行管理入库审批
List<RoleAndDepository> roleAndDepositoryByCondition = roleMapper.findRoleAndDepositoryByDepositoryIdForIn(ObjectFormatUtil.toInteger(map.get("depositoryId"))); Map<String, Object> paramForMtRole = new HashMap<>();
Material materialById = materialMapper.findMaterialById(ObjectFormatUtil.toInteger(map.get("mid")));
paramForMtRole.put("mtid",materialById.getMaterialTypeId());
map.put("mtId",materialById.getMaterialTypeId());
List<RoleAndMaterialType> roleAndMaterials = roleMapper.findRoleAndMaterialTypeByCondition(paramForMtRole);
// 用于标志该仓库是否需要进行审批 // 用于标志该仓库是否需要进行审批
boolean flagForApproval = false; // 默认不需要 boolean flagForApproval = false; // 默认不需要
if (roleAndDepositoryByCondition.size() > 0) { if (roleAndMaterials.size() > 0) {
flagForApproval = true; flagForApproval = true;
} }
map.put("flagForApproval",flagForApproval); map.put("flagForApproval",flagForApproval);

115
src/main/java/com/dreamchaser/depository_manage/utils/ZipMultiFileUtil.java

@ -0,0 +1,115 @@
package com.dreamchaser.depository_manage.utils;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 压缩工具类
*/
public class ZipMultiFileUtil {
private static final Logger logger = LoggerFactory.getLogger(ZipMultiFileUtil.class);
/**
* 获取当前系统的临时目录
*/
private static final String FILE_PATH = System.getProperty("java.io.tmpdir") + File.separator;
private static final int ZIP_BUFFER_SIZE = 8192;
/**
* zip打包下载
*
* @param response
* @param zipFileName
* @param fileList
*/
public static void zipDownload(HttpServletResponse response, String zipFileName, List<File> fileList) {
// zip文件路径
String zipPath = FILE_PATH + zipFileName;
try {
//创建zip输出流
try (ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipPath))) {
//声明文件集合用于存放文件
byte[] buffer = new byte[1024];
//将文件放入zip压缩包
for (File file : fileList) {
try (FileInputStream fis = new FileInputStream(file)) {
out.putNextEntry(new ZipEntry(file.getName()));
int len;
// 读入需要下载的文件的内容,打包到zip文件
while ((len = fis.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
out.closeEntry();
}
}
}
//下载zip文件
downFile(response, zipFileName);
} catch (Exception e) {
logger.error("文件下载出错", e);
} finally {
// zip文件也删除
fileList.add(new File(zipPath));
deleteFile(fileList);
}
}
/**
* 文件下载
*
* @param response
* @param zipFileName
*/
private static void downFile(HttpServletResponse response, String zipFileName) {
try {
String path = FILE_PATH + zipFileName;
File file = new File(path);
if (file.exists()) {
try (InputStream ins = new FileInputStream(path);
BufferedInputStream bins = new BufferedInputStream(ins);
OutputStream outs = response.getOutputStream();
BufferedOutputStream bouts = new BufferedOutputStream(outs)) {
response.setContentType("application/x-download");
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(zipFileName, "UTF-8"));
int bytesRead = 0;
byte[] buffer = new byte[ZIP_BUFFER_SIZE];
while ((bytesRead = bins.read(buffer, 0, ZIP_BUFFER_SIZE)) != -1) {
bouts.write(buffer, 0, bytesRead);
}
bouts.flush();
}
}
} catch (Exception e) {
logger.error("文件下载出错", e);
}
}
/**
* 删除文件
*
* @param fileList
* @return
*/
public static void deleteFile(List<File> fileList) {
for (File file : fileList) {
if (file.exists()) {
file.delete();
}
}
}
}

2
src/main/resources/templates/pages/company/company-out.html

@ -84,7 +84,7 @@
height: 'full-255',//固定高度-即固定表头固定第一行首行 height: 'full-255',//固定高度-即固定表头固定第一行首行
request: { request: {
pageName: 'page', //页码的参数名称,默认:page pageName: 'page', //页码的参数名称,默认:page
limitName: 'pagesize', //每页数据量的参数名,默认:limit limitName: 'size', //每页数据量的参数名,默认:limit
}, },
where: { where: {
superior: parentId, superior: parentId,

2
src/main/resources/templates/pages/company/companyByParentId.html

@ -84,7 +84,7 @@
}, },
request: { request: {
pageName: 'page', //页码的参数名称,默认:page pageName: 'page', //页码的参数名称,默认:page
limitName: 'pagesize' //每页数据量的参数名,默认:limit limitName: 'size' //每页数据量的参数名,默认:limit
}, },
where: { where: {
superior: parentId, superior: parentId,

193
src/main/resources/templates/pages/constructionunit/constructionunit_add.html

@ -0,0 +1,193 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>layui</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="/static/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/public.css" media="all">
</head>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<fieldset class="table-search-fieldset">
<legend>仓库创建</legend>
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-card-body" style="padding-top: 40px;">
<div>
<form class="layui-form layui-form-pane"
style="margin: 0 auto;max-width: 700px;padding-top: 100px; padding-bottom: 200px" lay-filter="form1">
<div class="layui-form-item">
<label class="layui-form-label">仓库名称:</label>
<div class="layui-input-block">
<input type="text" placeholder="请填写仓库名称" class="layui-input"
name="dname" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">所处公司:</label>
<div class="layui-input-block">
<select name="cid" lay-filter="company" lay-verify="required" >
<option value="" selected>请选择公司</option>
<option th:each="administrationP,iterStar:${administrationPList}" th:value="${administrationP?.getId()}" th:text="${administrationP?.getName()}" >外芯仓库</option>
</select>
</div>
</div>
<div class="layui-form-item" >
<label class="layui-form-label">部门</label>
<div class="layui-input-block">
<select name="adminorg" id="adminorg" lay-verify="required"></select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">父级仓库:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择仓库" class="layui-input" id="openSonByDepository" readonly />
<input type="text" name="depositoryId" class="layui-input" id="depositoryId" style="display: none" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">地址:</label>
<div class="layui-input-block">
<input type="text" placeholder="请填写仓库地址" class="layui-input"
name="address" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">仓库介绍:</label>
<div class="layui-input-block">
<input name="introduce" placeholder="请填写仓库介绍..."
class="layui-input"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">最大存储量:</label>
<div class="layui-input-block">
<input name="maxNumber" placeholder="请填写最大存储量..."
class="layui-input" value="5000"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">最小存储量:</label>
<div class="layui-input-block">
<input name="minNumber" placeholder="请填写最小存储量..."
class="layui-input" value="0"/>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep">
&emsp;创建仓库&emsp;
</button>
</div>
</div>
</form>
</div>
</div>
<hr>
</div>
</div>
</fieldset>
</div>
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
var data;
layui.use(['form', 'layer'], function () {
var $ = layui.jquery,
form = layui.form,
layer = layui.layer;
form.on('select(company)',function (data){
$.ajax({
url:"/repository/findPostByCompany?company=0"+data.value,
type:'get',
dataType:'json',
contentType: "application/json;charset=utf-8",
success:function(d){
if(data.value !== "") {
$('#adminorg').empty();
$('#adminorg').append(new Option("请选择部门", ""));
$.each(d.data, function (index, item) {
$('#adminorg').append(new Option(item.name, item.id));//往下拉菜单里添加元素
});
form.render();
}else{
$('#adminorg').empty();
form.render();
}
}
})
});
$('#openSonByDepository').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: '/selectDepository?type=2',
success: function(layero, index){
var children = layero.children();
var content = $(children[1]);
var iframeChildren = $(content.children());
content.css('height','100%');
iframeChildren.css('height','100%');
}
});
});
form.on('submit(formStep)', function (data) {
$.ajax({
url: "/repository/depository",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(data.field),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
return;
} else {
layer.msg("添加成功!", {
icon: 6,//成功的表情
time: 1000 //1秒关闭(如果不配置,默认是3秒)
},function () {
window.location="/depository_add"
});
}
},
complete: function () {
form.val("form1", {
"dname": "",// "name": "value"
"address": "",
"introduce": ""
})
}
})
return false;
});
});
</script>
</body>
</html>

26
src/main/resources/templates/pages/depository/table-in.html

@ -79,6 +79,10 @@
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table> <table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<script id="applicationInCode" type="text/html">
<a id="{{d.id}}" onclick="showDetail(this)">{{d.aircode}}</a>
</script>
<script type="text/html" id="currentTableBar"> <script type="text/html" id="currentTableBar">
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="detail">详情</a> <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="detail">详情</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete" th:style="'display:'+${display}">删除</a> <a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete" th:style="'display:'+${display}">删除</a>
@ -93,6 +97,9 @@
} }
function selectMaterialByName(obj) { function selectMaterialByName(obj) {
}
function showDetail(){
} }
layui.use(['form', 'table', 'laydate'], function () { layui.use(['form', 'table', 'laydate'], function () {
@ -156,7 +163,7 @@
cols: [ cols: [
[ [
{type: "checkbox", width: 50}, {type: "checkbox", width: 50},
{field: 'aircode', width: 150, title: '提交编码', sort: true}, {title: '存货编码', width: 150, templet: '#applicationInCode'},
{field: 'mname', width: 150, title: '物料名称'}, {field: 'mname', width: 150, title: '物料名称'},
{field: 'mversion', width: 150, title: '规格型号'}, {field: 'mversion', width: 150, title: '规格型号'},
{field: 'airUnit', width: 100, title: '计量单位'}, {field: 'airUnit', width: 100, title: '计量单位'},
@ -352,6 +359,23 @@
}); });
}; };
showDetail = function (obj) {
var index = layer.open({
title: '入库信息详情',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/form_step_look?id=' + obj.id,
});
$(window).on("resize", function () {
layer.full(index);
});
return false;
}
}); });
</script> </script>

9
src/main/resources/templates/pages/depository/table-stock.html

@ -179,6 +179,7 @@
$.each(res['data'], function (i, j) { $.each(res['data'], function (i, j) {
let jElement = j['warningCount']; let jElement = j['warningCount'];
let placeCode = j['placeCode'].split(" "); let placeCode = j['placeCode'].split(" ");
let placeKingdeeCode = j['placeKingdeeCode'].split(" ");
let depositoryId = j['depositoryId']; let depositoryId = j['depositoryId'];
let unit = j['unit']; let unit = j['unit'];
let mid = j['id']; let mid = j['id'];
@ -196,9 +197,9 @@
// 用于库位的添加 // 用于库位的添加
var aItem = placeCodeItem.childNodes[0]; var aItem = placeCodeItem.childNodes[0];
// 用于计量单位的添加 // 用于计量单位的添加
for (let k = 0; k < placeCode.length; k++) { for (let k = 0; k < placeKingdeeCode.length; k++) {
if (placeCode[k] !== "") { if (placeKingdeeCode[k] !== "") {
$(aItem).append('<button id=' + mid + ' class="layui-btn layui-btn-primary layui-btn-xs" onclick="changePlaceCode(this)" value=' + depositoryId + '>' + placeCode[k] + '</button>') $(aItem).append('<button code='+placeCode[k]+' id=' + mid + ' class="layui-btn layui-btn-primary layui-btn-xs" onclick="changePlaceCode(this)" value=' + depositoryId + '>' + placeKingdeeCode[k] + '</button>')
} }
} }
@ -417,7 +418,7 @@
// 用于更改同一仓库下的库位 // 用于更改同一仓库下的库位
changePlaceCode = function (obj) { changePlaceCode = function (obj) {
var depositoryId = obj.value; var depositoryId = obj.value;
var placeCode = obj.innerText; var placeCode = obj.getAttribute("code");
var mid = obj.id; var mid = obj.id;
// 当前点击行中的计量单位按钮 // 当前点击行中的计量单位按钮
let unitBtn = obj.parentNode.parentNode.parentNode.childNodes[5].childNodes[0].childNodes[1]; let unitBtn = obj.parentNode.parentNode.parentNode.childNodes[5].childNodes[0].childNodes[1];

3
src/main/resources/templates/pages/material/material-add.html

@ -34,6 +34,9 @@
.inputdiv .layui-unselect{ .inputdiv .layui-unselect{
border-style: none; border-style: none;
} }
.layuimini-container .table-search-fieldset{
z-index: 0;
}
</style> </style>
<div class="layuimini-container"> <div class="layuimini-container">
<div class="layuimini-main"> <div class="layuimini-main">

37
src/main/resources/templates/pages/material/material-out.html

@ -94,6 +94,9 @@
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter" style="margin-top: 123px"></table> <table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter" style="margin-top: 123px"></table>
<script id="materialCode" type="text/html">
<a id="{{d.id}}" onclick="showDetail(this)">{{d.code}}</a>
</script>
<script type="text/html" id="currentTableBar"> <script type="text/html" id="currentTableBar">
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="detail">详情</a> <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="detail">详情</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" th:style="'display:'+${display}" lay-event="delete">删除</a> <a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" th:style="'display:'+${display}" lay-event="delete">删除</a>
@ -106,6 +109,9 @@
<script> <script>
function bindTableToolbarFunction(){ function bindTableToolbarFunction(){
}
function showDetail(){
} }
layui.use(['form', 'table', 'upload'], function () { layui.use(['form', 'table', 'upload'], function () {
var $ = layui.jquery, var $ = layui.jquery,
@ -136,7 +142,7 @@
let cols = [ let cols = [
{type: "checkbox", width: 50}, {type: "checkbox", width: 50},
{field: 'code', width: 150, title: '存货编码', sort: true}, {title: '存货编码', width: 150, templet: '#materialCode'},
{field: 'mname', width: 120, title: '物料名称', sort: false}, {field: 'mname', width: 120, title: '物料名称', sort: false},
{field: 'typeName', width: 150, title: '物料种类'}, {field: 'typeName', width: 150, title: '物料种类'},
{field: 'version', width: 200, title: '规格型号', sort: false}, {field: 'version', width: 200, title: '规格型号', sort: false},
@ -234,13 +240,14 @@
done: function (res) { done: function (res) {
layer.closeAll('loading'); //关闭loading layer.closeAll('loading'); //关闭loading
if (res.code === 200) {
//如果上传成功 //如果上传成功
var re = ""; var re = "";
for (let i = 0; i < res.data.errMsg.length; i++) { for (let i = 0; i < res.data.errMsg.length; i++) {
var show = "<p style='color: #ff211e'>" + res.data.errMsg[i] + ":错误" + "</p>"; var show = "<p style='color: #ff211e'>" + res.data.errMsg[i] + ":错误" + "</p>";
re += show re += show
} }
if (res.code === 200) {
for (let i = 0; i < res.data.dataList.length; i++) { for (let i = 0; i < res.data.dataList.length; i++) {
var mname = res.data.dataList[i]["mname"]; var mname = res.data.dataList[i]["mname"];
var code = res.data.dataList[i]["code"] == null || res.data.dataList[i]["code"] === undefined ? "" : res.data.dataList[i]["code"]; var code = res.data.dataList[i]["code"] == null || res.data.dataList[i]["code"] === undefined ? "" : res.data.dataList[i]["code"];
@ -554,6 +561,32 @@
} }
}) })
}); });
showDetail = function (obj) {
var index = layer.open({
title: '物料信息详情',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/material_view?id=' + obj.id,
end: function () {
//执行搜索重载
table.reload('currentTableId', {
url: '/material/material',
page: {
curr: 1
}
}, 'data');
}
});
$(window).on("resize", function () {
layer.full(index);
});
return false;
}
}); });
</script> </script>

2
src/main/resources/templates/pages/post/post-out.html

@ -85,7 +85,7 @@
height: 'full-255',//固定高度-即固定表头固定第一行首行 height: 'full-255',//固定高度-即固定表头固定第一行首行
request: { request: {
pageName: 'page', //页码的参数名称,默认:page pageName: 'page', //页码的参数名称,默认:page
limitName: 'pagesize', //每页数据量的参数名,默认:limit limitName: 'size', //每页数据量的参数名,默认:limit
}, },
where: { where: {
organization: parentId organization: parentId

2
src/main/resources/templates/pages/post/postRole.html

@ -50,7 +50,7 @@
height: 'full-255',//固定高度-即固定表头固定第一行首行 height: 'full-255',//固定高度-即固定表头固定第一行首行
request: { request: {
pageName: 'page', //页码的参数名称,默认:page pageName: 'page', //页码的参数名称,默认:page
limitName: 'pagesize' //每页数据量的参数名,默认:limit limitName: 'size' //每页数据量的参数名,默认:limit
}, },
response: { response: {
statusName: 'status' //规定数据状态的字段名称,默认:code statusName: 'status' //规定数据状态的字段名称,默认:code

2
src/main/resources/templates/pages/user/table-user.html

@ -92,7 +92,7 @@
height: 'full-255',//固定高度-即固定表头固定第一行首行 height: 'full-255',//固定高度-即固定表头固定第一行首行
request: { request: {
pageName: 'page', //页码的参数名称,默认:page pageName: 'page', //页码的参数名称,默认:page
limitName: 'pagesize' //每页数据量的参数名,默认:limit limitName: 'size' //每页数据量的参数名,默认:limit
}, },
response: { response: {
statusName: 'status' //规定数据状态的字段名称,默认:code statusName: 'status' //规定数据状态的字段名称,默认:code

111
src/main/resources/templates/pages/user/user-addForIn.html

@ -0,0 +1,111 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>layui</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="/static/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<input type="text" name="userid" th:value="${userByPort.getId()}" style="display: none">
<input type="text" name="classes" th:value="${classes}" style="display: none">
<div class="layui-form-item">
<label class="layui-form-label required">用户名</label>
<div class="layui-input-block">
<input type="text" lay-verify="required" lay-reqtext="用户名不能为空" placeholder="请输入用户名" th:value="${userByPort.getName()}" class="layui-input">
<tip>填写自己管理账号的名称。</tip>
</div>
</div>
<div class=" layui-form-item" >
<label class="layui-form-label required">负责类型:</label>
<div class="layui-inline" style="margin-bottom: 10px">
<input type="text" placeholder="请选择类型" class="layui-input" id="openSonByMateralType" readonly/>
<input type="text" name="mtid" class="layui-input" id="materialTypeId" style="display: none" />
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
</div>
</div>
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
layui.use(['form','layer','laydate'], function () {
var form = layui.form,
layer = layui.layer,
laydate=layui.laydate,
$ = layui.$;
$('#openSonByMateralType').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: '/selectType',
success: function(layero, index){
var children = layero.children();
var content = $(children[1]);
var iframeChildren = $(content.children());
content.css('height','100%');
iframeChildren.css('height','100%');
}
});
});
//日期
laydate.render({
elem: '#date'
});
//监听提交
form.on('submit(saveBtn)', function (data) {
data=data.field;
//去除对应的仓库id
if (data.depositoryId===""){
delete data.depositoryId;
}
$.ajax({
url: "/sys/user_roleForIn",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(data),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
return;
} else {
layer.msg("申请提交成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
},function(){
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);//关闭当前页
})
}
}
});
return false;
});
});
</script>
</body>
</html>

112
src/main/resources/templates/pages/user/user-role-editForIn.html

@ -0,0 +1,112 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>layui</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="/static/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<input type="text" name="userid" th:value="${userByPort.getId()}" style="display: none">
<input type="text" name="roleId" th:value="${roleId}" style="display: none">
<div class="layui-form-item">
<label class="layui-form-label required">用户名</label>
<div class="layui-input-block">
<input type="text" lay-verify="required" lay-reqtext="用户名不能为空" placeholder="请输入用户名" th:value="${userByPort.getName()}" class="layui-input" readonly>
<tip>填写自己管理账号的名称。</tip>
</div>
</div>
<div class=" layui-form-item" >
<label class="layui-form-label required">负责类型:</label>
<div class="layui-inline" style="margin-bottom: 10px">
<input type="text" placeholder="请选择类型" class="layui-input" id="openSonByMateralType" readonly th:value="${userByPort.getMaterialTypeName()}"
lay-verify="required"/>
<input type="text" th:value="${mtid}" name="mtid" class="layui-input" id="materialTypeId" style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
</div>
</div>
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
layui.use(['form','layer','laydate'], function () {
var form = layui.form,
layer = layui.layer,
laydate=layui.laydate,
$ = layui.$;
$('#openSonByMateralType').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: '/selectType',
success: function(layero, index){
var children = layero.children();
var content = $(children[1]);
var iframeChildren = $(content.children());
content.css('height','100%');
iframeChildren.css('height','100%');
}
});
});
//日期
laydate.render({
elem: '#date'
});
//监听提交
form.on('submit(saveBtn)', function (data) {
data=data.field;
//去除对应的仓库id
if (data.mtid===""){
delete data.mtid;
}
$.ajax({
url: "/sys/userRole_editForIn",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(data),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
return;
} else {
layer.msg("修改成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
},function(){
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);//关闭当前页
})
}
}
});
return false;
});
});
</script>
</body>
</html>

2
src/main/resources/templates/pages/user/userRole.html

@ -48,7 +48,7 @@
height: 'full-255',//固定高度-即固定表头固定第一行首行 height: 'full-255',//固定高度-即固定表头固定第一行首行
request: { request: {
pageName: 'page', //页码的参数名称,默认:page pageName: 'page', //页码的参数名称,默认:page
limitName: 'pagesize' //每页数据量的参数名,默认:limit limitName: 'size' //每页数据量的参数名,默认:limit
}, },
response: { response: {
statusName: 'status' //规定数据状态的字段名称,默认:code statusName: 'status' //规定数据状态的字段名称,默认:code

26
src/main/resources/templates/pages/user/userRoleForIn.html

@ -15,8 +15,8 @@
<input id="userId" style="display: none" th:value="${userId}"> <input id="userId" style="display: none" th:value="${userId}">
<script type="text/html" id="toolbarDemo"> <script type="text/html" id="toolbarDemo">
<div class="layui-btn-container"> <div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add_role">添加仓库</button> <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add_role">添加类型</button>
<button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete">删除仓库</button> <button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete">删除类型</button>
</div> </div>
</script> </script>
<table id="demo" class="layui-hide" lay-filter="currentTableFilter"></table> <table id="demo" class="layui-hide" lay-filter="currentTableFilter"></table>
@ -36,7 +36,7 @@
//第一个实例 //第一个实例
table.render({ table.render({
elem: '#demo' elem: '#demo'
, url: 'findUserRole?userId=' + userId+'&classes=3', //数据接口 , url: '/findUserInRole?userId=' + userId+'&classes=1', //数据接口
parseData: function (res) { //res 即为原始返回的数据 parseData: function (res) { //res 即为原始返回的数据
return { return {
"status": res.status, //解析接口状态 "status": res.status, //解析接口状态
@ -48,7 +48,7 @@
// height: 'full-255',//固定高度-即固定表头固定第一行首行 // height: 'full-255',//固定高度-即固定表头固定第一行首行
request: { request: {
pageName: 'page', //页码的参数名称,默认:page pageName: 'page', //页码的参数名称,默认:page
limitName: 'pagesize' //每页数据量的参数名,默认:limit limitName: 'size' //每页数据量的参数名,默认:limit
}, },
response: { response: {
statusName: 'status' //规定数据状态的字段名称,默认:code statusName: 'status' //规定数据状态的字段名称,默认:code
@ -60,8 +60,7 @@
, cols: [ , cols: [
[ //表头 [ //表头
{type: "checkbox", width: 50}, {type: "checkbox", width: 50},
{field: 'id', width: 80, title: 'ID', sort: true}, {field: 'materialTypeName', width: 200, title: '类型名称', sort: true},
{field: 'depositoryName', width: 200, title: '仓库名称', sort: true},
{field: 'number', width: 100, title: '工号', sort: true}, {field: 'number', width: 100, title: '工号', sort: true},
{field: 'name', width: 100, title: '姓名', sort: true}, {field: 'name', width: 100, title: '姓名', sort: true},
{field: 'mobilephone', width: 200, title: '内线电话', sort: true}, {field: 'mobilephone', width: 200, title: '内线电话', sort: true},
@ -74,10 +73,7 @@
limits: [10, 15, 20, 25, 50, 100], limits: [10, 15, 20, 25, 50, 100],
limit: 10, limit: 10,
page: true, page: true,
skin: 'line', skin: 'line'
done:function () {
$("[data-field='id']").css('display','none');
}
}); });
//监听表格复选框选择 //监听表格复选框选择
table.on('checkbox(currentTableFilter)', function (obj) { table.on('checkbox(currentTableFilter)', function (obj) {
@ -93,7 +89,7 @@
maxmin:true, maxmin:true,
shadeClose: true, shadeClose: true,
area: ['100%', '100%'], area: ['100%', '100%'],
content: '/user_role_edit?id='+data.id, content: '/user_role_editForIn?id='+data.id,
end:function () { end:function () {
location.reload() location.reload()
} }
@ -108,7 +104,7 @@
req.id = data.id; req.id = data.id;
layer.confirm('真的删除么', {icon: 2, title: '提示'}, function (index) { layer.confirm('真的删除么', {icon: 2, title: '提示'}, function (index) {
$.ajax({ $.ajax({
url: '/sys/userRole_del', url: '/sys/userRole_delForIn',
dataType: 'json', dataType: 'json',
type: 'POST', type: 'POST',
contentType: "application/json;charset=utf-8", contentType: "application/json;charset=utf-8",
@ -142,7 +138,7 @@
maxmin:true, maxmin:true,
shadeClose: true, shadeClose: true,
area: ['100%', '100%'], area: ['100%', '100%'],
content: '/user_add?userId='+userId+'&classes=3', content: '/user_addForIn?userId='+userId+'&classes=1',
end:function () { end:function () {
location.reload() location.reload()
} }
@ -163,7 +159,7 @@
if(req.ids.length > 0) { if(req.ids.length > 0) {
layer.confirm('真的删除么', {icon: 2, title: '提示'}, function (index) { layer.confirm('真的删除么', {icon: 2, title: '提示'}, function (index) {
$.ajax({ $.ajax({
url: '/sys/userRole_del', url: '/sys/userRole_delForIn',
dataType: 'json', dataType: 'json',
type: 'POST', type: 'POST',
contentType: "application/json;charset=utf-8", contentType: "application/json;charset=utf-8",
@ -183,7 +179,7 @@
}); });
//执行搜索重载 //执行搜索重载
table.reload('demo', { table.reload('demo', {
url: 'findUserRole?userId=' + userId+'&classes=3', url: '/findUserInRole?userId=' + userId+'&classes=1',
page: { page: {
curr: 1 curr: 1
} }

42
src/main/resources/templates/pages/warehouse/depository-out.html

@ -65,6 +65,11 @@
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="manager">仓管员</a> <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="manager">仓管员</a>
</script> </script>
<script id="depositoryCode" type="text/html">
<a id="{{d.id}}" onclick="showDetail(this)">{{d.code}}</a>
</script>
<script id="toolbarDemo" type="text/html"> <script id="toolbarDemo" type="text/html">
<div class="layui-btn-container"> <div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加</button> <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加</button>
@ -86,6 +91,9 @@
</div> </div>
<script charset="utf-8" src="/static/lib/layui-v2.6.3/layui.js"></script> <script charset="utf-8" src="/static/lib/layui-v2.6.3/layui.js"></script>
<script> <script>
function showDetail(){
}
layui.use(['form', 'table'], function () { layui.use(['form', 'table'], function () {
var $ = layui.jquery, var $ = layui.jquery,
form = layui.form, form = layui.form,
@ -122,7 +130,8 @@
cols: [ cols: [
[ [
{type: "checkbox", width: 50}, {type: "checkbox", width: 50},
{field: 'code', width: 150, title: '仓库编码'}, // {field: 'code', width: 150, title: '仓库编码'},
{title: '仓库编码', width: 150, templet: '#depositoryCode'},
{field: 'dname', width: 120, title: '仓库名称'}, {field: 'dname', width: 120, title: '仓库名称'},
{field: 'cname', width: 200, title: '所处公司'}, {field: 'cname', width: 200, title: '所处公司'},
{field: 'adminorgName', width: 150, title: '所属部门'}, {field: 'adminorgName', width: 150, title: '所属部门'},
@ -364,7 +373,7 @@
layer.full(index); layer.full(index);
}); });
return false; return false;
} else if (obj.event == 'realDelete') { // 彻底删除 } else if (obj.event === 'realDelete') { // 彻底删除
var req = {}; var req = {};
req.id = data.id; req.id = data.id;
$.ajax({ $.ajax({
@ -600,6 +609,35 @@
}); });
showDetail = function (obj) {
var index = layer.open({
title: '仓库信息详情',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/warehouse_view?id=' + obj.id,
end:function () {
let req = {};
req.parentId = parentId;
//执行搜索重载
table.reload('currentTableId', {
url: '/repository/warehouseRecord',
page: {
curr: 1
},
where: req
}, 'data');
return false;
}
});
$(window).on("resize", function () {
layer.full(index);
});
return false;
}
}); });
</script> </script>

2
src/main/resources/templates/pages/warehouse/manager.html

@ -34,7 +34,7 @@
height: 'full-255',//固定高度-即固定表头固定第一行首行 height: 'full-255',//固定高度-即固定表头固定第一行首行
request: { request: {
pageName: 'page', //页码的参数名称,默认:page pageName: 'page', //页码的参数名称,默认:page
limitName: 'pagesize' //每页数据量的参数名,默认:limit limitName: 'size' //每页数据量的参数名,默认:limit
}, },
response: { response: {
statusName: 'status' //规定数据状态的字段名称,默认:code statusName: 'status' //规定数据状态的字段名称,默认:code

38
src/main/resources/templates/pages/warehouse/warehouseByParentId.html

@ -80,6 +80,10 @@
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a> <a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
</script> </script>
<script id="placeCode" type="text/html">
<a id="{{d.id}}" onclick="showDetail(this)">{{d.kingdeecode}}</a>
</script>
<!-- 状态展示--> <!-- 状态展示-->
<script type="text/html" id="switchTpl"> <script type="text/html" id="switchTpl">
<input type="checkbox" name="state" value="{{d.id}}" lay-skin="switch" lay-text="启用|禁用" <input type="checkbox" name="state" value="{{d.id}}" lay-skin="switch" lay-text="启用|禁用"
@ -130,9 +134,9 @@
cols: [ cols: [
[ [
{type: "checkbox", width: 50}, {type: "checkbox", width: 50},
{field: 'code', width: 100, title: '库位号', sort: true}, // {field: 'code', width: 100, title: '库位号', sort: true},
{title: '库位编码', width: 100, templet: '#placeCode'},
{title: '物料名称', minWidth: 350, templet: '#viewMname', align: "center"}, {title: '物料名称', minWidth: 350, templet: '#viewMname', align: "center"},
// {field: 'mname', width: 200, title: '物料名称'},
{field: 'depositoryName', width: 200, title: '仓库名称'}, {field: 'depositoryName', width: 200, title: '仓库名称'},
{field: 'depositoryCode', width: 200, title: '仓库编码'}, {field: 'depositoryCode', width: 200, title: '仓库编码'},
{field: 'state', title: '状态', width: 100, templet: '#switchTpl'}, {field: 'state', title: '状态', width: 100, templet: '#switchTpl'},
@ -376,6 +380,36 @@
layer.full(index); layer.full(index);
}); });
}; };
showDetail = function (obj) {
var index = layer.open({
title: '库位信息详情',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/placeView?id=' + obj.id,
end: function () {
let req = {};
req.did = parentId;
//执行搜索重载
table.reload('currentTableId', {
url: '/place/findPlace',
page: {
curr: 1
},
where: req
}, 'data');
return false;
}
});
$(window).on("resize", function () {
layer.full(index);
});
return false;
}
}); });
</script> </script>
</body> </body>

73
src/main/resources/templates/pages/warehouse/warehouse_view.html

@ -16,19 +16,22 @@
<div class="layui-form-item" style="display: none"> <div class="layui-form-item" style="display: none">
<label class="layui-form-label">仓库编号</label> <label class="layui-form-label">仓库编号</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" th:value="${record.getId()}" id="did" name="id" required lay-verify="required" autocomplete="off" class="layui-input" readonly="readonly"> <input type="text" th:value="${record.getId()}" id="did" name="id" required lay-verify="required"
autocomplete="off" class="layui-input" readonly="readonly">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">仓库编码</label> <label class="layui-form-label">仓库编码</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" th:value="${record.getCode()}" name="code" autocomplete="off" class="layui-input" readonly="readonly"> <input type="text" th:value="${record.getCode()}" name="code" autocomplete="off" class="layui-input"
readonly="readonly">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">仓库名称</label> <label class="layui-form-label">仓库名称</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" th:value="${record.getDname()}" name="dname" required lay-verify="required" autocomplete="off" class="layui-input"> <input type="text" id="dname" th:value="${record.getDname()}" name="dname" required lay-verify="required"
autocomplete="off" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@ -36,7 +39,10 @@
<div class="layui-input-block"> <div class="layui-input-block">
<select name="cid" th:value="${record.getCid()}" lay-verify="required" lay-filter="company"> <select name="cid" th:value="${record.getCid()}" lay-verify="required" lay-filter="company">
<option value="">请选择公司</option> <option value="">请选择公司</option>
<option th:each="administrationP,iterStar:${administrationPList}" th:value="${administrationP?.getId()}" th:text="${administrationP?.getName()}" th:selected="${record.getCid() == administrationP.getId()}">外芯仓库</option> <option th:each="administrationP,iterStar:${administrationPList}" th:value="${administrationP?.getId()}"
th:text="${administrationP?.getName()}"
th:selected="${record.getCid() == administrationP.getId()}">外芯仓库
</option>
</select> </select>
</div> </div>
</div> </div>
@ -45,7 +51,8 @@
<div class="layui-input-block"> <div class="layui-input-block">
<select name="adminorg" id="adminorg" lay-verify="required"> <select name="adminorg" id="adminorg" lay-verify="required">
<option value="">请选择部门</option> <option value="">请选择部门</option>
<option th:each="post,iterStar:${postList}" th:text="${post?.getName()}" th:value="${post?.getId()}" th:selected="${record.getAdminorg().equals(post.getId().toString())}"></option> <option th:each="post,iterStar:${postList}" th:text="${post?.getName()}" th:value="${post?.getId()}"
th:selected="${record.getAdminorg().equals(post.getId().toString())}"></option>
</select> </select>
</div> </div>
</div> </div>
@ -58,7 +65,8 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">仓库介绍</label> <label class="layui-form-label">仓库介绍</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" th:value="${record.getIntroduce()}" name="introduce" autocomplete="off" class="layui-input"> <input type="text" th:value="${record.getIntroduce()}" name="introduce" autocomplete="off"
class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@ -66,20 +74,25 @@
<div class="layui-input-block"> <div class="layui-input-block">
<select name="parentId"> <select name="parentId">
<option value="0">请选择仓库</option> <option value="0">请选择仓库</option>
<option th:each="depository,iterStar:${depositories}" th:value="${depository?.getId()}" th:text="${depository?.getDname()}" th:selected="${depository.getId() == record.getParentId()}" >顶级公司</option> <option th:each="depository,iterStar:${depositories}" th:value="${depository?.getId()}"
th:text="${depository?.getDname()}" th:selected="${depository.getId() == record.getParentId()}">
顶级公司
</option>
</select> </select>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">最大存储量</label> <label class="layui-form-label">最大存储量</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" th:value="${record.getMaxNumber()}" name="maxNumber" required lay-verify="required" autocomplete="off" class="layui-input"> <input type="text" th:value="${record.getMaxNumber()}" name="maxNumber" required lay-verify="required"
autocomplete="off" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">最小存储量</label> <label class="layui-form-label">最小存储量</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" th:value="${record.getMinNumber()}" name="minNumber" required lay-verify="required" autocomplete="off" class="layui-input"> <input type="text" th:value="${record.getMinNumber()}" name="minNumber" required lay-verify="required"
autocomplete="off" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@ -90,14 +103,17 @@
<!-- <u id="barCodeValue"></u>--> <!-- <u id="barCodeValue"></u>-->
<br> <br>
<button id="printer" type="button" onclick="print_code()" class="layui-btn">打印</button> <button id="printer" type="button" onclick="print_code()" class="layui-btn">打印</button>
<a id="downloadImg" type="button" onclick="downloadCodeImg()" class="layui-btn">导出图片</a>
</div> </div>
<input id="createCode" type="button" class="layui-btn layui-btn-radius layui-btn-normal" onclick="createQrCode()" value="生成"/> <input id="createCode" type="button" class="layui-btn layui-btn-radius layui-btn-normal"
onclick="createQrCode()" value="生成"/>
</div> </div>
</div> </div>
<div class="layui-form-item" style="display: none"> <div class="layui-form-item" style="display: none">
<label class="layui-form-label">状态</label> <label class="layui-form-label">状态</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="checkbox" name="state" lay-skin="switch" lay-text="启用|禁用" th:checked="${record.getState() == 1}"> <input type="checkbox" name="state" lay-skin="switch" lay-text="启用|禁用"
th:checked="${record.getState() == 1}">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@ -113,6 +129,10 @@
} }
function downloadCodeImg() {
}
layui.use('form', function () { layui.use('form', function () {
var form = layui.form, $ = layui.$; var form = layui.form, $ = layui.$;
@ -210,6 +230,37 @@
}) })
}; };
/*downloadCodeImg = function() { //下载base64图片
let imgCode = $("#barCode").attr("src");
let aLink = document.createElement('a');
let blob = base64ToBlob(imgCode); //new Blob([content]);
let evt = document.createEvent("HTMLEvents");
evt.initEvent("click", true, true); //initEvent 不加后两个参数在FF下会报错 事件类型,是否冒泡,是否阻止浏览器的默认行为
aLink.download = $("#dname").val();
aLink.href = URL.createObjectURL(blob);
aLink.click();
};
base64ToBlob = function (code) {
let parts = code.split(';base64,');
let contentType = parts[0].split(':')[1];
let raw = window.atob(parts[1]);
let rawLength = raw.length;
let uInt8Array = new Uint8Array(rawLength);
for (let i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}
return new Blob([uInt8Array], {
type: contentType
});
};*/
downloadCodeImg = function () {
let id = $("#did").val();
window.open("/repository/allBarCodeImgForDepository?id="+id,"_self");
}
}); });
</script> </script>

63
src/test/java/com/dreamchaser/depository_manage/TestForOther.java

@ -2,12 +2,18 @@ package com.dreamchaser.depository_manage;
import com.dreamchaser.depository_manage.entity.Depository; import com.dreamchaser.depository_manage.entity.Depository;
import com.dreamchaser.depository_manage.entity.MaterialType; import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.entity.Place;
import com.dreamchaser.depository_manage.mapper.DepositoryMapper; import com.dreamchaser.depository_manage.mapper.DepositoryMapper;
import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo; import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_Details; import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_Details;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_Details_Approver; import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_Details_Approver;
import com.dreamchaser.depository_manage.service.DepositoryRecordService; import com.dreamchaser.depository_manage.service.DepositoryRecordService;
import com.dreamchaser.depository_manage.service.DepositoryService;
import com.dreamchaser.depository_manage.service.PlaceService;
import com.dreamchaser.depository_manage.service.StockTakingService; import com.dreamchaser.depository_manage.service.StockTakingService;
import com.dreamchaser.depository_manage.utils.CreateQrCodeUtil;
import com.dreamchaser.depository_manage.utils.ZipMultiFileUtil;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -15,6 +21,8 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@ -26,18 +34,59 @@ public class TestForOther {
@Autowired @Autowired
RedisTemplate<String, String> redisTemplate; DepositoryService depositoryService;
@Autowired @Autowired
StockTakingService stockTakingService; PlaceService placeService;
@Test @Test
public void run() { public void run() {
ApprovalInfo_Details approvalInfo_details = new ApprovalInfo_Details(); String fatherPath = "\\";
ApprovalInfo_Details_Approver approver = new ApprovalInfo_Details_Approver(); List<File> deleteFileList = new ArrayList<>();
approver.setUserId("PangFuZhen"); try {
approvalInfo_details.setApprover(approver); // 获取当前仓库下的下的所有仓库
stockTakingService.reviewByQyWxApproval("9", approvalInfo_details, "ebc12ec71c6571ad86cd5497581e2262", "2", "202303130024"); List<Integer> childForDepositoryByParent = new ArrayList<>();
childForDepositoryByParent.add(48);
// 获取所有仓库
List<Depository> depositoryByIds = depositoryService.findDepositoryByIds(childForDepositoryByParent);
for (Depository depository : depositoryByIds
) {
List<Place> placeByDid = placeService.findPlaceByDid(depository.getId());
List<File> qrCodeListForPlaces = new ArrayList<>();
for (Place place : placeByDid
) {
String qrCodeByDepository = placeService.findQrCodeByPlace(place.getId());
String qrCode = CreateQrCodeUtil.CreateBarCode128(qrCodeByDepository, depository.getDname() + "-" + place.getCode(), 60, 200);
try {
File file = RestResponse.base64ToFile(qrCode);
qrCodeListForPlaces.add(file);
deleteFileList.add(file);
} catch (Exception e) {
e.printStackTrace();
}
}
String qrCodeByDepository = depositoryService.findQrCodeByDepository(depository.getId());
String qrCode = CreateQrCodeUtil.CreateBarCode128(qrCodeByDepository, depository.getDname(), 60, 200);
// 将其暂存到本地
try {
File file = RestResponse.base64ToFile(qrCode);
qrCodeListForPlaces.add(file);
deleteFileList.add(file);
} catch (Exception e) {
e.printStackTrace();
}
// ZipMultiFileUtil.zipDownload();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// try {
// ZipMultiFileUtil.deleteFile(deleteFileList);
// } catch (IOException e) {
// e.printStackTrace();
// }
}
} }
} }

13
target/classes/com/dreamchaser/depository_manage/mapper/DepositoryMapper.xml

@ -77,9 +77,6 @@
</select> </select>
<!-- 获取当前部门仓库以及公共仓库--> <!-- 获取当前部门仓库以及公共仓库-->
<select id="findDepositoryByAdminorg" resultMap="depositoryMap" parameterType="string"> <select id="findDepositoryByAdminorg" resultMap="depositoryMap" parameterType="string">
SELECT SELECT
@ -204,6 +201,15 @@
</select> </select>
<select id="findDepositoryByIds" resultMap="depositoryMap" parameterType="list">
SELECT
<include refid="allColumns"/>
FROM depository d WHERE d.id in
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<!-- 插入数据 --> <!-- 插入数据 -->
<insert id="insertDepository" parameterType="map"> <insert id="insertDepository" parameterType="map">
@ -374,7 +380,6 @@
</select> </select>
<select id="findUserNameByDepositoryId" resultType="string" parameterType="int"> <select id="findUserNameByDepositoryId" resultType="string" parameterType="int">
select uname select uname
from depositoryanduser from depositoryanduser

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

@ -13,6 +13,7 @@
<result column="mid" property="mid" jdbcType="INTEGER"/> <result column="mid" property="mid" jdbcType="INTEGER"/>
<result column="did" property="did" jdbcType="INTEGER"/> <result column="did" property="did" jdbcType="INTEGER"/>
<result column="code" property="code" jdbcType="VARCHAR"/> <result column="code" property="code" jdbcType="VARCHAR"/>
<result column="kingdeecode" property="kingdeecode" jdbcType="VARCHAR"/>
<result column="min" property="min" jdbcType="INTEGER"/> <result column="min" property="min" jdbcType="INTEGER"/>
<result column="max" property="max" jdbcType="INTEGER"/> <result column="max" property="max" jdbcType="INTEGER"/>
<result column="state" property="state" jdbcType="INTEGER"/> <result column="state" property="state" jdbcType="INTEGER"/>
@ -29,6 +30,7 @@
<result column="max" property="max" jdbcType="INTEGER"/> <result column="max" property="max" jdbcType="INTEGER"/>
<result column="min" property="min" jdbcType="INTEGER"/> <result column="min" property="min" jdbcType="INTEGER"/>
<result column="code" property="code" jdbcType="VARCHAR"/> <result column="code" property="code" jdbcType="VARCHAR"/>
<result column="kingdeecode" property="kingdeecode" jdbcType="VARCHAR"/>
</resultMap> </resultMap>
<resultMap id="MaterialAndPlaceForViewMap" type="com.dreamchaser.depository_manage.pojo.MaterialAndPlaceForView"> <resultMap id="MaterialAndPlaceForViewMap" type="com.dreamchaser.depository_manage.pojo.MaterialAndPlaceForView">
@ -50,11 +52,12 @@
<result column="tname" property="tname" jdbcType="VARCHAR"/> <result column="tname" property="tname" jdbcType="VARCHAR"/>
<result column="mname" property="mname" jdbcType="VARCHAR"/> <result column="mname" property="mname" jdbcType="VARCHAR"/>
<result column="adminorg" property="adminorg" jdbcType="VARCHAR"/> <result column="adminorg" property="adminorg" jdbcType="VARCHAR"/>
<result column="kingdeecode" property="kingdeecode" jdbcType="VARCHAR"/>
</resultMap> </resultMap>
<!-- 表查询字段 --> <!-- 表查询字段 -->
<sql id="allColumns"> <sql id="allColumns">
p.id,p.x,p.y,p.z,p.code,p.mid,p.did,p.min,p.max,p.state,p.quantity,p.flagForType p.id,p.x,p.y,p.z,p.code,p.mid,p.did,p.min,p.max,p.state,p.quantity,p.flagForType,p.kingdeecode
</sql> </sql>
<sql id="allColumnsByMaterialAndPlace"> <sql id="allColumnsByMaterialAndPlace">
@ -62,7 +65,7 @@
</sql> </sql>
<sql id="allColumnsForView"> <sql id="allColumnsForView">
depository_id,mname,type_id,tname,mcode,version,price,unit,texture,pcode,dname,adminorg,dcode,iid,inventory,id,pid,mid depository_id,mname,type_id,tname,mcode,version,price,unit,texture,pcode,dname,adminorg,dcode,iid,inventory,id,pid,mid,kingdeecode
</sql> </sql>
@ -96,6 +99,9 @@
<if test="code != '' and code != null"> <if test="code != '' and code != null">
and p.code = #{code} and p.code = #{code}
</if> </if>
<if test="kingdeecode != '' and kingdeecode != null">
and p.kingdeecode = #{kingdeecode}
</if>
<if test="did != '' and did != null"> <if test="did != '' and did != null">
and p.did = #{did} and p.did = #{did}
</if> </if>
@ -216,6 +222,9 @@
<if test="code != null and code != ''"> <if test="code != null and code != ''">
AND p.code LIKE CONCAT('%', #{code}, '%') AND p.code LIKE CONCAT('%', #{code}, '%')
</if> </if>
<if test="kingdeecode != '' and kingdeecode != null">
and p.kingdeecode = #{kingdeecode}
</if>
<if test="mid != null and mid != ''"> <if test="mid != null and mid != ''">
AND find_in_set(#{mid},p.mid) AND find_in_set(#{mid},p.mid)
</if> </if>
@ -263,6 +272,9 @@
<if test="code != null and code != ''"> <if test="code != null and code != ''">
AND p.code LIKE CONCAT('%', #{code}, '%') AND p.code LIKE CONCAT('%', #{code}, '%')
</if> </if>
<if test="kingdeecode != '' and kingdeecode != null">
and p.kingdeecode LIKE CONCAT('%', #{kingdeecode}, '%')
</if>
<if test="z != null and z != ''"> <if test="z != null and z != ''">
AND p.z = #{z} AND p.z = #{z}
</if> </if>
@ -341,7 +353,7 @@
<!-- 新增信息 --> <!-- 新增信息 -->
<insert id="InsertPlace"> <insert id="InsertPlace">
INSERT INTO place ( INSERT INTO place (
id,x,y,z,code, mid,did,min,max,state,quantity,flagForType id,x,y,z,code, mid,did,min,max,state,quantity,flagForType,kingdeecode
) VALUES ( ) VALUES (
#{id}, #{id},
#{x}, #{x},
@ -354,7 +366,8 @@
#{max}, #{max},
#{state}, #{state},
#{quantity}, #{quantity},
#{flagType} #{flagType},
#{kingdeecode}
) )
</insert> </insert>
@ -387,6 +400,9 @@
</if> </if>
<if test="code != null"> <if test="code != null">
code = #{code}, code = #{code},
</if>
<if test="kingdeecode != null">
kingdeecode = #{kingdeecode},
</if> </if>
<if test="mid != null"> <if test="mid != null">
mid = #{mid}, mid = #{mid},

118
target/classes/com/dreamchaser/depository_manage/mapper/RoleMapper.xml

@ -26,6 +26,17 @@
<result column="classes" property="classes" jdbcType="INTEGER"/> <result column="classes" property="classes" jdbcType="INTEGER"/>
</resultMap> </resultMap>
<resultMap id="materialTypeAndRole" type="com.dreamchaser.depository_manage.pojo.RoleAndMaterialType">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="classes" property="classes" jdbcType="INTEGER"/>
<result column="mtid" property="mtid" jdbcType="INTEGER"/>
<result column="uid" property="uid" jdbcType="INTEGER"/>
<result column="tname" property="tname" jdbcType="VARCHAR"/>
<result column="mtstate" property="mtstate" jdbcType="INTEGER"/>
<result column="mtintroduce" property="mtintroduce" jdbcType="VARCHAR"/>
<result column="mtparentId" property="mtparentId" jdbcType="INTEGER"/>
</resultMap>
<sql id="allColumns"> <sql id="allColumns">
r.id,r.name r.id,r.name
</sql> </sql>
@ -34,6 +45,10 @@
prid,userid as userId,dname as depositoryName,address as depositoryAddress ,introduce as depositoryIntroduce,state as depositoryState,did,classes,code as depositoryCode prid,userid as userId,dname as depositoryName,address as depositoryAddress ,introduce as depositoryIntroduce,state as depositoryState,did,classes,code as depositoryCode
</sql> </sql>
<sql id="roleNameAndMaterialTypeName">
id,classes,mtid,uid,tname,mtstate,mtintroduce,mtparentId
</sql>
<update id="updateUserOrPostRoleAndDepository" parameterType="map"> <update id="updateUserOrPostRoleAndDepository" parameterType="map">
@ -65,6 +80,20 @@
where id = #{roleId} where id = #{roleId}
</update> </update>
<update id="UpdateRoleAndMaterialTypeById" parameterType="map">
update mtanduserrole
<set>
<if test="mtid != null and mtid != ''">
mtid = #{mtid},
</if>
<if test="classes != null and classes != ''">
classes = #{classes}
</if>
</set>
where id = #{roleId}
</update>
<insert id="addUserOrPostRoleAndDepository" parameterType="map"> <insert id="addUserOrPostRoleAndDepository" parameterType="map">
INSERT INTO postoruserrole ( INSERT INTO postoruserrole (
id, classes, role,userid,did id, classes, role,userid,did
@ -92,6 +121,32 @@
</insert> </insert>
<insert id="addUserOrPostRoleAndMaterialType" parameterType="map">
INSERT INTO mtanduserrole (
id, classes,uid,mtid
) VALUES (
#{id},
#{classes},
#{userid},
#{mtid}
)
</insert>
<insert id="addUserOrPostRoleAndMaterialTypes" parameterType="map">
INSERT INTO mtanduserrole (
id, classes,uid,mtid
)
VALUES
<foreach collection="mtIds" index="index" item="mtid" separator="," >
(#{id},
#{classes},
#{userid},
#{mtid})
</foreach>
</insert>
<select id="findDepositoryAndRole" parameterType="int" resultMap="depositoryAndrole"> <select id="findDepositoryAndRole" parameterType="int" resultMap="depositoryAndrole">
@ -106,8 +161,6 @@
</select> </select>
<select id="findUserIdByDid" parameterType="int" resultType="int"> <select id="findUserIdByDid" parameterType="int" resultType="int">
select userid from postoruserrole where 1 = 1 and did = #{did} and classes in (1,2) group by userid select userid from postoruserrole where 1 = 1 and did = #{did} and classes in (1,2) group by userid
</select> </select>
@ -126,19 +179,63 @@
<if test="classes != null and classes != ''"> <if test="classes != null and classes != ''">
and classes = #{classes} and classes = #{classes}
</if> </if>
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select> </select>
<select id="findRoleAndDepositoryByDepositoryIdForIn" parameterType="int" resultMap="depositoryAndrole"> <select id="findRoleAndDepositoryCountByCondition" parameterType="map" resultType="int">
select select
<include refid="roleNameAnddepositoryName"/> COUNT(*)
from userroleanddepository from userroleanddepository
where 1 = 1 where 1 = 1
<if test="depositoryId != null and depositoryId != ''"> <if test="depositoryId != null and depositoryId != ''">
and did = #{depositoryId} and did = #{depositoryId}
</if> </if>
and classes in (3,4) <if test="userId != null and userId != ''">
and userId = #{userId}
</if>
<if test="classes != null and classes != ''">
and classes = #{classes}
</if>
</select>
<select id="findRoleAndMaterialTypeByCondition" parameterType="map" resultMap="materialTypeAndRole">
select
<include refid="roleNameAndMaterialTypeName"/>
from materialtypeanduser
where 1 = 1
<if test="mtid != null and mtid != ''">
and mtid = #{mtid}
</if>
<if test="uid != null and uid != ''">
and uid = #{uid}
</if>
<if test="classes != null and classes != ''">
and classes = #{classes}
</if>
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select> </select>
<select id="findRoleAndMaterialTypeCountByCondition" parameterType="map" resultType="int">
select
COUNT(*)
from materialtypeanduser
where 1 = 1
<if test="mtid != null and mtid != ''">
and mtid = #{mtid}
</if>
<if test="uid != null and uid != ''">
and uid = #{uid}
</if>
<if test="classes != null and classes != ''">
and classes = #{classes}
</if>
</select>
<select id="findRoleAndDepositoryById" parameterType="int" resultMap="depositoryAndrole"> <select id="findRoleAndDepositoryById" parameterType="int" resultMap="depositoryAndrole">
@ -148,10 +245,21 @@
where prid = #{id} where prid = #{id}
</select> </select>
<select id="findRoleAndMaterialTypeById" parameterType="int" resultMap="materialTypeAndRole">
select
<include refid="roleNameAndMaterialTypeName"/>
from materialtypeanduser
where id = #{id}
</select>
<delete id="deleteRoleAndDepositoryById" parameterType="int"> <delete id="deleteRoleAndDepositoryById" parameterType="int">
delete from postoruserrole WHERE id = #{id} delete from postoruserrole WHERE id = #{id}
</delete> </delete>
<delete id="deleteRoleAndMaterialTypeById" parameterType="int">
delete from mtanduserrole WHERE id = #{id}
</delete>
</mapper> </mapper>

2
target/classes/templates/pages/company/company-out.html

@ -84,7 +84,7 @@
height: 'full-255',//固定高度-即固定表头固定第一行首行 height: 'full-255',//固定高度-即固定表头固定第一行首行
request: { request: {
pageName: 'page', //页码的参数名称,默认:page pageName: 'page', //页码的参数名称,默认:page
limitName: 'pagesize', //每页数据量的参数名,默认:limit limitName: 'size', //每页数据量的参数名,默认:limit
}, },
where: { where: {
superior: parentId, superior: parentId,

2
target/classes/templates/pages/company/companyByParentId.html

@ -84,7 +84,7 @@
}, },
request: { request: {
pageName: 'page', //页码的参数名称,默认:page pageName: 'page', //页码的参数名称,默认:page
limitName: 'pagesize' //每页数据量的参数名,默认:limit limitName: 'size' //每页数据量的参数名,默认:limit
}, },
where: { where: {
superior: parentId, superior: parentId,

26
target/classes/templates/pages/depository/table-in.html

@ -79,6 +79,10 @@
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table> <table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<script id="applicationInCode" type="text/html">
<a id="{{d.id}}" onclick="showDetail(this)">{{d.aircode}}</a>
</script>
<script type="text/html" id="currentTableBar"> <script type="text/html" id="currentTableBar">
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="detail">详情</a> <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="detail">详情</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete" th:style="'display:'+${display}">删除</a> <a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete" th:style="'display:'+${display}">删除</a>
@ -93,6 +97,9 @@
} }
function selectMaterialByName(obj) { function selectMaterialByName(obj) {
}
function showDetail(){
} }
layui.use(['form', 'table', 'laydate'], function () { layui.use(['form', 'table', 'laydate'], function () {
@ -156,7 +163,7 @@
cols: [ cols: [
[ [
{type: "checkbox", width: 50}, {type: "checkbox", width: 50},
{field: 'aircode', width: 150, title: '提交编码', sort: true}, {title: '存货编码', width: 150, templet: '#applicationInCode'},
{field: 'mname', width: 150, title: '物料名称'}, {field: 'mname', width: 150, title: '物料名称'},
{field: 'mversion', width: 150, title: '规格型号'}, {field: 'mversion', width: 150, title: '规格型号'},
{field: 'airUnit', width: 100, title: '计量单位'}, {field: 'airUnit', width: 100, title: '计量单位'},
@ -352,6 +359,23 @@
}); });
}; };
showDetail = function (obj) {
var index = layer.open({
title: '入库信息详情',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/form_step_look?id=' + obj.id,
});
$(window).on("resize", function () {
layer.full(index);
});
return false;
}
}); });
</script> </script>

9
target/classes/templates/pages/depository/table-stock.html

@ -179,6 +179,7 @@
$.each(res['data'], function (i, j) { $.each(res['data'], function (i, j) {
let jElement = j['warningCount']; let jElement = j['warningCount'];
let placeCode = j['placeCode'].split(" "); let placeCode = j['placeCode'].split(" ");
let placeKingdeeCode = j['placeKingdeeCode'].split(" ");
let depositoryId = j['depositoryId']; let depositoryId = j['depositoryId'];
let unit = j['unit']; let unit = j['unit'];
let mid = j['id']; let mid = j['id'];
@ -196,9 +197,9 @@
// 用于库位的添加 // 用于库位的添加
var aItem = placeCodeItem.childNodes[0]; var aItem = placeCodeItem.childNodes[0];
// 用于计量单位的添加 // 用于计量单位的添加
for (let k = 0; k < placeCode.length; k++) { for (let k = 0; k < placeKingdeeCode.length; k++) {
if (placeCode[k] !== "") { if (placeKingdeeCode[k] !== "") {
$(aItem).append('<button id=' + mid + ' class="layui-btn layui-btn-primary layui-btn-xs" onclick="changePlaceCode(this)" value=' + depositoryId + '>' + placeCode[k] + '</button>') $(aItem).append('<button code='+placeCode[k]+' id=' + mid + ' class="layui-btn layui-btn-primary layui-btn-xs" onclick="changePlaceCode(this)" value=' + depositoryId + '>' + placeKingdeeCode[k] + '</button>')
} }
} }
@ -417,7 +418,7 @@
// 用于更改同一仓库下的库位 // 用于更改同一仓库下的库位
changePlaceCode = function (obj) { changePlaceCode = function (obj) {
var depositoryId = obj.value; var depositoryId = obj.value;
var placeCode = obj.innerText; var placeCode = obj.getAttribute("code");
var mid = obj.id; var mid = obj.id;
// 当前点击行中的计量单位按钮 // 当前点击行中的计量单位按钮
let unitBtn = obj.parentNode.parentNode.parentNode.childNodes[5].childNodes[0].childNodes[1]; let unitBtn = obj.parentNode.parentNode.parentNode.childNodes[5].childNodes[0].childNodes[1];

3
target/classes/templates/pages/material/material-add.html

@ -34,6 +34,9 @@
.inputdiv .layui-unselect{ .inputdiv .layui-unselect{
border-style: none; border-style: none;
} }
.layuimini-container .table-search-fieldset{
z-index: 0;
}
</style> </style>
<div class="layuimini-container"> <div class="layuimini-container">
<div class="layuimini-main"> <div class="layuimini-main">

37
target/classes/templates/pages/material/material-out.html

@ -94,6 +94,9 @@
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter" style="margin-top: 123px"></table> <table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter" style="margin-top: 123px"></table>
<script id="materialCode" type="text/html">
<a id="{{d.id}}" onclick="showDetail(this)">{{d.code}}</a>
</script>
<script type="text/html" id="currentTableBar"> <script type="text/html" id="currentTableBar">
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="detail">详情</a> <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="detail">详情</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" th:style="'display:'+${display}" lay-event="delete">删除</a> <a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" th:style="'display:'+${display}" lay-event="delete">删除</a>
@ -106,6 +109,9 @@
<script> <script>
function bindTableToolbarFunction(){ function bindTableToolbarFunction(){
}
function showDetail(){
} }
layui.use(['form', 'table', 'upload'], function () { layui.use(['form', 'table', 'upload'], function () {
var $ = layui.jquery, var $ = layui.jquery,
@ -136,7 +142,7 @@
let cols = [ let cols = [
{type: "checkbox", width: 50}, {type: "checkbox", width: 50},
{field: 'code', width: 150, title: '存货编码', sort: true}, {title: '存货编码', width: 150, templet: '#materialCode'},
{field: 'mname', width: 120, title: '物料名称', sort: false}, {field: 'mname', width: 120, title: '物料名称', sort: false},
{field: 'typeName', width: 150, title: '物料种类'}, {field: 'typeName', width: 150, title: '物料种类'},
{field: 'version', width: 200, title: '规格型号', sort: false}, {field: 'version', width: 200, title: '规格型号', sort: false},
@ -234,13 +240,14 @@
done: function (res) { done: function (res) {
layer.closeAll('loading'); //关闭loading layer.closeAll('loading'); //关闭loading
if (res.code === 200) {
//如果上传成功 //如果上传成功
var re = ""; var re = "";
for (let i = 0; i < res.data.errMsg.length; i++) { for (let i = 0; i < res.data.errMsg.length; i++) {
var show = "<p style='color: #ff211e'>" + res.data.errMsg[i] + ":错误" + "</p>"; var show = "<p style='color: #ff211e'>" + res.data.errMsg[i] + ":错误" + "</p>";
re += show re += show
} }
if (res.code === 200) {
for (let i = 0; i < res.data.dataList.length; i++) { for (let i = 0; i < res.data.dataList.length; i++) {
var mname = res.data.dataList[i]["mname"]; var mname = res.data.dataList[i]["mname"];
var code = res.data.dataList[i]["code"] == null || res.data.dataList[i]["code"] === undefined ? "" : res.data.dataList[i]["code"]; var code = res.data.dataList[i]["code"] == null || res.data.dataList[i]["code"] === undefined ? "" : res.data.dataList[i]["code"];
@ -554,6 +561,32 @@
} }
}) })
}); });
showDetail = function (obj) {
var index = layer.open({
title: '物料信息详情',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/material_view?id=' + obj.id,
end: function () {
//执行搜索重载
table.reload('currentTableId', {
url: '/material/material',
page: {
curr: 1
}
}, 'data');
}
});
$(window).on("resize", function () {
layer.full(index);
});
return false;
}
}); });
</script> </script>

2
target/classes/templates/pages/post/post-out.html

@ -85,7 +85,7 @@
height: 'full-255',//固定高度-即固定表头固定第一行首行 height: 'full-255',//固定高度-即固定表头固定第一行首行
request: { request: {
pageName: 'page', //页码的参数名称,默认:page pageName: 'page', //页码的参数名称,默认:page
limitName: 'pagesize', //每页数据量的参数名,默认:limit limitName: 'size', //每页数据量的参数名,默认:limit
}, },
where: { where: {
organization: parentId organization: parentId

2
target/classes/templates/pages/post/postRole.html

@ -50,7 +50,7 @@
height: 'full-255',//固定高度-即固定表头固定第一行首行 height: 'full-255',//固定高度-即固定表头固定第一行首行
request: { request: {
pageName: 'page', //页码的参数名称,默认:page pageName: 'page', //页码的参数名称,默认:page
limitName: 'pagesize' //每页数据量的参数名,默认:limit limitName: 'size' //每页数据量的参数名,默认:limit
}, },
response: { response: {
statusName: 'status' //规定数据状态的字段名称,默认:code statusName: 'status' //规定数据状态的字段名称,默认:code

2
target/classes/templates/pages/user/table-user.html

@ -92,7 +92,7 @@
height: 'full-255',//固定高度-即固定表头固定第一行首行 height: 'full-255',//固定高度-即固定表头固定第一行首行
request: { request: {
pageName: 'page', //页码的参数名称,默认:page pageName: 'page', //页码的参数名称,默认:page
limitName: 'pagesize' //每页数据量的参数名,默认:limit limitName: 'size' //每页数据量的参数名,默认:limit
}, },
response: { response: {
statusName: 'status' //规定数据状态的字段名称,默认:code statusName: 'status' //规定数据状态的字段名称,默认:code

2
target/classes/templates/pages/user/userRole.html

@ -48,7 +48,7 @@
height: 'full-255',//固定高度-即固定表头固定第一行首行 height: 'full-255',//固定高度-即固定表头固定第一行首行
request: { request: {
pageName: 'page', //页码的参数名称,默认:page pageName: 'page', //页码的参数名称,默认:page
limitName: 'pagesize' //每页数据量的参数名,默认:limit limitName: 'size' //每页数据量的参数名,默认:limit
}, },
response: { response: {
statusName: 'status' //规定数据状态的字段名称,默认:code statusName: 'status' //规定数据状态的字段名称,默认:code

28
target/classes/templates/pages/user/userRoleForIn.html

@ -15,8 +15,8 @@
<input id="userId" style="display: none" th:value="${userId}"> <input id="userId" style="display: none" th:value="${userId}">
<script type="text/html" id="toolbarDemo"> <script type="text/html" id="toolbarDemo">
<div class="layui-btn-container"> <div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add_role">添加仓库</button> <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add_role">添加类型</button>
<button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete">删除仓库</button> <button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete">删除类型</button>
</div> </div>
</script> </script>
<table id="demo" class="layui-hide" lay-filter="currentTableFilter"></table> <table id="demo" class="layui-hide" lay-filter="currentTableFilter"></table>
@ -36,7 +36,7 @@
//第一个实例 //第一个实例
table.render({ table.render({
elem: '#demo' elem: '#demo'
, url: 'findUserRole?userId=' + userId+'&classes=3', //数据接口 , url: '/findUserInRole?userId=' + userId+'&classes=1', //数据接口
parseData: function (res) { //res 即为原始返回的数据 parseData: function (res) { //res 即为原始返回的数据
return { return {
"status": res.status, //解析接口状态 "status": res.status, //解析接口状态
@ -45,10 +45,10 @@
"data": res.data //解析数据列表 "data": res.data //解析数据列表
}; };
}, },
height: 'full-255',//固定高度-即固定表头固定第一行首行 // height: 'full-255',//固定高度-即固定表头固定第一行首行
request: { request: {
pageName: 'page', //页码的参数名称,默认:page pageName: 'page', //页码的参数名称,默认:page
limitName: 'pagesize' //每页数据量的参数名,默认:limit limitName: 'size' //每页数据量的参数名,默认:limit
}, },
response: { response: {
statusName: 'status' //规定数据状态的字段名称,默认:code statusName: 'status' //规定数据状态的字段名称,默认:code
@ -60,8 +60,7 @@
, cols: [ , cols: [
[ //表头 [ //表头
{type: "checkbox", width: 50}, {type: "checkbox", width: 50},
{field: 'id', width: 80, title: 'ID', sort: true}, {field: 'materialTypeName', width: 200, title: '类型名称', sort: true},
{field: 'depositoryName', width: 200, title: '仓库名称', sort: true},
{field: 'number', width: 100, title: '工号', sort: true}, {field: 'number', width: 100, title: '工号', sort: true},
{field: 'name', width: 100, title: '姓名', sort: true}, {field: 'name', width: 100, title: '姓名', sort: true},
{field: 'mobilephone', width: 200, title: '内线电话', sort: true}, {field: 'mobilephone', width: 200, title: '内线电话', sort: true},
@ -74,10 +73,7 @@
limits: [10, 15, 20, 25, 50, 100], limits: [10, 15, 20, 25, 50, 100],
limit: 10, limit: 10,
page: true, page: true,
skin: 'line', skin: 'line'
done:function () {
$("[data-field='id']").css('display','none');
}
}); });
//监听表格复选框选择 //监听表格复选框选择
table.on('checkbox(currentTableFilter)', function (obj) { table.on('checkbox(currentTableFilter)', function (obj) {
@ -93,7 +89,7 @@
maxmin:true, maxmin:true,
shadeClose: true, shadeClose: true,
area: ['100%', '100%'], area: ['100%', '100%'],
content: '/user_role_edit?id='+data.id, content: '/user_role_editForIn?id='+data.id,
end:function () { end:function () {
location.reload() location.reload()
} }
@ -108,7 +104,7 @@
req.id = data.id; req.id = data.id;
layer.confirm('真的删除么', {icon: 2, title: '提示'}, function (index) { layer.confirm('真的删除么', {icon: 2, title: '提示'}, function (index) {
$.ajax({ $.ajax({
url: '/sys/userRole_del', url: '/sys/userRole_delForIn',
dataType: 'json', dataType: 'json',
type: 'POST', type: 'POST',
contentType: "application/json;charset=utf-8", contentType: "application/json;charset=utf-8",
@ -142,7 +138,7 @@
maxmin:true, maxmin:true,
shadeClose: true, shadeClose: true,
area: ['100%', '100%'], area: ['100%', '100%'],
content: '/user_add?userId='+userId+'&classes=3', content: '/user_addForIn?userId='+userId+'&classes=1',
end:function () { end:function () {
location.reload() location.reload()
} }
@ -163,7 +159,7 @@
if(req.ids.length > 0) { if(req.ids.length > 0) {
layer.confirm('真的删除么', {icon: 2, title: '提示'}, function (index) { layer.confirm('真的删除么', {icon: 2, title: '提示'}, function (index) {
$.ajax({ $.ajax({
url: '/sys/userRole_del', url: '/sys/userRole_delForIn',
dataType: 'json', dataType: 'json',
type: 'POST', type: 'POST',
contentType: "application/json;charset=utf-8", contentType: "application/json;charset=utf-8",
@ -183,7 +179,7 @@
}); });
//执行搜索重载 //执行搜索重载
table.reload('demo', { table.reload('demo', {
url: 'findUserRole?userId=' + userId+'&classes=3', url: '/findUserInRole?userId=' + userId+'&classes=1',
page: { page: {
curr: 1 curr: 1
} }

42
target/classes/templates/pages/warehouse/depository-out.html

@ -65,6 +65,11 @@
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="manager">仓管员</a> <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="manager">仓管员</a>
</script> </script>
<script id="depositoryCode" type="text/html">
<a id="{{d.id}}" onclick="showDetail(this)">{{d.code}}</a>
</script>
<script id="toolbarDemo" type="text/html"> <script id="toolbarDemo" type="text/html">
<div class="layui-btn-container"> <div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加</button> <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加</button>
@ -86,6 +91,9 @@
</div> </div>
<script charset="utf-8" src="/static/lib/layui-v2.6.3/layui.js"></script> <script charset="utf-8" src="/static/lib/layui-v2.6.3/layui.js"></script>
<script> <script>
function showDetail(){
}
layui.use(['form', 'table'], function () { layui.use(['form', 'table'], function () {
var $ = layui.jquery, var $ = layui.jquery,
form = layui.form, form = layui.form,
@ -122,7 +130,8 @@
cols: [ cols: [
[ [
{type: "checkbox", width: 50}, {type: "checkbox", width: 50},
{field: 'code', width: 150, title: '仓库编码'}, // {field: 'code', width: 150, title: '仓库编码'},
{title: '仓库编码', width: 150, templet: '#depositoryCode'},
{field: 'dname', width: 120, title: '仓库名称'}, {field: 'dname', width: 120, title: '仓库名称'},
{field: 'cname', width: 200, title: '所处公司'}, {field: 'cname', width: 200, title: '所处公司'},
{field: 'adminorgName', width: 150, title: '所属部门'}, {field: 'adminorgName', width: 150, title: '所属部门'},
@ -364,7 +373,7 @@
layer.full(index); layer.full(index);
}); });
return false; return false;
} else if (obj.event == 'realDelete') { // 彻底删除 } else if (obj.event === 'realDelete') { // 彻底删除
var req = {}; var req = {};
req.id = data.id; req.id = data.id;
$.ajax({ $.ajax({
@ -600,6 +609,35 @@
}); });
showDetail = function (obj) {
var index = layer.open({
title: '仓库信息详情',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/warehouse_view?id=' + obj.id,
end:function () {
let req = {};
req.parentId = parentId;
//执行搜索重载
table.reload('currentTableId', {
url: '/repository/warehouseRecord',
page: {
curr: 1
},
where: req
}, 'data');
return false;
}
});
$(window).on("resize", function () {
layer.full(index);
});
return false;
}
}); });
</script> </script>

2
target/classes/templates/pages/warehouse/manager.html

@ -34,7 +34,7 @@
height: 'full-255',//固定高度-即固定表头固定第一行首行 height: 'full-255',//固定高度-即固定表头固定第一行首行
request: { request: {
pageName: 'page', //页码的参数名称,默认:page pageName: 'page', //页码的参数名称,默认:page
limitName: 'pagesize' //每页数据量的参数名,默认:limit limitName: 'size' //每页数据量的参数名,默认:limit
}, },
response: { response: {
statusName: 'status' //规定数据状态的字段名称,默认:code statusName: 'status' //规定数据状态的字段名称,默认:code

38
target/classes/templates/pages/warehouse/warehouseByParentId.html

@ -80,6 +80,10 @@
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a> <a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
</script> </script>
<script id="placeCode" type="text/html">
<a id="{{d.id}}" onclick="showDetail(this)">{{d.kingdeecode}}</a>
</script>
<!-- 状态展示--> <!-- 状态展示-->
<script type="text/html" id="switchTpl"> <script type="text/html" id="switchTpl">
<input type="checkbox" name="state" value="{{d.id}}" lay-skin="switch" lay-text="启用|禁用" <input type="checkbox" name="state" value="{{d.id}}" lay-skin="switch" lay-text="启用|禁用"
@ -130,9 +134,9 @@
cols: [ cols: [
[ [
{type: "checkbox", width: 50}, {type: "checkbox", width: 50},
{field: 'code', width: 100, title: '库位号', sort: true}, // {field: 'code', width: 100, title: '库位号', sort: true},
{title: '库位编码', width: 100, templet: '#placeCode'},
{title: '物料名称', minWidth: 350, templet: '#viewMname', align: "center"}, {title: '物料名称', minWidth: 350, templet: '#viewMname', align: "center"},
// {field: 'mname', width: 200, title: '物料名称'},
{field: 'depositoryName', width: 200, title: '仓库名称'}, {field: 'depositoryName', width: 200, title: '仓库名称'},
{field: 'depositoryCode', width: 200, title: '仓库编码'}, {field: 'depositoryCode', width: 200, title: '仓库编码'},
{field: 'state', title: '状态', width: 100, templet: '#switchTpl'}, {field: 'state', title: '状态', width: 100, templet: '#switchTpl'},
@ -376,6 +380,36 @@
layer.full(index); layer.full(index);
}); });
}; };
showDetail = function (obj) {
var index = layer.open({
title: '库位信息详情',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/placeView?id=' + obj.id,
end: function () {
let req = {};
req.did = parentId;
//执行搜索重载
table.reload('currentTableId', {
url: '/place/findPlace',
page: {
curr: 1
},
where: req
}, 'data');
return false;
}
});
$(window).on("resize", function () {
layer.full(index);
});
return false;
}
}); });
</script> </script>
</body> </body>

73
target/classes/templates/pages/warehouse/warehouse_view.html

@ -16,19 +16,22 @@
<div class="layui-form-item" style="display: none"> <div class="layui-form-item" style="display: none">
<label class="layui-form-label">仓库编号</label> <label class="layui-form-label">仓库编号</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" th:value="${record.getId()}" id="did" name="id" required lay-verify="required" autocomplete="off" class="layui-input" readonly="readonly"> <input type="text" th:value="${record.getId()}" id="did" name="id" required lay-verify="required"
autocomplete="off" class="layui-input" readonly="readonly">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">仓库编码</label> <label class="layui-form-label">仓库编码</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" th:value="${record.getCode()}" name="code" autocomplete="off" class="layui-input" readonly="readonly"> <input type="text" th:value="${record.getCode()}" name="code" autocomplete="off" class="layui-input"
readonly="readonly">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">仓库名称</label> <label class="layui-form-label">仓库名称</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" th:value="${record.getDname()}" name="dname" required lay-verify="required" autocomplete="off" class="layui-input"> <input type="text" id="dname" th:value="${record.getDname()}" name="dname" required lay-verify="required"
autocomplete="off" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@ -36,7 +39,10 @@
<div class="layui-input-block"> <div class="layui-input-block">
<select name="cid" th:value="${record.getCid()}" lay-verify="required" lay-filter="company"> <select name="cid" th:value="${record.getCid()}" lay-verify="required" lay-filter="company">
<option value="">请选择公司</option> <option value="">请选择公司</option>
<option th:each="administrationP,iterStar:${administrationPList}" th:value="${administrationP?.getId()}" th:text="${administrationP?.getName()}" th:selected="${record.getCid() == administrationP.getId()}">外芯仓库</option> <option th:each="administrationP,iterStar:${administrationPList}" th:value="${administrationP?.getId()}"
th:text="${administrationP?.getName()}"
th:selected="${record.getCid() == administrationP.getId()}">外芯仓库
</option>
</select> </select>
</div> </div>
</div> </div>
@ -45,7 +51,8 @@
<div class="layui-input-block"> <div class="layui-input-block">
<select name="adminorg" id="adminorg" lay-verify="required"> <select name="adminorg" id="adminorg" lay-verify="required">
<option value="">请选择部门</option> <option value="">请选择部门</option>
<option th:each="post,iterStar:${postList}" th:text="${post?.getName()}" th:value="${post?.getId()}" th:selected="${record.getAdminorg().equals(post.getId().toString())}"></option> <option th:each="post,iterStar:${postList}" th:text="${post?.getName()}" th:value="${post?.getId()}"
th:selected="${record.getAdminorg().equals(post.getId().toString())}"></option>
</select> </select>
</div> </div>
</div> </div>
@ -58,7 +65,8 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">仓库介绍</label> <label class="layui-form-label">仓库介绍</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" th:value="${record.getIntroduce()}" name="introduce" autocomplete="off" class="layui-input"> <input type="text" th:value="${record.getIntroduce()}" name="introduce" autocomplete="off"
class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@ -66,20 +74,25 @@
<div class="layui-input-block"> <div class="layui-input-block">
<select name="parentId"> <select name="parentId">
<option value="0">请选择仓库</option> <option value="0">请选择仓库</option>
<option th:each="depository,iterStar:${depositories}" th:value="${depository?.getId()}" th:text="${depository?.getDname()}" th:selected="${depository.getId() == record.getParentId()}" >顶级公司</option> <option th:each="depository,iterStar:${depositories}" th:value="${depository?.getId()}"
th:text="${depository?.getDname()}" th:selected="${depository.getId() == record.getParentId()}">
顶级公司
</option>
</select> </select>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">最大存储量</label> <label class="layui-form-label">最大存储量</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" th:value="${record.getMaxNumber()}" name="maxNumber" required lay-verify="required" autocomplete="off" class="layui-input"> <input type="text" th:value="${record.getMaxNumber()}" name="maxNumber" required lay-verify="required"
autocomplete="off" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">最小存储量</label> <label class="layui-form-label">最小存储量</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" th:value="${record.getMinNumber()}" name="minNumber" required lay-verify="required" autocomplete="off" class="layui-input"> <input type="text" th:value="${record.getMinNumber()}" name="minNumber" required lay-verify="required"
autocomplete="off" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@ -90,14 +103,17 @@
<!-- <u id="barCodeValue"></u>--> <!-- <u id="barCodeValue"></u>-->
<br> <br>
<button id="printer" type="button" onclick="print_code()" class="layui-btn">打印</button> <button id="printer" type="button" onclick="print_code()" class="layui-btn">打印</button>
<a id="downloadImg" type="button" onclick="downloadCodeImg()" class="layui-btn">导出图片</a>
</div> </div>
<input id="createCode" type="button" class="layui-btn layui-btn-radius layui-btn-normal" onclick="createQrCode()" value="生成"/> <input id="createCode" type="button" class="layui-btn layui-btn-radius layui-btn-normal"
onclick="createQrCode()" value="生成"/>
</div> </div>
</div> </div>
<div class="layui-form-item" style="display: none"> <div class="layui-form-item" style="display: none">
<label class="layui-form-label">状态</label> <label class="layui-form-label">状态</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="checkbox" name="state" lay-skin="switch" lay-text="启用|禁用" th:checked="${record.getState() == 1}"> <input type="checkbox" name="state" lay-skin="switch" lay-text="启用|禁用"
th:checked="${record.getState() == 1}">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@ -113,6 +129,10 @@
} }
function downloadCodeImg() {
}
layui.use('form', function () { layui.use('form', function () {
var form = layui.form, $ = layui.$; var form = layui.form, $ = layui.$;
@ -210,6 +230,37 @@
}) })
}; };
/*downloadCodeImg = function() { //下载base64图片
let imgCode = $("#barCode").attr("src");
let aLink = document.createElement('a');
let blob = base64ToBlob(imgCode); //new Blob([content]);
let evt = document.createEvent("HTMLEvents");
evt.initEvent("click", true, true); //initEvent 不加后两个参数在FF下会报错 事件类型,是否冒泡,是否阻止浏览器的默认行为
aLink.download = $("#dname").val();
aLink.href = URL.createObjectURL(blob);
aLink.click();
};
base64ToBlob = function (code) {
let parts = code.split(';base64,');
let contentType = parts[0].split(':')[1];
let raw = window.atob(parts[1]);
let rawLength = raw.length;
let uInt8Array = new Uint8Array(rawLength);
for (let i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}
return new Blob([uInt8Array], {
type: contentType
});
};*/
downloadCodeImg = function () {
let id = $("#did").val();
window.open("/repository/allBarCodeImgForDepository?id="+id,"_self");
}
}); });
</script> </script>

Loading…
Cancel
Save