Browse Source

基本完成

lwx_dev
erdanergou 3 years ago
parent
commit
f86bb43830
  1. 6
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java
  2. 89
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java
  3. 48
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  4. 18
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  5. 99
      src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java
  6. 5
      src/main/java/com/dreamchaser/depository_manage/entity/ApplicationOutRecord.java
  7. 2
      src/main/java/com/dreamchaser/depository_manage/entity/ExcelInfoByInventory.java
  8. 8
      src/main/java/com/dreamchaser/depository_manage/entity/Material.java
  9. 5
      src/main/java/com/dreamchaser/depository_manage/entity/Place.java
  10. 10
      src/main/java/com/dreamchaser/depository_manage/listener/ExcelListener.java
  11. 4
      src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.xml
  12. 19
      src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.java
  13. 33
      src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml
  14. 7
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java
  15. 38
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  16. 61
      src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.java
  17. 116
      src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml
  18. 10
      src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordP.java
  19. 7
      src/main/java/com/dreamchaser/depository_manage/pojo/MaterialP.java
  20. 15
      src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java
  21. 6
      src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java
  22. 19
      src/main/java/com/dreamchaser/depository_manage/service/PlaceService.java
  23. 187
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
  24. 89
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java
  25. 106
      src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java
  26. 66
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  27. 90
      src/main/java/com/dreamchaser/depository_manage/service/impl/PlaceServiceImpl.java
  28. 2
      src/main/java/com/dreamchaser/depository_manage/utils/excelUtil.java
  29. 36
      src/main/resources/templates/pages/application/application-in.html
  30. 6
      src/main/resources/templates/pages/application/application-in_back.html
  31. 51
      src/main/resources/templates/pages/application/application-out.html
  32. 6
      src/main/resources/templates/pages/application/application-out_back.html
  33. 4
      src/main/resources/templates/pages/application/application-review.html
  34. 4
      src/main/resources/templates/pages/application/form-step-look_back.html
  35. 4
      src/main/resources/templates/pages/depository/table-stock.html
  36. 31
      src/main/resources/templates/pages/material/selectDepositoryByCard.html
  37. 6
      src/main/resources/templates/pages/place/place_add.html
  38. 1
      src/main/resources/templates/pages/place/place_edit.html
  39. 88
      src/main/resources/templates/pages/warehouse/warehouseByParentId.html
  40. 4
      target/classes/com/dreamchaser/depository_manage/mapper/DepositoryMapper.xml
  41. 33
      target/classes/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml
  42. 38
      target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  43. 116
      target/classes/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml
  44. 36
      target/classes/templates/pages/application/application-in.html
  45. 6
      target/classes/templates/pages/application/application-in_back.html
  46. 51
      target/classes/templates/pages/application/application-out.html
  47. 6
      target/classes/templates/pages/application/application-out_back.html
  48. 4
      target/classes/templates/pages/depository/table-stock.html
  49. 31
      target/classes/templates/pages/material/selectDepositoryByCard.html
  50. 6
      target/classes/templates/pages/place/place_add.html
  51. 1
      target/classes/templates/pages/place/place_edit.html
  52. 88
      target/classes/templates/pages/warehouse/warehouseByParentId.html

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

@ -1064,4 +1064,10 @@ public class DepositoryController {
return new RestResponse(list);
}
// 根据id获取仓库信息
@GetMapping("/findDepositoryByDid")
public RestResponse findDepositoryByDid(@RequestParam(value = "depositoryId")Integer depositoryId){
Depository depositoryRecordById = depositoryService.findDepositoryRecordById(depositoryId);
return new RestResponse(depositoryRecordById);
}
}

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

@ -104,29 +104,101 @@ public class DepositoryRecordController {
List<Integer> params = (List<Integer>) map.get("params");
Integer integer = 0;
map.put("applicantId", userToken.getId());
Map<String,Object> result = new HashMap<>();
if(params.size() < 1 && map.size() > 3) {
integer += depositoryRecordService.applicationIn(map);
// 获取库位id
Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId"));
if(placeId == -1) {// 如果插入到仓库
integer += depositoryRecordService.applicationIn(map);
}else{ // 如果具体到库位
Integer flag = depositoryRecordService.applicationIn(map);
if(flag != 1){
return new RestResponse("",666,new StatusInfo("存储失败","请重新选择存储位"));
}else{
Integer applicationInPlace = depositoryRecordService.applicationInPlace(map);
if(applicationInPlace == 1){
integer += flag;
}else{
map.put("delete","in");
depositoryRecordService.deleteApplicaionInPlace(map);
return new RestResponse("",666,new StatusInfo("存储失败","超出最大存储量或该库位已有物品,请重新选择存储位"));
}
}
}
}else{
List<Object> errMsg = new ArrayList<>();
List<Object> successMsg = new ArrayList<>();
for (int i = 0; i < params.size(); i++) {
Integer temp = params.get(i);
Map<String,Object> insert = new HashMap<>();
Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId"+temp));
insert.put("applicantId",userToken.getId());
insert.put("mid",map.get("mid"+temp));
insert.put("quantity",map.get("quantity"+temp));
insert.put("depositoryId",map.get("depositoryId"+temp));
insert.put("applyRemark",map.get("applyRemark"+temp));
insert.put("code",map.get("code"+temp));
integer += depositoryRecordService.applicationIn(insert);
insert.put("price",map.get("price").toString());
if(placeId == -1) { // 如果插入到仓库
integer += depositoryRecordService.applicationIn(insert);
successMsg.add(insert);
}else{// 如果具体到库位
Integer flag = depositoryRecordService.applicationIn(insert);
if(flag != 1){
insert.put("err","存储失败,请重新选择存储位");
errMsg.add(insert);
}else{
insert.put("placeId",map.get("placeId"+temp));
Integer applicationInPlace = depositoryRecordService.applicationInPlace(insert);
if(applicationInPlace == 1){
integer += flag;
successMsg.add(insert);
}else{
map.put("delete","in");
depositoryRecordService.deleteApplicaionInPlace(insert);
insert.put("err","存储失败,超出最大存储量或该库位已有物品");
errMsg.add(insert);
}
}
}
}
Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId"));
if(placeId == -1) {// 如果插入到仓库
integer += depositoryRecordService.applicationIn(map);
successMsg.add(map);
}else{ // 如果具体到库位
Integer flag = depositoryRecordService.applicationIn(map);
if(flag != 1){
map.put("err","存储失败,请重新选择存储位");
errMsg.add(map);
}else{
Integer applicationInPlace = depositoryRecordService.applicationInPlace(map);
if(applicationInPlace == 1){
integer += flag;
successMsg.add(map);
}else{
map.put("delete","in");
depositoryRecordService.deleteApplicaionInPlace(map);
map.put("err","存储失败,超出最大存储量或该库位已有物品");
errMsg.add(map);
}
}
}
integer += depositoryRecordService.applicationIn(map);
result.put("err",errMsg);
result.put("success",successMsg);
}
if (integer != 0 && params.size() < 1) {
return CrudUtil.postHandle(integer, 1);
}else if(integer != 0 && params.size() > 0){
return CrudUtil.postHandle(integer,params.size() + 1);
if(integer == params.size() + 1){
return CrudUtil.postHandle(integer,params.size() + 1);
}else{
return new RestResponse(result,666,new StatusInfo("错误","含有错误信息"));
}
}
else{
return new RestResponse("",666,new StatusInfo("存储失败","超出最大存储量,请重新选择存储位"));
return new RestResponse("",666,new StatusInfo("存储失败","请重新选择存储位"));
}
}
@ -136,8 +208,8 @@ public class DepositoryRecordController {
public RestResponse insertApplicationOutRecord(@RequestBody Map<String,Object> map, HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
map.put("applicantId",userToken.getId());
UserByPort departmentHeadByUser = findDepartmentHeadByUser(userToken);
map.put("departmenthead",departmentHeadByUser.getId());
// UserByPort departmentHeadByUser = findDepartmentHeadByUser(userToken);
// map.put("departmenthead",departmentHeadByUser.getId());
List<Integer> params = (List<Integer>) map.get("params");
Integer integer = 0;
if(params.size() < 1 && map.size() > 3){
@ -147,11 +219,12 @@ public class DepositoryRecordController {
Integer temp = params.get(i);
Map<String,Object> insert = new HashMap<>();
insert.put("applicantId",userToken.getId());
insert.put("departmenthead",departmentHeadByUser.getId());
// insert.put("departmenthead",departmentHeadByUser.getId());
insert.put("mid",map.get("mid"+temp));
insert.put("quantity",map.get("quantity"+temp));
insert.put("applyRemark",map.get("applyRemark"+temp));
insert.put("code",map.get("code"+temp));
insert.put("placeId",map.get("placeId"+temp));
integer += depositoryRecordService.insertApplicationOutRecord(insert);
}
integer += depositoryRecordService.insertApplicationOutRecord(map);

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

@ -1,17 +1,12 @@
package com.dreamchaser.depository_manage.controller;
import com.dreamchaser.depository_manage.entity.Depository;
import com.dreamchaser.depository_manage.entity.Material;
import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.MaterialP;
import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.pojo.RoleAndDepository;
import com.dreamchaser.depository_manage.pojo.StatusInfo;
import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.security.bean.UserToken;
import com.dreamchaser.depository_manage.service.DepositoryService;
import com.dreamchaser.depository_manage.service.MaterialService;
import com.dreamchaser.depository_manage.service.PlaceService;
import com.dreamchaser.depository_manage.service.RoleService;
import com.dreamchaser.depository_manage.utils.CrudUtil;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
@ -39,6 +34,9 @@ public class MaterialController {
@Autowired
DepositoryService depositoryService;
@Autowired
PlaceService placeService;
/**
* 根据物料进行查询
* @param map
@ -54,7 +52,7 @@ public class MaterialController {
public RestResponse findInventory(@RequestParam Map<String,Object> map,HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
List<RoleAndDepository> depositoryAndRole = roleService.findDepositoryAndRole(userToken.getId());
List<MaterialP> materialPByCondition = materialService.findMaterialPByCondition(map);
List<MaterialP> materialPByCondition = materialService.findInventory(map);
List<MaterialP> list = new ArrayList<>();
for (RoleAndDepository roleAndDepository : depositoryAndRole) {
for (MaterialP materialP : materialPByCondition) {
@ -141,30 +139,46 @@ public class MaterialController {
* @return
*/
@GetMapping("/findMatrialById")
public RestResponse findMatrialById(@RequestParam(value = "mid",required = false) String mid){
public RestResponse findMatrialById(@RequestParam(value = "mid",required = false) String mid,HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
if("".equals(mid)){
return new RestResponse("",0,200);
}
Material materialById = materialService.findMaterialById(ObjectFormatUtil.toInteger(mid));
return new RestResponse(materialById,1,200);
List<PlaceP> placePList = new ArrayList<>();
List<Depository> depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userToken.getMaindeparment().toString());
for (int i = 0; i < depositoryByAdminorg.size(); i++) {
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(ObjectFormatUtil.toInteger(mid), depositoryByAdminorg.get(i).getId());
placePList.addAll(placeByMidAndDid);
}
Map<String,Object> map = new HashMap<>();
map.put("materialById",materialById);
map.put("placeList",placePList);
return new RestResponse(map,1,200);
}
@GetMapping("/findMatrialByCode")
public RestResponse findMatrialByCode(@RequestParam(value = "code") String code,HttpServletRequest request){
public RestResponse findMatrialByCode(@RequestParam Map<String,Object> map,HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
List<Depository> depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userToken.getMaindeparment().toString());
Map<String,Object> param = new HashMap<>();
String code = map.get("code").toString();
String type = map.get("type").toString();
if("".equals(code)){
return new RestResponse(null,1,200);
}
param.put("code",code);
List<MaterialP> materialPByCondition = new ArrayList<>();
for (int i = 0; i < depositoryByAdminorg.size(); i++) {
param.put("depositoryId",depositoryByAdminorg.get(i).getId());
materialPByCondition = materialService.findMaterialPByCondition(param);
if(materialPByCondition.size() > 0){
break;
if("out".equals(type)) {
for (int i = 0; i < depositoryByAdminorg.size(); i++) {
param.put("depositoryId", depositoryByAdminorg.get(i).getId());
materialPByCondition = materialService.findMaterialPByCondition(param);
if (materialPByCondition.size() > 0) {
break;
}
}
}else{
materialPByCondition = materialService.findMaterialPByCondition(param);
}
MaterialP mp = null;
if(materialPByCondition.size() > 0){

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

@ -14,6 +14,7 @@ import com.dreamchaser.depository_manage.utils.DateUtil;
import com.dreamchaser.depository_manage.utils.HttpUtils;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import com.dreamchaser.depository_manage.utils.WordUtil;
import com.sun.org.apache.xpath.internal.operations.Mod;
import javafx.geometry.Pos;
import org.apache.http.protocol.HTTP;
import org.springframework.beans.factory.annotation.Autowired;
@ -864,6 +865,18 @@ public class PageController {
return mv;
}
@GetMapping("/insertListPlace")
public ModelAndView insertListPlace(Integer depositoryId){
ModelAndView mv = new ModelAndView();
mv.setViewName("pages/place/place_list_add");
if(depositoryId != null){
mv.addObject("depositoryId",depositoryId);
}else{
throw new MyException("缺少必要参数!");
}
return mv;
}
@GetMapping("findWareHouseByParentId")
public ModelAndView findWareHouseByParentId(Integer parentId) {
ModelAndView mv = new ModelAndView();
@ -975,6 +988,8 @@ public class PageController {
depositoryManager.add(user);
depositoryManagerNames += user.getName() +",";
}
Place placeById = placeService.findPlaceById(recordP.getPlaceId());
recordP.setPCode(placeById.getCode());
recordP.setApplicantTime(DateUtil.TimeStampToDateTime(Long.valueOf(recordP.getApplicantTime())));
recordP.setDepartmentheadTime(DateUtil.TimeStampToDateTime(Long.valueOf(recordP.getDepartmentheadTime())));
recordP.setDepositoryManagerName(depositoryManagerNames);
@ -995,6 +1010,7 @@ public class PageController {
applicationInRecordPById.setApplicantName(userByPort.getName());
applicationInRecordPById.setApplicantTime(DateUtil.TimeStampToDateTime(Long.valueOf(applicationInRecordPById.getApplicantTime())));
applicationInRecordPById.setPrice(applicationInRecordPById.getPrice() / 100);
mv.addObject("record", applicationInRecordPById);
} else {
throw new MyException("缺少必要参数!");
@ -1033,6 +1049,8 @@ public class PageController {
applicationOutRecordPById.setDepartmentheadTime(DateUtil.TimeStampToDateTime(Long.valueOf(applicationOutRecordPById.getDepartmentheadTime())));
applicationOutRecordPById.setDepositoryManagerTime(DateUtil.TimeStampToDateTime(Long.valueOf(applicationOutRecordPById.getDepositoryManagerTime())));
applicationOutRecordPById.setPrice(applicationOutRecordPById.getPrice() / 100);
Place placeById = placeService.findPlaceById(applicationOutRecordPById.getPlaceId());
applicationOutRecordPById.setPCode(placeById.getCode());
mv.addObject("record", applicationOutRecordPById);
} else {
throw new MyException("缺少必要参数!");

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

@ -1,8 +1,7 @@
package com.dreamchaser.depository_manage.controller;
import com.dreamchaser.depository_manage.entity.Depository;
import com.dreamchaser.depository_manage.entity.Material;
import com.dreamchaser.depository_manage.entity.Place;
import com.baomidou.mybatisplus.extension.api.R;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.MaterialP;
import com.dreamchaser.depository_manage.pojo.PlaceP;
@ -10,11 +9,13 @@ import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.service.DepositoryService;
import com.dreamchaser.depository_manage.service.MaterialService;
import com.dreamchaser.depository_manage.service.PlaceService;
import com.dreamchaser.depository_manage.service.RoleService;
import com.dreamchaser.depository_manage.utils.CrudUtil;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@ -32,6 +33,9 @@ public class PlaceController {
@Autowired
DepositoryService depositoryService;
@Autowired
RoleService roleService;
/**
* 根据条件查询库位
*
@ -46,12 +50,19 @@ public class PlaceController {
Place place = placeByCondition.get(i);
PlaceP placeP = new PlaceP(place);
Integer depositoryId = place.getDid();
Integer mid = place.getMid();
Depository depositoryById = depositoryService.findDepositoryRecordById(depositoryId);
if(mid != null) {
// 获取当前库位所有的物料信息
List<MaterialAndPlace> placeAndMaterialByPid = placeService.findPlaceAndMaterialByPid(place.getId());
if(placeAndMaterialByPid == null){
placeAndMaterialByPid = new ArrayList<>();
}
StringBuilder mname = new StringBuilder();
for (int j = 0; j < placeAndMaterialByPid.size(); j++) {
Integer mid = placeAndMaterialByPid.get(j).getMid();
Material materialById = materialService.findMaterialById(mid);
placeP.setMname(materialById.getMname());
mname.append(materialById.getMname()+",");
}
placeP.setMname(mname.toString());
placeP.setDepositoryName(depositoryById.getDname());
placeP.setDepositoryCode(depositoryById.getCode());
placePList.add(placeP);
@ -64,15 +75,17 @@ public class PlaceController {
String type = (String) map.get("type");
Map<String, Object> insert = new HashMap<>();
Integer success = 0;
Integer total = 0;
if ("one".equals(type)) {
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"));
Integer place_z = ObjectFormatUtil.toInteger(map.get("place_z"));
String min = (String) map.get("min");
String max = (String) map.get("max");
String code = String.format("%02d", place_x) + String.format("%02d", place_y) + String.format("%02d", place_z);
// String code = String.format("%02d", place_x) + String.format("%02d", place_y) + String.format("%02d", place_z);
String code = String.format("%02d", place_x) + String.format("%02d", place_z);
insert.put("x", place_x);
insert.put("y", place_y);
// insert.put("y", place_y);
insert.put("z", place_z);
insert.put("code", code);
insert.put("did", map.get("depositoryId"));
@ -87,14 +100,52 @@ public class PlaceController {
insert.put("max", 0);
}
insert.put("state",1);
insert.put("quantity",0);
success += placeService.InsertPlace(insert);
} else {
}
else if("list".equals(type)){
//获取起始、终止行
Integer place_start_x = ObjectFormatUtil.toInteger(map.get("place_start_x"));
Integer place_end_x = ObjectFormatUtil.toInteger(map.get("place_end_x"));
//获取起始、终止列
// Integer place_start_y = ObjectFormatUtil.toInteger(map.get("place_start_y"));
// Integer place_end_y = ObjectFormatUtil.toInteger(map.get("place_end_y"));
//获取起始、终止层
Integer place_start_z = ObjectFormatUtil.toInteger(map.get("place_start_z"));
Integer place_end_z = ObjectFormatUtil.toInteger(map.get("place_end_z"));
// 计算所需库位数目
// total = (place_end_x - place_start_x) * (place_end_y - place_start_y) * (place_end_z - place_start_z);
total = (place_end_x - place_start_x) * (place_end_z - place_start_z);
String min = (String) map.get("min");
String max = (String) map.get("max");
for (int i = place_start_x; i < place_end_x; i++) {
// for (int j = place_start_y; j < place_end_y; j++) {
for (int k = place_start_z; k < place_end_z; k++) {
// String code = String.format("%02d", i) + String.format("%02d", j) + String.format("%02d", k);
String code = String.format("%02d", i) + String.format("%02d", k);
insert.put("x",i);
// insert.put("y",j);
insert.put("z",k);
insert.put("code",code);
insert.put("min",min);
insert.put("max",max);
insert.put("did", map.get("depositoryId"));
insert.put("state",1);
insert.put("quantity",0);
success += placeService.InsertPlace(insert);
}
// }
}
}
else{
throw new MyException("所需请求参数缺失!");
}
if ("one".equals(type)) {
return CrudUtil.postHandle(success, 1);
} else {
return new RestResponse();
} else if("list".equals(type)){
return CrudUtil.postHandle(success,total);
}else{
throw new MyException("请求参数错误!");
}
}
@ -128,13 +179,14 @@ public class PlaceController {
}
Map<String, Object> update = new HashMap<>();
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"));
Integer place_z = ObjectFormatUtil.toInteger(map.get("place_z"));
String min = (String) map.get("min");
String max = (String) map.get("max");
String code = String.format("%02d", place_x) + String.format("%02d", place_y) + String.format("%02d", place_z);
// String code = String.format("%02d", place_x) + String.format("%02d", place_y) + String.format("%02d", place_z);
String code = String.format("%02d", place_x) + String.format("%02d", place_z);
update.put("x", place_x);
update.put("y", place_y);
// update.put("y", place_y);
update.put("z", place_z);
update.put("code", code);
update.put("did", map.get("depositoryId"));
@ -151,4 +203,19 @@ public class PlaceController {
update.put("id",map.get("id"));
return CrudUtil.postHandle(placeService.UpdatePlace(update),1);
}
@PostMapping("/findPlaceByMid")
public RestResponse findPlaceByMid(@RequestBody Map<String,Object> map, HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
List<Depository> depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userToken.getMaindeparment().toString());
Integer mid = ObjectFormatUtil.toInteger(map.get("mid"));
List<PlaceP> placeList = new ArrayList<>();
for (int i = 0; i < depositoryByAdminorg.size(); i++) {
Depository depository = depositoryByAdminorg.get(i);
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(mid, depository.getId());
placeList.addAll(placeByMidAndDid);
}
return new RestResponse(placeList);
}
}

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

@ -105,4 +105,9 @@ public class ApplicationOutRecord {
*/
private Integer transferId;
/**
* 对应库位id
*/
private Integer placeId;
}

2
src/main/java/com/dreamchaser/depository_manage/entity/ExcelInfoByInventory.java

@ -45,6 +45,6 @@ public class ExcelInfoByInventory {
private String price;
/** 仓库编码 */
@ExcelProperty("库位码")
@ExcelProperty(value = "库位码")
private String depositoryCode;
}

8
src/main/java/com/dreamchaser/depository_manage/entity/Material.java

@ -57,10 +57,16 @@ public class Material {
private String texture;
/**
* 仓库编
* 仓库编
*/
private String depositoryCode;
/**
* 库位编码
*/
private String placeCode;
/**
* 暂存额度
*/

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

@ -54,4 +54,9 @@ public class Place {
* 当前库位状态
*/
private Integer state;
/**
* 当前库位数目
*/
private Integer quantity;
}

10
src/main/java/com/dreamchaser/depository_manage/listener/ExcelListener.java

@ -23,6 +23,9 @@ public class ExcelListener<T> extends AnalysisEventListener<T> {
// 获取错误信息
List<String> errMsg = new ArrayList<>();
// 返回读取到的数据所在行列
List<String> dataIndex = new ArrayList<>();
public ExcelListener() {
}
@ -30,8 +33,10 @@ public class ExcelListener<T> extends AnalysisEventListener<T> {
@Override
public void invoke(T t, AnalysisContext analysisContext) {
ExcelInValid.valid(t,analysisContext);
String index = "第"+analysisContext.readSheetHolder().getRowIndex()+"行";
log.info("【Excel文件】解析到一条数据{}:", JSON.toJSONString(t));
dataList.add(t);
dataIndex.add(index);
}
@ -45,6 +50,10 @@ public class ExcelListener<T> extends AnalysisEventListener<T> {
return dataList;
}
public List<String> getDataIndex() {
return dataIndex;
}
/**
* 在转换异常 获取其他异常下会调用本接口抛出异常则停止读取如果这里不抛出异常则 继续读取下一行
*
@ -89,4 +98,5 @@ public class ExcelListener<T> extends AnalysisEventListener<T> {
public List<String> retrunErrMsg(){
return errMsg;
}
}

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

@ -57,11 +57,11 @@
<select id="findDepositoryByAdminorg" resultMap="depositoryMap" parameterType="string">
SELECT
<include refid="allColumns" />
FROM depository d WHERE 1 = 1
FROM depository d WHERE 1 = 1 and d.state != 3
<if test="adminorg != null and adminorg != ''">
and d.adminorg = #{adminorg}
</if>
or d.adminorg = '' and d.state != 3
or d.adminorg = ''
</select>
<select id="findDepositoryByAdminorgAndParent" resultMap="depositoryMap" parameterType="map">

19
src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.java

@ -1,9 +1,6 @@
package com.dreamchaser.depository_manage.mapper;
import com.dreamchaser.depository_manage.entity.ApplicationOutRecord;
import com.dreamchaser.depository_manage.entity.DepositoryRecord;
import com.dreamchaser.depository_manage.entity.SimpleApplicationOutRecord;
import com.dreamchaser.depository_manage.entity.SimpleDepositoryRecord;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.pojo.ApplicationInRecordP;
import com.dreamchaser.depository_manage.pojo.ApplicationOutRecordP;
import org.apache.ibatis.annotations.Mapper;
@ -273,5 +270,19 @@ public interface DepositoryRecordMapper {
*/
Integer deleteApplicationOutRecordByIds(List<Integer> list);
/**
* 根据申请单号获取入库申请
* @param code
* @return
*/
ApplicationInRecord findApplicationInByCode(String code);
/**
* 根据申请单号获取出库申请
* @param code
* @return
*/
ApplicationOutRecord findApplicationOutByCode(String code);
}

33
src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml

@ -89,6 +89,7 @@
<result column="istransfer" property="istransfer" jdbcType="INTEGER" />
<result column="transferId" property="transferId" jdbcType="INTEGER" />
<result column="mcode" property="mcode" jdbcType="VARCHAR" />
<result column="placeId" property="placeId" jdbcType="INTEGER" />
</resultMap>
@ -123,7 +124,7 @@
<sql id="ApplicationOutRecordInfo">
aorid,mid,mname,depositoryId,dname,applicantId,applicantTime,applyRemark,aorcode,aorpirce,aorquantity,departmenthead,departmentheadPass,departmentHeadTime,departmentheadMessage,
depositoryManager,depositoryManagerPass,depositoryManagerTime,depositoryManagerMessage,aorstate,istransfer,transferId,mcode
depositoryManager,depositoryManagerPass,depositoryManagerTime,depositoryManagerMessage,aorstate,istransfer,transferId,mcode,placeId
</sql>
<!-- 查询所有数据行数 -->
<select id="findCount" resultType="integer">
@ -353,6 +354,9 @@
<if test="istransfer != null and istransfer != ''">
and istransfer = #{istransfer}
</if>
<if test="placeId != null">
and placeId = #{placeId}
</if>
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
@ -377,6 +381,13 @@
where aorid = #{id}
</select>
<select id="findApplicationOutByCode" parameterType="string" resultMap="applicationOutRecord">
select
<include refid="ApplicationOutRecordInfo"/>
from applicationOutRecordInfo
where aorcode = #{code}
</select>
<!--根据主键查询入库记录-->
<select id="findApplicationInRecordPById" parameterType="int" resultMap="applicationInRecord">
select
@ -385,6 +396,13 @@
where airid = #{id}
</select>
<select id="findApplicationInByCode" parameterType="string" resultMap="applicationInRecord">
select
<include refid="ApplicationInRecordInfo"/>
from applicationInRecordInfo
where aircode = #{code}
</select>
<!-- 根据条件查询入库记录数-->
<select id="findApplicationInRecordPCountByCondition" parameterType="map" resultType="int">
select
@ -565,7 +583,7 @@
<insert id="insertApplicationOutRecord" parameterType="map" useGeneratedKeys="true" keyProperty="id">
insert into application_out_record
(id,mid,depository_id,applicant_id,applicant_time,code,price,quantity,departmenthead,departmenthead_pass,departmenthead_time,
departmenthead_messgae,depository_manager,depository_manager_pass,depository_manager_time,depository_manager_message,apply_remark,state,istransfer,transferId)
departmenthead_messgae,depository_manager,depository_manager_pass,depository_manager_time,depository_manager_message,apply_remark,state,istransfer,transferId,placeId)
values(
#{id},
#{mid},
@ -607,7 +625,8 @@
#{applyRemark},
#{state},
#{istransfer},
#{transferId}
#{transferId},
#{placeId}
)
</insert>
@ -804,7 +823,10 @@
depository_manager_message = #{depositoryManagerMessage},
</if>
<if test="state != null and state != ''">
state = #{state}
state = #{state},
</if>
<if test="placeId != null">
placeId = #{placeId}
</if>
</set>
WHERE id = #{id}
@ -1023,4 +1045,7 @@
</mapper>

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

@ -2,6 +2,7 @@ package com.dreamchaser.depository_manage.mapper;
import com.dreamchaser.depository_manage.entity.ExcelInfo;
import com.dreamchaser.depository_manage.entity.Material;
import com.dreamchaser.depository_manage.pojo.MaterialP;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@ -66,6 +67,12 @@ public interface MaterialMapper {
*/
List<Material> findMaterialByCondition(Map<String,Object>map);
/**
* 根据条件查询符合条件的库存
* @param map
* @return
*/
List<Material> findInventory(Map<String,Object> map);
/**
* 根据id查询库存信息

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

@ -129,6 +129,42 @@
</if>
</select>
<!--根据条件查询库存-->
<select id="findInventory" resultMap="materialMap" parameterType="map">
SELECT
<include refid="allColumnsAndTypeNameOnView" />
from findMaterial
where 1 = 1
<if test="mid != null">
and id = #{mid}
</if>
<if test="depositoryId != null">
AND depository_id = #{depositoryId}
</if>
<if test="mname != null and mname != ''">
AND mname LIKE CONCAT('%', #{mname}, '%')
</if>
<if test="quantity != null">
AND quantity = #{quantity}
</if>
<if test="price != null">
AND price = #{price}
</if>
<if test="materialTypeId != null">
AND type_id = #{materialTypeId}
</if>
<if test="state != null and state != ''">
And state = #{state}
</if>
<if test="code != null and code != '' ">
and code = #{code}
</if>
and depository_id is not null
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select>
<!-- 根据仓库查询物料-->
<select id="findMaterialByDepositorys" resultMap="materialMap" parameterType="list">
SELECT
@ -156,6 +192,7 @@
where id = #{id}
</select>
<!-- 根据主键查询数据 -->
<select id="findMaterialByIds" resultMap="materialMap" parameterType="list">
SELECT
@ -165,6 +202,7 @@
#{id}
</foreach>
</select>
<!-- 插入数据 -->
<insert id="insertMaterial" parameterType="map">

61
src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.java

@ -1,5 +1,6 @@
package com.dreamchaser.depository_manage.mapper;
import com.dreamchaser.depository_manage.entity.MaterialAndPlace;
import com.dreamchaser.depository_manage.entity.Place;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@ -85,4 +86,64 @@ public interface PlaceMapper {
* @return
*/
Integer changeStateToDeletedByIds(List<Integer> ids);
/**
* 获取当前仓库下的所有行倒序
* @param did
* @return
*/
List<Integer> findPlaceXByDid(Integer did);
/**
* 获取当前仓库下该排的所有列倒序
* @param map
* @return
*/
List<Integer> findPlaceYByDid(Map<String,Object> map);
/**
* 获取当前仓库该排下的所有层倒序
* @param map
* @return
*/
List<Integer> findPlaceZByDid(Map<String,Object> map);
List<Place> findPlaceByMid(Integer mid);
/**
* 将物料添加到库位
* @param map
* @return
*/
Integer addMaterialOnPlace(Map<String,Object> map);
/**
* 将物料从库位删除
* @param id
* @return
*/
Integer delMaterialOnPlace(Integer id);
/**
* 根据mid与did查询库位
* @param map
* @return
*/
List<Place> findPlaceByMidAndDid(Map<String,Object> map);
/**
* 根据库位获取当前库位所存储的物料
*/
List<MaterialAndPlace> findPlaceAndMaterialByPid(Integer id);
/**
* 根据当前库位编号及物料编号获取具体库位
*/
MaterialAndPlace findPlaceAndMaterialByMidAndPid(Map<String,Object> map);
/**
* 修改当前库位存放物料信息
* @param map
* @return
*/
Integer updateMaterialAndPlace(Map<String,Object> map);
Integer updateMaterialAndPlace(MaterialAndPlace mp);
}

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

@ -16,13 +16,30 @@
<result column="min" property="min" jdbcType="INTEGER" />
<result column="max" property="max" jdbcType="INTEGER" />
<result column="state" property="state" jdbcType="INTEGER" />
<result column="quantity" property="quantity" jdbcType="INTEGER" />
</resultMap>
<resultMap id="materialAndPlaceMap" type="com.dreamchaser.depository_manage.entity.MaterialAndPlace">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="mid" property="mid" jdbcType="INTEGER" />
<result column="pid" property="pid" jdbcType="INTEGER" />
<result column="did" property="did" jdbcType="INTEGER" />
<result column="quantity" property="quantity" jdbcType="INTEGER" />
<result column="max" property="max" jdbcType="INTEGER" />
<result column="min" property="min" jdbcType="INTEGER" />
<result column="code" property="code" jdbcType="VARCHAR" />
</resultMap>
<!-- 表查询字段 -->
<sql id="allColumns">
p.id,p.x,p.y,p.z,p.code,p.mid,p.did,p.min,p.max,p.state
p.id,p.x,p.y,p.z,p.code,p.mid,p.did,p.min,p.max,p.state,p.quantity
</sql>
<sql id="allColumnsByMaterialAndPlace">
mp.id,mp.mid,mp.pid,mp.quantity,p.code,p.max,p.min,p.did
</sql>
<!-- 查询所有 -->
<select id="findPlaceAll" resultMap="placeMap">
SELECT
@ -31,6 +48,19 @@
where p.state != 3
</select>
<select id="findPlaceByMidAndDid" resultMap="placeMap" parameterType="map">
SELECT
<include refid="allColumns" />
from materialandplace mp left join place p on p.id = mp.pid
where 1 = 1
<if test="did != null and did != ''">
and p.did = #{did}
</if>
<if test="mid != null and mid != ''">
and mp.mid = #{mid}
</if>
</select>
<!-- 根据条件参数查询列表 -->
<select id="findPlaceByCondition" resultMap="placeMap" parameterType="map">
SELECT
@ -49,10 +79,10 @@
AND p.z = #{z}
</if>
<if test="code != null and code != ''">
AND p.code = #{code}
AND p.code LIKE CONCAT('%', #{code}, '%')
</if>
<if test="mid != null and mid != ''">
AND p.mid = #{mid}
AND find_in_set(#{mid},p.mid)
</if>
<if test="did != null and did != ''">
AND p.did = #{did}
@ -85,6 +115,9 @@
<if test="y != null and y != ''">
AND p.y = #{y}
</if>
<if test="code != null and code != ''">
AND p.code LIKE CONCAT('%', #{code}, '%')
</if>
<if test="z != null and z != ''">
AND p.z = #{z}
</if>
@ -112,6 +145,12 @@
FROM place p WHERE 1 = 1 and p.did = #{did}
</select>
<select id="findPlaceByMid" parameterType="int" resultMap="placeMap">
SELECT
<include refid="allColumns" />
FROM materialandplace mp left join place p on p.id = mp.pid WHERE 1 = 1 and mp.mid = #{mid}
</select>
<!-- 根据主键查询信息 -->
<select id="findPlaceById" resultMap="placeMap" parameterType="int">
SELECT
@ -119,10 +158,29 @@
FROM place p WHERE p.id = #{id}
</select>
<select id="findPlaceAndMaterialByPid" resultMap="materialAndPlaceMap" parameterType="int">
SELECT
<include refid="allColumnsByMaterialAndPlace" />
FROM materialandplace mp left join place p on p.id = mp.pid WHERE 1 = 1 and p.id = #{id}
</select>
<select id="findPlaceAndMaterialByMidAndPid" resultMap="materialAndPlaceMap" parameterType="map">
SELECT
<include refid="allColumnsByMaterialAndPlace" />
FROM materialandplace mp left join place p on p.id = mp.pid
where 1 = 1
<if test="mid != null">
and mp.mid = #{mid}
</if>
<if test="pid != null">
and mp.pid = #{pid}
</if>
</select>
<!-- 新增信息 -->
<insert id="InsertPlace">
INSERT INTO place (
id,x,y,z,code, mid,did,min,max,state
id,x,y,z,code, mid,did,min,max,state,quantity
) VALUES (
#{id},
#{x},
@ -133,10 +191,25 @@
#{did},
#{min},
#{max},
#{state}
#{state},
#{quantity}
)
</insert>
<insert id="addMaterialOnPlace">
insert into materialandplace(id,mid,pid,quantity)
values (
#{id},
#{mid},
#{pid},
#{quantity}
)
</insert>
<delete id="delMaterialOnPlace" parameterType="int">
DELETE FROM materialandplace WHERE id = #{id}
</delete>
<!-- 修改信息 -->
<update id="UpdatePlace">
UPDATE place
@ -166,12 +239,30 @@
max = #{max},
</if>
<if test="state != null and state !=''">
state = #{state}
state = #{state},
</if>
<if test="quantity != null">
quantity = #{quantity}
</if>
</set>
WHERE id = #{id}
</update>
<update id="updateMaterialAndPlace">
update materialandplace
<set>
<if test="mid != null">
mid = #{mid},
</if>
<if test="quantity != null">
quantity = #{quantity},
</if>
<if test="pid != null">
pid = #{pid}
</if>
</set>
where id = #{id}
</update>
<!-- 根据主键删除 -->
@ -201,4 +292,17 @@
WHERE id = #{id}
</update>
<!--获取当前仓库下的行-->
<select id="findPlaceXByDid" parameterType="int" resultType="int">
select DISTINCT x from place where did = #{did} and state != 3 ORDER BY x desc
</select>
<!--获取当前仓库下的列-->
<select id="findPlaceYByDid" parameterType="map" resultType="int">
select DISTINCT y from place where did = #{did} and x = #{x} and state != 3 ORDER BY y desc
</select>
<!--获取当前仓库下的ceng-->
<select id="findPlaceZByDid" parameterType="map" resultType="int">
select DISTINCT z from place where did = #{did} and x = #{x} and state != 3 ORDER BY z desc
</select>
</mapper>

10
src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordP.java

@ -133,4 +133,14 @@ public class ApplicationOutRecordP {
* 物料存货编码
*/
private String mcode;
/**
* 对应库位id
*/
private Integer placeId;
/**
* 对应库位编码
*/
private String pCode;
}

7
src/main/java/com/dreamchaser/depository_manage/pojo/MaterialP.java

@ -95,6 +95,12 @@ public class MaterialP {
private String warehouseManager;
/**
* 库位编码
*/
private String placeCode;
public MaterialP(Integer id, Integer depositoryId, String mname, Integer quantity, Double price, String typeName) {
@ -119,5 +125,6 @@ public class MaterialP {
this.version = material.getVersion(); // 规格型号
this.depositoryCode = material.getDepositoryCode(); // 仓库编码
this.depositoryId = material.getDepositoryId(); // 仓库id
this.placeCode = material.getPlaceCode(); // 库位编码
}
}

15
src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java

@ -284,4 +284,19 @@ public interface DepositoryRecordService {
* @return
*/
Double CalculateAllApplicationOutCount(String state);
/**
* 将物料入库到库位
* @param map
* @return
*/
Integer applicationInPlace(Map<String,Object> map);
/**
* 将刚入库的记录删除
* @param map
* @return
*/
Integer deleteApplicaionInPlace(Map<String,Object> map);
}

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

@ -51,6 +51,12 @@ public interface MaterialService {
*/
List<MaterialP> findMaterialPByCondition(Map<String, Object> map);
/**
* 根据条件查询符合条件的库存
* @param map
* @return
*/
List<MaterialP> findInventory(Map<String,Object> map);
/**
* 根据编码获取对应物料

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

@ -1,6 +1,8 @@
package com.dreamchaser.depository_manage.service;
import com.dreamchaser.depository_manage.entity.MaterialAndPlace;
import com.dreamchaser.depository_manage.entity.Place;
import com.dreamchaser.depository_manage.pojo.PlaceP;
import java.util.List;
import java.util.Map;
@ -83,5 +85,22 @@ public interface PlaceService {
*/
Integer changeStateToDeletedByIds(List<Integer> ids);
/**
* 根据物料与仓库获取库位
* @param mid
* @return
*/
List<PlaceP> findPlaceByMidAndDid(Integer mid, Integer depositoryId);
/**
* 根据库位获取当前库位所存储的物料
*/
List<MaterialAndPlace> findPlaceAndMaterialByPid(Integer id);
/**
* 根据当前库位编号及物料编号获取具体库位
*/
MaterialAndPlace findPlaceAndMaterialByMidAndPid(Integer pid,Integer mid);
}

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

@ -53,8 +53,10 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
private RedisTemplate<String, String> redisTemplate;
@Autowired
private RedissonClient redissonClient;
private PlaceMapper placeMapper;
@Autowired
private RedissonClient redissonClient;
@ -92,12 +94,12 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
Map<String, Object> temp = new HashMap<>();
temp.put("dname", depositoryRecordById.getDname());
temp.put("dcode", depositoryRecordById.getCode());
// 获取当前仓库库存
Double Inventory = depositoryMapper.getToDayInventoryByDName(temp);
String code = createCode(depositoryRecordById.getDname(), "InOrderNumber");
String code = createCode(depositoryRecordById.getDname(), "InOrderNumber");//构造单号
Double quantity = Double.parseDouble((String) map.get("quantity"));
Double price = Double.parseDouble((String)map.get("price"));
Double price = Double.parseDouble((String) map.get("price"));
Integer mid = ObjectFormatUtil.toInteger(map.get("mid"));
Material material = materialMapper.findMaterialById(mid);
// 判断剩余容量是否可以存入
if (depositoryRecordById.getMaxNumber() - Inventory < quantity) {
@ -108,17 +110,18 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
param.put("mname", material.getMname());
List<Material> materialByCondition = materialMapper.findMaterialByCondition(param);
// 获取当前入库金额
Double amounts = (quantity * price * 100);
Double amounts = (quantity * price * 100);
// 获取平均价格
Double avgPrice = (material.getAmounts() + amounts) / (material.getQuantity() + quantity);
map.put("amounts", amounts);
map.put("price",price * 100);
map.put("price", price * 100);
String simpleTime = DateUtil.getSimpleTime(new Date());
map.put("applicant_time", DateUtil.DateTimeToTimeStamp(simpleTime));
map.put("code", code);
// 获取当前物料
if (materialByCondition.size() > 0) { // 如果当前存在
Material mt = materialByCondition.get(0);
map.put("oldPrice",mt.getPrice());
mt.setAmounts(mt.getAmounts() + amounts);
mt.setQuantity((int) (mt.getQuantity() + quantity));
mt.setPrice(avgPrice);
@ -150,6 +153,10 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
*/
@Override
public Integer insertApplicationOutRecord(Map<String, Object> map) {
String placeId = (String) map.get("placeId");
if("".equals(placeId)){
map.put("placeId",0);
}
Double quantity = Double.parseDouble((String) map.get("quantity"));
Long time = DateUtil.DateTimeToTimeStamp(DateUtil.getSimpleTime(new Date()));
map.put("applicantTime", time);
@ -165,7 +172,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
Map<String, Object> update = new HashMap<>();
update.put("id", materialById.getId());
Integer numberOfTemporary = materialById.getNumberOfTemporary();
if(numberOfTemporary == null){
if (numberOfTemporary == null) {
numberOfTemporary = 0;
}
update.put("numberOfTemporary", numberOfTemporary + quantity);
@ -226,6 +233,114 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
return sum;
}
/**
* 将物料入库到库位
*
* @param map
* @return
*/
@Override
public Integer applicationInPlace(Map<String, Object> map) {
Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId"));
Integer quantity = ObjectFormatUtil.toInteger(map.get("quantity"));
Place placeById = placeMapper.findPlaceById(placeId);
// 获取当前物料基本信息
Integer mid = ObjectFormatUtil.toInteger(map.get("mid"));
Material materialById = materialMapper.findMaterialById(mid);
// 获取当前物料在当前仓库是否有库存记录
Map<String, Object> param = new HashMap<>();
param.put("code", materialById.getCode());
param.put("mname", materialById.getMname());
param.put("depositoryId", placeById.getDid());
List<Material> inventory = materialMapper.findInventory(param);
if (inventory.size() == 0) {
throw new MyException("未知错误,联系开发人员");
}
Material material = inventory.get(0);
if (placeById.getMid() != null) {
// 如果当前库位有物品
if (quantity > placeById.getMax() - placeById.getQuantity()) {
return -1;
}else {
// 添加库存
Map<String, Object> insert = new HashMap<>();
insert.put("mid",material.getId());
insert.put("pid", placeById.getId());
insert.put("quantity", quantity);
// 修改该库位容量
Map<String, Object> update = new HashMap<>();
update.put("id", placeById.getId());
update.put("quantity", quantity + placeById.getQuantity());
placeMapper.UpdatePlace(update);
return placeMapper.addMaterialOnPlace(insert);
}
} else {
if (quantity > placeById.getMax() - placeById.getQuantity()) {
return -1;
} else {
Map<String, Object> update = new HashMap<>();
update.put("id", placeById.getId());
update.put("quantity", quantity + placeById.getQuantity());
placeMapper.UpdatePlace(update);
// 添加库存
Map<String, Object> insert = new HashMap<>();
insert.put("mid",material.getId());
insert.put("pid", placeById.getId());
insert.put("quantity", quantity);
return placeMapper.addMaterialOnPlace(insert);
}
}
}
/**
* 将刚入库的记录删除
* @param map
* @return
*/
@Override
public Integer deleteApplicaionInPlace(Map<String, Object> map) {
String code = map.get("code").toString();
Integer quantity = ObjectFormatUtil.toInteger(map.get("quantity"));
Integer mid = ObjectFormatUtil.toInteger(map.get("mid"));
Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId"));
// 获取材料基本信息
Material materialById = materialMapper.findMaterialById(mid);
Object oldPrice1 = map.get("oldPrice");
Double oldPrice = 0.0;
if(oldPrice1 != null) {
oldPrice = Double.parseDouble(oldPrice1.toString());
}
Double price = Double.parseDouble(map.get("price").toString());
Integer id = ObjectFormatUtil.toInteger(map.get("id"));
String deleteType = map.get("delete").toString();
Map<String,Object> params = new HashMap<>();
params.put("code",materialById.getCode());
params.put("depositoryId",depositoryId);
List<Material> materialByCondition = materialMapper.findMaterialByCondition(params);
if(materialByCondition.size() < 1){
throw new MyException("出现未知错误,联系开发人员");
}
if("in".equals(deleteType)){
// 删除入库记录
depositoryRecordMapper.deleteApplicationInRecordById(id);
// 将库存还原
Material material = materialByCondition.get(0);
Map<String,Object> update = new HashMap<>();
update.put("quantity",material.getQuantity() - quantity);
update.put("price",oldPrice);
update.put("amounts",material.getAmounts() - quantity * price);
update.put("id",material.getId());
return materialMapper.updateMaterial(update);
}else if("out".equals(deleteType)){
return null;
}else {
throw new MyException("请求参数错误");
}
}
/**
* 转移申请
*
@ -293,13 +408,39 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
Material material = materialMapper.findMaterialById(record.getMid());
Integer depositoryManagerPass = (Integer) map.get("depositoryManagerPass");
if (depositoryManagerPass == 1) {
if (material.getQuantity() >= record.getQuantity()) {
boolean flag = true;
Integer placeId = record.getPlaceId();
MaterialAndPlace placeAndMaterialByMidAndPid = null;
if(placeId != 0){
Map<String,Object> params = new HashMap<>();
params.put("mid",material.getId());
params.put("pid",placeId);
// 获取当前物料所存放库位的数量
placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(params);
if(placeAndMaterialByMidAndPid.getQuantity() < record.getQuantity()){
// 如果当前库位数量不足
flag = false;
}
}
if (material.getQuantity() >= record.getQuantity() && flag) {
// 当前出库金额
Double sum = material.getPrice() * record.getQuantity();
material.setAmounts(material.getAmounts() - sum);
material.setQuantity(material.getQuantity() - record.getQuantity());
material.setNumberOfTemporary(material.getNumberOfTemporary() - record.getQuantity());
materialMapper.updateMaterial(material);
if(placeAndMaterialByMidAndPid != null){
// 修改当前库位存放物料的数量
placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() - record.getQuantity());
placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid);
}
// 修改库位数量
Place placeById = placeMapper.findPlaceById(placeId);
placeById.setQuantity(placeById.getQuantity() - record.getQuantity());
placeMapper.UpdatePlace(placeById);
if (record.getIstransfer() == 1) {
map.put("quantity", record.getQuantity().toString());
map.put("applicantId", record.getApplicantId());
@ -956,21 +1097,21 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
private String createCode(String depositoryName, String key) {
RLock lock = redissonClient.getLock(key);
// 单号(公司简称+仓库简称+年月日+数字(位数设置>=9))
String code = "GK";
String nowTime = DateUtil.getNowTime();
depositoryName = WordUtil.getPinYinHeadChar(depositoryName);
lock.lock(5,TimeUnit.SECONDS);
String orderNumber = redisTemplate.opsForValue().get(key);
if (orderNumber == null) {
redisTemplate.opsForValue().set(key, "1", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
orderNumber = "1";
}
int newNumber = ObjectFormatUtil.toInteger(orderNumber) + 1;
redisTemplate.boundValueOps(key).set(String.valueOf(newNumber), DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
lock.unlock();
orderNumber = String.format("%09d", ObjectFormatUtil.toInteger(orderNumber));
code = code + depositoryName + nowTime + orderNumber;
return code;
String code = "GK";
String nowTime = DateUtil.getNowTime();
depositoryName = WordUtil.getPinYinHeadChar(depositoryName);
lock.lock(5, TimeUnit.SECONDS);
String orderNumber = redisTemplate.opsForValue().get(key);
if (orderNumber == null) {
redisTemplate.opsForValue().set(key, "1", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
orderNumber = "1";
}
int newNumber = ObjectFormatUtil.toInteger(orderNumber) + 1;
redisTemplate.boundValueOps(key).set(String.valueOf(newNumber), DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
lock.unlock();
orderNumber = String.format("%09d", ObjectFormatUtil.toInteger(orderNumber));
code = code + depositoryName + nowTime + orderNumber;
return code;
}

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

@ -2,10 +2,9 @@ package com.dreamchaser.depository_manage.service.impl;
import cn.hutool.db.Page;
import com.dreamchaser.depository_manage.controller.PageController;
import com.dreamchaser.depository_manage.entity.Administration;
import com.dreamchaser.depository_manage.entity.Depository;
import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.DepositoryMapper;
import com.dreamchaser.depository_manage.mapper.PlaceMapper;
import com.dreamchaser.depository_manage.mapper.RoleMapper;
import com.dreamchaser.depository_manage.pojo.RoleAndDepository;
import com.dreamchaser.depository_manage.service.DepositoryService;
@ -27,6 +26,9 @@ public class DepositoryServiceImpl implements DepositoryService {
@Autowired
RoleMapper roleMapper;
@Autowired
PlaceMapper placeMapper;
/**
* 根据条件插入数据
* @param map 参数map
@ -324,12 +326,14 @@ public class DepositoryServiceImpl implements DepositoryService {
for (int i = 0; i < depositories.size(); i++) {
Depository d = depositories.get(i);
List<Object> childForMaterialTypeByParent = findChildForDepositoryByParent(d.getId(),adminorg);
Map<String, Object> stringObjectMap = InitTreeMenus2(d,childForMaterialTypeByParent);
Map<String, Object> stringObjectMap = InitTreeMenus2(d, childForMaterialTypeByParent);
list.add(stringObjectMap);
}
return list;
}
/**
* 获取当前部门以及公共仓库
* @param adminorg
@ -350,6 +354,9 @@ public class DepositoryServiceImpl implements DepositoryService {
}
return flag;
}
// 根据id获取子类
public List<Object> findChildForDepositoryByParent(Integer id,String adminorg){
Map<String,Object> param = new HashMap<>();
@ -359,20 +366,88 @@ public class DepositoryServiceImpl implements DepositoryService {
param.put("adminorg",adminorg);
}
// 获取当前父类的子类
// List<Depository> parentByDepository = depositoryMapper.getParentByDepository(id);
// List<Depository> parentByDepository = depositoryMapper.findDepositoryRecordPByCondition(param);
List<Depository> parentByDepository = depositoryMapper.findDepositoryByAdminorgAndParent(param);
if(parentByDepository.size() > 0){
for (int i = 0; i < parentByDepository.size(); i++) {
Depository d = parentByDepository.get(i);
List<Object> childForMaterialTypeByParent = findChildForDepositoryByParent(d.getId(),adminorg);
result.add(InitTreeMenus2(d,childForMaterialTypeByParent));
if(childForMaterialTypeByParent != null) {
result.add(InitTreeMenus2(d, childForMaterialTypeByParent));
}else{
List<Object> placeList = AddPlaceByDid(d);
result.add(InitTreeMenus2(d, placeList));
}
}
return result;
}else{
return null;
}
}
// 在仓库后添加库位信息
public List<Object> AddPlaceByDid(Depository d){
if(d != null) {
// 获取当前仓库下的所有库位
List<Object> result = new ArrayList<>();
// 获取该仓库的排
List<Integer> placeXByDid = placeMapper.findPlaceXByDid(d.getId());
if(placeXByDid.size() > 0) {
for (int i = 1; i <= placeXByDid.get(0); i++) {
Map<String,Object> placeX = new HashMap<>();
placeX.put("title","第"+i+"排货架");
placeX.put("id",-1);
Map<String,Object> param = new HashMap<>();
param.put("did",d.getId());
param.put("x",i);
List<Place> placeByCondition = placeMapper.findPlaceByCondition(param);
if(placeByCondition.size() > 0) {
List<Object> children = new ArrayList<>();
for (int k = 1; k <= placeByCondition.size(); k++) {
Map<String, Object> map = new HashMap<>();
map.put("title", placeByCondition.get(k - 1).getCode());
map.put("id", d.getId()+"-"+placeByCondition.get(k - 1).getId());
children.add(map);
}
placeX.put("children", children);
}
// 获取该仓库该排的列数
/*
List<Integer> placeYByDid = placeMapper.findPlaceYByDid(param);
if(placeYByDid.size() > 0) {
List<Object> childrenY = new ArrayList<>();
for (int j = 1; j <= placeYByDid.get(0); j++) {
Map<String,Object> placeY = new HashMap<>();
placeY.put("title","第"+j+"列");
placeY.put("id",-1);
childrenY.add(placeY);
param.put("y",j);
// 获取该仓库该排该列的库位
List<Place> placeByCondition = placeMapper.findPlaceByCondition(param);
List<Object> children= new ArrayList<>();
if(placeByCondition.size() > 0) {
for (int k = 1; k <= placeByCondition.size(); k++) {
Map<String, Object> map = new HashMap<>();
map.put("title", placeByCondition.get(k - 1).getCode());
map.put("id", d.getId()+"-"+placeByCondition.get(k - 1).getId());
children.add(map);
}
placeY.put("children", children);
}
}
placeX.put("children",childrenY);
}*/
result.add(placeX);
}
}
return result;
}
else {
return null;
}
}
// 构造树形组件数据模板
public Map<String,Object> InitTreeMenus2(Depository d,List<Object> children){
if(d != null) {

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

@ -1,13 +1,11 @@
package com.dreamchaser.depository_manage.service.impl;
import com.alibaba.fastjson.JSON;
import com.dreamchaser.depository_manage.entity.ExcelInfo;
import com.dreamchaser.depository_manage.entity.ExcelInfoByInventory;
import com.dreamchaser.depository_manage.entity.ExcelInfoByMT;
import com.dreamchaser.depository_manage.entity.Material;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.service.ExcelService;
import com.dreamchaser.depository_manage.service.MaterialService;
import com.dreamchaser.depository_manage.service.MaterialTypeService;
import com.dreamchaser.depository_manage.service.PlaceService;
import com.dreamchaser.depository_manage.utils.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
@ -16,10 +14,8 @@ import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.math.BigDecimal;
import java.util.*;
import static com.dreamchaser.depository_manage.utils.FileUtil.uploadFile;
@ -37,6 +33,9 @@ public class ExcelServiceImpl implements ExcelService {
@Autowired
MaterialTypeService materialTypeService;
@Autowired
PlaceService placeService;
/**
* 用于导入物料名称
* @param file
@ -206,41 +205,108 @@ public class ExcelServiceImpl implements ExcelService {
}
// 3.读取excel文件
Map<String,Object> readResult = excelutil.simpleExcelRead(filePath, ExcelInfoByInventory.class);
List<ExcelInfoByInventory> excelVos = (List<ExcelInfoByInventory>) readResult.get("dataList");
List<ExcelInfoByInventory> excelInfoByInventories = (List<ExcelInfoByInventory>) readResult.get("dataList");
List<String> errMsg =(List<String>) readResult.get("errMsg");
boolean empty = CollectionUtil.isEmpty(excelVos);
if ((CollectionUtil.isEmpty(excelVos) && errMsg.size() < 1) || (excelVos.size() < 2 && errMsg.size() < 1) ) {
List<String> dataIndex =(List<String>) readResult.get("dataIndex");
boolean empty = CollectionUtil.isEmpty(excelInfoByInventories);
if ((CollectionUtil.isEmpty(excelInfoByInventories) && errMsg.size() < 1) || (excelInfoByInventories.size() < 2 && errMsg.size() < 1) ) {
log.error("【导入Excel文件】上传Excel文件{}为空", file.getOriginalFilename());
return ResultVoUtil.error("上传Excel文件为空");
}
if ((CollectionUtil.isEmpty(excelVos) && errMsg.size() < 1) || (excelVos.size() < 2 && errMsg.size() < 1) ) {
if ((CollectionUtil.isEmpty(excelInfoByInventories) && errMsg.size() < 1) || (excelInfoByInventories.size() < 2 && errMsg.size() < 1) ) {
log.error("【导入Excel文件】上传Excel文件{}为空", file.getOriginalFilename());
return ResultVoUtil.error("上传Excel文件为空");
}
List<ExcelInfoByInventory> excelVos = new ArrayList<>();
// 判断当前库位码是否正确,并存入库位中
for (int i = 0; i < excelInfoByInventories.size(); i++) {
Material materialByCode = materialService.findMaterialByCode(excelInfoByInventories.get(i).getCode());
String placeCode = excelInfoByInventories.get(i).getDepositoryCode();
Integer depositoryId = excelInfoByInventories.get(i).getDepositoryId();
// 如果导入时输入库位信息
if(!placeCode.isEmpty()) {
Map<String,Object> placeMap = new HashMap<>();
placeMap.put("did",depositoryId);
placeMap.put("code",placeCode);
// 根据仓库及库位码获取库位
List<Place> placeByCondition = placeService.findPlaceByCondition(placeMap);
if(placeByCondition.size()>0){
// 如果有库位
Place place = placeByCondition.get(0);
// 如果库位有物料
if(!Objects.equals(place.getMid(), materialByCode.getId())) {
// 如果该库位的物料不是当前物料
String s = dataIndex.get(i);
String msg = s + "出现异常:" + excelInfoByInventories.get(i).getDepositoryCode() + " 该库位已有物料";
errMsg.add(msg);
continue;
}else {
// 如果当前库位没有物料或该库位存放的物料为当前物料
Integer quantity = ObjectFormatUtil.toInteger(excelInfoByInventories.get(i).getQuantity());
if(quantity > place.getMax() - place.getQuantity()){
// 如果当前库位无法放下
String s = dataIndex.get(i);
String msg = s + "出现异常:" + excelInfoByInventories.get(i).getDepositoryCode() + " 该库位无法存放当前数目的物料";
errMsg.add(msg);
continue;
}else {
Map<String, Object> updatePlace = new HashMap<>();
updatePlace.put("mid", materialByCode.getId());
updatePlace.put("id", place.getId());
updatePlace.put("quantity",quantity + place.getQuantity());
excelVos.add(excelInfoByInventories.get(i));
placeService.UpdatePlace(updatePlace);
}
}
}else{
String s = dataIndex.get(i);
String msg = s + "出现异常:" + excelInfoByInventories.get(i).getDepositoryCode() + " 该仓库没有该库位";
errMsg.add(msg);
continue;
}
}
}
readResult.put("dataList",excelVos);
// 4.通过线程池开启一个线程去执行数据库操作,主线程继续往下执行
// 4.1开启一个线程
TaskCenterUtil taskCenterUtil = TaskCenterUtil.getTaskCenterUtil();
taskCenterUtil.submitTask(() -> {
List<Object> success = new ArrayList<>();
Map<String,Object> returnResult = new HashMap<>();
for (int i = 0; i < excelVos.size(); i++) {
// 获取对应物料
Material materialByCode = materialService.findMaterialByCode(excelVos.get(i).getCode());
Map<String,Object> update = new HashMap<>();
update.put("price",excelVos.get(i).getPrice());
update.put("quantity",excelVos.get(i).getQuantity());
Integer depositoryId = excelVos.get(i).getDepositoryId();
update.put("quantity",String.valueOf(ObjectFormatUtil.toInteger(excelVos.get(i).getQuantity()) + materialByCode.getQuantity()));
// 如果模板中总金额未填写
if(excelVos.get(i).getAmounts() == null || "".equals(excelVos.get(i).getAmounts())){
update.put("amounts",Double.parseDouble(excelVos.get(i).getPrice())*100 * Double.parseDouble(excelVos.get(i).getQuantity()));
// 求均值
// 总金额
Double amounts = Double.parseDouble(excelVos.get(i).getPrice())*100 * Double.parseDouble(excelVos.get(i).getQuantity());
update.put("amounts",String.valueOf(materialByCode.getAmounts()+amounts));
// 保留两位
Double avgPrice = (materialByCode.getAmounts()+amounts) / (Double.parseDouble(excelVos.get(i).getQuantity()) + materialByCode.getQuantity() );
BigDecimal bg = new BigDecimal(avgPrice);
avgPrice = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
update.put("price",String.valueOf(avgPrice));
}else {
update.put("amounts", Double.parseDouble(excelVos.get(i).getAmounts()) * 100);
// 求均值
update.put("amounts", String.valueOf(materialByCode.getAmounts()+Double.parseDouble(excelVos.get(i).getAmounts()) * 100));
Double avgPrice = (materialByCode.getAmounts()+Double.parseDouble(excelVos.get(i).getAmounts()) * 100) / ((Double.parseDouble(excelVos.get(i).getQuantity()) + materialByCode.getQuantity() ));
// 保留两位
BigDecimal bg = new BigDecimal(avgPrice);
avgPrice = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
update.put("price",String.valueOf(avgPrice));
}
update.put("depositoryId",excelVos.get(i).getDepositoryId());
update.put("depositoryId", depositoryId);
update.put("depositoryCode",excelVos.get(i).getDepositoryCode());
Material materialByCode = materialService.findMaterialByCode(excelVos.get(i).getCode());
update.put("id",materialByCode.getId());
materialService.updateMaterial(update);
success.add(excelVos.get(i));
}
log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVos));
returnResult.put("success",success);
returnResult.put("errMsg",errMsg);

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

@ -8,7 +8,9 @@ import com.dreamchaser.depository_manage.mapper.MaterialMapper;
import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper;
import com.dreamchaser.depository_manage.pojo.DepositoryRecordP;
import com.dreamchaser.depository_manage.pojo.MaterialP;
import com.dreamchaser.depository_manage.pojo.PlaceP;
import com.dreamchaser.depository_manage.service.MaterialService;
import com.dreamchaser.depository_manage.service.PlaceService;
import com.dreamchaser.depository_manage.service.RoleService;
import com.dreamchaser.depository_manage.utils.HttpUtils;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
@ -37,6 +39,9 @@ public class MaterialServiceImpl implements MaterialService {
@Autowired
RoleService roleService;
@Autowired
PlaceService placeService;
/**
* 增加一条库存记录
*
@ -121,11 +126,58 @@ public class MaterialServiceImpl implements MaterialService {
list.get(i).setAmounts(list.get(i).getAmounts() / 100);
// 获取当前物料所处仓库
Integer depositoryId = list.get(i).getDepositoryId();
// 获取当前物料所处库位
Integer mid = list.get(i).getId();
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(mid, depositoryId);
StringBuilder placeCode = new StringBuilder();
for (int j = 0; j < placeByMidAndDid.size(); j++) {
placeCode.append(placeByMidAndDid.get(j).getCode()).append(" ");
}
if(depositoryId != null){
Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(depositoryId);
String code = depositoryRecordById.getCode();
list.get(i).setDepositoryCode(code);
}
list.get(i).setPlaceCode(placeCode.toString());
}
return pack(list);
}
/**
* 根据条件查询符合条件的库存信息
* @param map 条件map
* @return 符合条件的库存信息
*/
@Override
public List<MaterialP> findInventory(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);
}
List<Material> list=materialMapper.findInventory(map);
for (int i = 0; i < list.size(); i++) {
list.get(i).setPrice(list.get(i).getPrice() / 100);
list.get(i).setAmounts(list.get(i).getAmounts() / 100);
// 获取当前物料所处仓库
Integer depositoryId = list.get(i).getDepositoryId();
// 获取当前物料所处库位
Integer mid = list.get(i).getId();
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(mid, depositoryId);
StringBuilder placeCode = new StringBuilder();
for (int j = 0; j < placeByMidAndDid.size(); j++) {
placeCode.append(placeByMidAndDid.get(j).getCode()).append(" ");
}
if(depositoryId != null){
Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(depositoryId);
String code = depositoryRecordById.getCode() + "-" +list.get(i).getDepositoryCode();
String code = depositoryRecordById.getCode();
list.get(i).setDepositoryCode(code);
}
list.get(i).setPlaceCode(placeCode.toString());
}
return pack(list);
}
@ -324,7 +376,7 @@ public class MaterialServiceImpl implements MaterialService {
if(childForMaterialTypeByParent != null) {
stringObjectMap = InitTreeMenus(mt, childForMaterialTypeByParent);
}else{
List<Object> materialByType = AddMaterialByType(mt,mname,"");
List<Object> materialByType = AddMaterialByType(mt,mname,adminorg);
stringObjectMap = InitTreeMenus(mt, materialByType);
}
list.add(stringObjectMap);
@ -387,6 +439,16 @@ public class MaterialServiceImpl implements MaterialService {
}
for (int i = 0; i < materialByDepositorys.size(); i++) {
if (Integer.compare(materialByDepositorys.get(i).getTypeId(), mt.getId()) == 0){
boolean flag = false;
for (int j = 0; j < materialPByCondition.size(); j++) {
if(materialByDepositorys.get(i).getCode().equals(materialPByCondition.get(j).getCode())){
flag = true;
continue;
}
}
if(flag){
continue;
}
materialPByCondition.add(materialByDepositorys.get(i));
}
}

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

@ -1,11 +1,17 @@
package com.dreamchaser.depository_manage.service.impl;
import com.dreamchaser.depository_manage.entity.Depository;
import com.dreamchaser.depository_manage.entity.MaterialAndPlace;
import com.dreamchaser.depository_manage.entity.Place;
import com.dreamchaser.depository_manage.mapper.PlaceMapper;
import com.dreamchaser.depository_manage.pojo.PlaceP;
import com.dreamchaser.depository_manage.service.DepositoryService;
import com.dreamchaser.depository_manage.service.PlaceService;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -16,6 +22,9 @@ public class PlaceServiceImpl implements PlaceService {
@Autowired
PlaceMapper placeMapper;
@Autowired
DepositoryService depositoryService;
/**
* 查找所有库位
* @return
@ -31,23 +40,28 @@ public class PlaceServiceImpl implements PlaceService {
*/
@Override
public List<Place> findPlaceByCondition(Map<String, Object> map) {
Map<String,Object> condition = new HashMap<>();
if(map.containsKey("place_x")){
condition.put("x",map.get("place_x"));
map.put("x",map.get("place_x"));
map.remove("place_x");
}
if(map.containsKey("place_y")){
condition.put("y",map.get("place_y"));
map.put("y",map.get("place_y"));
map.remove("place_y");
}
if(map.containsKey("place_z")){
condition.put("z",map.get("place_z"));
map.put("z",map.get("place_z"));
map.remove("place_z");
}
if(map.containsKey("code")){
condition.put("code",map.get("code"));
Integer size = 10, page = 1;
if (map.containsKey("size")) {
size = ObjectFormatUtil.toInteger(map.get("size"));
map.put("size", size);
}
if(map.containsKey("state")){
condition.put("state",map.get("state"));
if (map.containsKey("page")) {
page = ObjectFormatUtil.toInteger(map.get("page"));
map.put("begin", (page - 1) * size);
}
return placeMapper.findPlaceByCondition(condition);
return placeMapper.findPlaceByCondition(map);
}
/**
* 查找符合条件的库位数
@ -56,6 +70,15 @@ public class PlaceServiceImpl implements PlaceService {
*/
@Override
public Integer findPlaceCountByCondition(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 placeMapper.findPlaceCountByCondition(map);
}
@ -93,6 +116,13 @@ public class PlaceServiceImpl implements PlaceService {
*/
@Override
public Integer InsertPlace(Map<String, Object> map) {
Map<String,Object> param = new HashMap<>();
param.put("did",map.get("did"));
param.put("code",map.get("code"));
List<Place> placeByCondition = placeMapper.findPlaceByCondition(param);
if(placeByCondition.size() > 0){
return 1;
}
return placeMapper.InsertPlace(map);
}
/**
@ -133,4 +163,46 @@ public class PlaceServiceImpl implements PlaceService {
public Integer changeStateToDeletedByIds(List<Integer> ids) {
return placeMapper.changeStateToDeletedByIds(ids);
}
/**
* 根据物料与所处仓库获取库位
* @param mid
* @return
*/
@Override
public List<PlaceP> findPlaceByMidAndDid(Integer mid,Integer depositoryId) {
Map<String,Object> map = new HashMap<>();
map.put("mid",mid);
map.put("did",depositoryId);
List<Place> placeByCondition = placeMapper.findPlaceByMidAndDid(map);
List<PlaceP> placePList = new ArrayList<>();
for (int i = 0; i < placeByCondition.size(); i++) {
Place place = placeByCondition.get(i);
PlaceP pp = new PlaceP(place);
Depository depositoryRecordById = depositoryService.findDepositoryRecordById(place.getDid());
pp.setDepositoryName(depositoryRecordById.getDname());
placePList.add(pp);
}
return placePList;
}
/**
* 根据库位获取当前库位所存储的物料
*/
@Override
public List<MaterialAndPlace> findPlaceAndMaterialByPid(Integer id) {
return placeMapper.findPlaceAndMaterialByPid(id);
}
/**
* 根据当前库位编号及物料编号获取具体库位
*/
@Override
public MaterialAndPlace findPlaceAndMaterialByMidAndPid(Integer pid, Integer mid) {
Map<String,Object> map = new HashMap<>();
map.put("mid",mid);
map.put("pid",pid);
return placeMapper.findPlaceAndMaterialByMidAndPid(map);
}
}

2
src/main/java/com/dreamchaser/depository_manage/utils/excelUtil.java

@ -52,10 +52,12 @@ public class excelUtil<T> {
log.error("有"+errNum +"行出错");
}
List<T> dataList = excelListener.getDataList();
List<String> dataIndex = excelListener.getDataIndex();
List<String> errMsg = excelListener.retrunErrMsg();
Map<String,Object> result = new HashMap<>();
result.put("dataList",dataList);
result.put("errMsg",errMsg);
result.put("dataIndex",dataIndex);
return result;
}

36
src/main/resources/templates/pages/application/application-in.html

@ -83,6 +83,8 @@
lay-verify="required"/>
<input type="text" name="depositoryId" class="layui-input" id="depositoryId"
style="display: none" lay-verify="required"/>
<input type="text" name="placeId" class="layui-input" id="placeId"
style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
@ -184,8 +186,22 @@
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.detail);//失败的表情
return;
// layer.msg(data.statusInfo.detail);//失败的表情
var d = data.data;
var err = d["err"];
var success = d["success"];
var errMsg = "";
for (let i = 0; i < err.length; i++) {
errMsg += "物料编码: "
errMsg += err[i]["code"];
}
errMsg += "添加失败,请选择新仓库或库位";
layer.msg(errMsg,{
icon:1,
time:500
},function () {
step.next('#stepForm');
});
} else {
layer.msg("申请提交成功", {
icon: 6,//成功的表情
@ -267,6 +283,9 @@
lay-verify="required"/>
<input type="text" name=`+"depositoryId"+NewIdNumber+` class="layui-input" id="depositoryId"
style="display: none" lay-verify="required"/>
<input type="text" name=`+"placeId"+NewIdNumber+` class="layui-input" id="placeId"
style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
@ -281,7 +300,7 @@
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber)
$("#stepForm").css("height",height+430 +'px');
$("#stepForm").css("height",height+475 +'px');
$("#"+parentId).after(materialItem);
};
@ -294,7 +313,7 @@
// 获取祖父节点
var reparent = parent.parentNode;
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
$("#stepForm").css("height",height-430 +'px');
$("#stepForm").css("height",height-475 +'px');
params = remove(params,parentId);
reparent.removeChild(parent);
};
@ -323,10 +342,14 @@
var materialItem = children.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
var req = {};
req.code = code;
req.type = "in";
$.ajax({
url: "/material/findMatrialByCode?code=" + code,
url: "/material/findMatrialByCode",
type: "get",
dataType: 'json',
data:req,
contentType: "application/json;charset=utf-8",
success: function (d) {
var d = d.data;
@ -373,7 +396,8 @@
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var code = d.data.code;
var material = d.data.materialById;
var code = material.code;
if(code === undefined){
code = "";
}

6
src/main/resources/templates/pages/application/application-in_back.html

@ -117,10 +117,14 @@
$("#code").blur(function () {
var code = $(this).val();
var req = {};
req.code = code;
req.type = "in";
$.ajax({
url: "/material/findMatrialByCode?code=" + code,
url: "/material/findMatrialByCode",
type: "get",
dataType: 'json',
data:(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
var d = d.data;

51
src/main/resources/templates/pages/application/application-out.html

@ -56,6 +56,12 @@
class="layui-input" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">所处库位:</label>
<div class="layui-input-block">
<select name="placeId" id="place"></select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
@ -131,8 +137,6 @@
var $ = layui.$,
form = layui.form,
step = layui.step;
// 用于分步表单加载
step.render({
elem: '#stepForm',
@ -222,6 +226,12 @@
class="layui-input" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">所处库位:</label>
<div class="layui-input-block">
<select name=`+"placeId"+NewIdNumber +` id="place"></select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
@ -281,10 +291,14 @@
var materialItem = children.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
var req = {};
req.code = code;
req.type = "out";
$.ajax({
url: "/material/findMatrialByCode?code=" + code,
url: "/material/findMatrialByCode",
type: "get",
dataType: 'json',
data:(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
var d = d.data;
@ -293,9 +307,26 @@
materialName.value = "";
materialId.value = "";
obj.value = "";
$('#place').empty();
}else{
materialName.value = d.mname;
materialId.value = d.id;
req.mid = d.id;
$.ajax({
url: "/place/findPlaceByMid",
type: "post",
dataType: 'json',
data:JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success:function (res) {
$('#place').empty();
$.each(res.data, function (index, item) {
$('#place').append(new Option(item.depositoryName+"-"+item.code, item.id));//往下拉菜单里添加元素
});
form.render();
materialName.value = d.mname;
materialId.value = d.id;
}
});
}
}
});
@ -331,11 +362,18 @@
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var code = d.data.code;
var material = d.data.materialById;
var placeList = d.data.placeList;
var code = material.code;
if(code === undefined){
code = "";
}
codeValue.value = code;
$('#place').empty();
$.each(placeList, function (index, item) {
$('#place').append(new Option(item.depositoryName+"-"+item.code, item.id));//往下拉菜单里添加元素
});
form.render();
}
});
@ -382,6 +420,7 @@
materialName.value = material.mname;
materialId.value = material.id;
codeValue.value = material.code;
}
}
});

6
src/main/resources/templates/pages/application/application-out_back.html

@ -96,10 +96,14 @@
step = layui.step;
$("#code").blur(function () {
var code = $(this).val();
var req = {};
req.code = code;
req.type = "out";
$.ajax({
url: "/material/findMatrialByCode?code=" + code,
url: "/material/findMatrialByCode",
type: "get",
dataType: 'json',
data:(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
var d = d.data;

4
src/main/resources/templates/pages/application/application-review.html

@ -39,6 +39,10 @@
<td>仓库名称</td>
<td id="depositoryName" th:text="${record.getDepositoryName()}">外芯仓库</td>
</tr>
<tr>
<td>所处库位</td>
<td id="placeId" th:text="${record.getPCode()}"></td>
</tr>
<tr>
<td>数量</td>
<td id="quantity" th:text="${record.getQuantity()}">数量</td>

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

@ -38,6 +38,10 @@
<td>仓库名称</td>
<td id="depositoryName" th:text="${record.getDepositoryName()}">外芯仓库</td>
</tr>
<tr>
<td>所处库位</td>
<td id="placeCode" th:text="${record.getPCode()}">0000</td>
</tr>
<tr>
<td>数量</td>
<td id="quantity" th:text="${record.getQuantity()}">409</td>

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

@ -121,7 +121,8 @@
{field: 'code',width: 200,title: '存货编码',sort: true},
{field: 'typeName', width: '10%', title: '物料类型'},
{field: 'depositoryName', width: '12%', title: '仓库名称'},
{field: 'depositoryCode', width: '12%', title: '仓库编号'},
{field: 'depositoryCode', width: '12%', title: '仓库编码'},
{field: 'placeCode', width: '12%', title: '库位编码'},
{field: 'quantity', width: '10%', title: '数量', sort: true},
{field: 'price', title: '单价', width: '8%', sort: true},
{field: 'amounts', title: '总金额', minWidth: 150, sort: true},
@ -293,6 +294,7 @@
//如果上传成功
if(res.code == 200){
var re = "";
console.log(res)
for (let i = 0; i < res.data.errMsg.length; i++) {
var show = "<p style='color: #ff211e'>"+res.data.errMsg[i] + ":错误"+"</p>"
re += show

31
src/main/resources/templates/pages/material/selectDepositoryByCard.html

@ -28,6 +28,16 @@
, data: []
, onlyIconControl: true //是否仅允许节点左侧图标控制展开收缩
, click: function (obj) {
var data = obj.data;
if(data.id === -1 ){
return false;
}
// 用于判断是库位还是仓库
var flag = false;
var dataId = data.id;
if(typeof dataId === "string"){
flag = true;
}
var windowParent = $("#" + clickObj, window.parent.document)[0];
var depositoryChildren = null;
if (windowParent.childNodes.length === 17) {
@ -38,8 +48,25 @@
var depositoryItem = depositoryChildren.childNodes[3].childNodes;
var depositoryName = depositoryItem[1];
var depositoryId = depositoryItem[3];
depositoryName.value = obj.data.title;
depositoryId.value = obj.data.id;
var placeId = depositoryItem[5];
if(!flag) {
depositoryName.value = obj.data.title;
depositoryId.value = obj.data.id;
placeId.value = -1;
}else{
var did = dataId.split("-");
$.ajax({
url: "/repository/findDepositoryByDid?depositoryId=0" + did[0],
type: 'get',
dataType: 'json',
contentType: "application/json;charset=utf-8",
success:function (d) {
depositoryName.value = d.data.dname +"-"+ obj.data.title;
}
});
depositoryId.value = did[0];
placeId.value = did[1];
}
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}

6
src/main/resources/templates/pages/place/place_add.html

@ -28,13 +28,13 @@
name="place_x" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<!-- <div class="layui-form-item">
<label class="layui-form-label">库位列:</label>
<div class="layui-input-block">
<input type="text" placeholder="请填写列数" class="layui-input"
name="place_y" lay-verify="required"/>
</div>
</div>
</div>-->
<div class="layui-form-item">
<label class="layui-form-label">库位层:</label>
<div class="layui-input-block">
@ -84,7 +84,7 @@
form = layui.form,
layer = layui.layer;
var depositoryId = $("#depositoryId").val();
var depositoryId = $("#depositoryID").val();
form.on('submit(formStep)', function (data) {
var req = data.field;
req.type = "one";

1
src/main/resources/templates/pages/place/place_edit.html

@ -86,6 +86,7 @@
layer = layui.layer;
var depositoryId = $("#depositoryId").val();
console.log(depositoryId);
form.on('submit(formStep)', function (data) {
var req = data.field;
req.type = "one";

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

@ -170,7 +170,7 @@
table.on('toolbar(currentTableFilter)', function (obj) {
if (obj.event === 'add') { // 监听添加操作
var index = layer.open({
title: '申请提交',
title: '库位增加',
type: 2,
shade: 0.2,
maxmin: true,
@ -185,44 +185,60 @@
else if (obj.event === 'delete') { // 监听删除操作
var checkStatus = table.checkStatus('currentTableId')
, data = checkStatus.data;
var req={};
req.ids=[];
for (i=0,len=data.length;i<len;i++){
req.ids[i]=data[i].id;
var req = {};
req.ids = [];
for (i = 0, len = data.length; i < len; i++) {
req.ids[i] = data[i].id;
}
$.ajax({
url: '/place/deletePlace',
dataType:'json',
type:'POST',
contentType: "application/json;charset=utf-8",
data:JSON.stringify(req),
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秒)
});
//执行搜索重载
table.reload('currentTableId', {
url: '/place/findPlace',
page: {
curr: 1
}
}, 'data');
return false;
if (req.ids.length > 0) {
$.ajax({
url: '/place/deletePlace',
dataType: 'json',
type: 'POST',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(req),
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秒)
});
//执行搜索重载
table.reload('currentTableId', {
url: '/place/findPlace',
page: {
curr: 1
}
}, 'data');
return false;
}
}
}
})
})
}else{
layer.msg("未选中记录,请确认!");
return false;
}
}
else if(obj.event === 'addList'){
var index = layer.open({
title: '批量增加',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/insertListPlace?depositoryId='+parentId,
});
$(window).on("resize", function () {
layer.full(index);
});
}
});
@ -245,7 +261,7 @@
content: '/placeView?id='+data.id,
end:function () {
req = {};
req.parentId = parentId;
req.did = parentId;
//执行搜索重载
table.reload('currentTableId', {
url: '/place/findPlace',

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

@ -57,11 +57,11 @@
<select id="findDepositoryByAdminorg" resultMap="depositoryMap" parameterType="string">
SELECT
<include refid="allColumns" />
FROM depository d WHERE 1 = 1
FROM depository d WHERE 1 = 1 and d.state != 3
<if test="adminorg != null and adminorg != ''">
and d.adminorg = #{adminorg}
</if>
or d.adminorg = '' and d.state != 3
or d.adminorg = ''
</select>
<select id="findDepositoryByAdminorgAndParent" resultMap="depositoryMap" parameterType="map">

33
target/classes/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml

@ -89,6 +89,7 @@
<result column="istransfer" property="istransfer" jdbcType="INTEGER" />
<result column="transferId" property="transferId" jdbcType="INTEGER" />
<result column="mcode" property="mcode" jdbcType="VARCHAR" />
<result column="placeId" property="placeId" jdbcType="INTEGER" />
</resultMap>
@ -123,7 +124,7 @@
<sql id="ApplicationOutRecordInfo">
aorid,mid,mname,depositoryId,dname,applicantId,applicantTime,applyRemark,aorcode,aorpirce,aorquantity,departmenthead,departmentheadPass,departmentHeadTime,departmentheadMessage,
depositoryManager,depositoryManagerPass,depositoryManagerTime,depositoryManagerMessage,aorstate,istransfer,transferId,mcode
depositoryManager,depositoryManagerPass,depositoryManagerTime,depositoryManagerMessage,aorstate,istransfer,transferId,mcode,placeId
</sql>
<!-- 查询所有数据行数 -->
<select id="findCount" resultType="integer">
@ -353,6 +354,9 @@
<if test="istransfer != null and istransfer != ''">
and istransfer = #{istransfer}
</if>
<if test="placeId != null">
and placeId = #{placeId}
</if>
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
@ -377,6 +381,13 @@
where aorid = #{id}
</select>
<select id="findApplicationOutByCode" parameterType="string" resultMap="applicationOutRecord">
select
<include refid="ApplicationOutRecordInfo"/>
from applicationOutRecordInfo
where aorcode = #{code}
</select>
<!--根据主键查询入库记录-->
<select id="findApplicationInRecordPById" parameterType="int" resultMap="applicationInRecord">
select
@ -385,6 +396,13 @@
where airid = #{id}
</select>
<select id="findApplicationInByCode" parameterType="string" resultMap="applicationInRecord">
select
<include refid="ApplicationInRecordInfo"/>
from applicationInRecordInfo
where aircode = #{code}
</select>
<!-- 根据条件查询入库记录数-->
<select id="findApplicationInRecordPCountByCondition" parameterType="map" resultType="int">
select
@ -565,7 +583,7 @@
<insert id="insertApplicationOutRecord" parameterType="map" useGeneratedKeys="true" keyProperty="id">
insert into application_out_record
(id,mid,depository_id,applicant_id,applicant_time,code,price,quantity,departmenthead,departmenthead_pass,departmenthead_time,
departmenthead_messgae,depository_manager,depository_manager_pass,depository_manager_time,depository_manager_message,apply_remark,state,istransfer,transferId)
departmenthead_messgae,depository_manager,depository_manager_pass,depository_manager_time,depository_manager_message,apply_remark,state,istransfer,transferId,placeId)
values(
#{id},
#{mid},
@ -607,7 +625,8 @@
#{applyRemark},
#{state},
#{istransfer},
#{transferId}
#{transferId},
#{placeId}
)
</insert>
@ -804,7 +823,10 @@
depository_manager_message = #{depositoryManagerMessage},
</if>
<if test="state != null and state != ''">
state = #{state}
state = #{state},
</if>
<if test="placeId != null">
placeId = #{placeId}
</if>
</set>
WHERE id = #{id}
@ -1023,4 +1045,7 @@
</mapper>

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

@ -129,6 +129,42 @@
</if>
</select>
<!--根据条件查询库存-->
<select id="findInventory" resultMap="materialMap" parameterType="map">
SELECT
<include refid="allColumnsAndTypeNameOnView" />
from findMaterial
where 1 = 1
<if test="mid != null">
and id = #{mid}
</if>
<if test="depositoryId != null">
AND depository_id = #{depositoryId}
</if>
<if test="mname != null and mname != ''">
AND mname LIKE CONCAT('%', #{mname}, '%')
</if>
<if test="quantity != null">
AND quantity = #{quantity}
</if>
<if test="price != null">
AND price = #{price}
</if>
<if test="materialTypeId != null">
AND type_id = #{materialTypeId}
</if>
<if test="state != null and state != ''">
And state = #{state}
</if>
<if test="code != null and code != '' ">
and code = #{code}
</if>
and depository_id is not null
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select>
<!-- 根据仓库查询物料-->
<select id="findMaterialByDepositorys" resultMap="materialMap" parameterType="list">
SELECT
@ -156,6 +192,7 @@
where id = #{id}
</select>
<!-- 根据主键查询数据 -->
<select id="findMaterialByIds" resultMap="materialMap" parameterType="list">
SELECT
@ -165,6 +202,7 @@
#{id}
</foreach>
</select>
<!-- 插入数据 -->
<insert id="insertMaterial" parameterType="map">

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

@ -16,13 +16,30 @@
<result column="min" property="min" jdbcType="INTEGER" />
<result column="max" property="max" jdbcType="INTEGER" />
<result column="state" property="state" jdbcType="INTEGER" />
<result column="quantity" property="quantity" jdbcType="INTEGER" />
</resultMap>
<resultMap id="materialAndPlaceMap" type="com.dreamchaser.depository_manage.entity.MaterialAndPlace">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="mid" property="mid" jdbcType="INTEGER" />
<result column="pid" property="pid" jdbcType="INTEGER" />
<result column="did" property="did" jdbcType="INTEGER" />
<result column="quantity" property="quantity" jdbcType="INTEGER" />
<result column="max" property="max" jdbcType="INTEGER" />
<result column="min" property="min" jdbcType="INTEGER" />
<result column="code" property="code" jdbcType="VARCHAR" />
</resultMap>
<!-- 表查询字段 -->
<sql id="allColumns">
p.id,p.x,p.y,p.z,p.code,p.mid,p.did,p.min,p.max,p.state
p.id,p.x,p.y,p.z,p.code,p.mid,p.did,p.min,p.max,p.state,p.quantity
</sql>
<sql id="allColumnsByMaterialAndPlace">
mp.id,mp.mid,mp.pid,mp.quantity,p.code,p.max,p.min,p.did
</sql>
<!-- 查询所有 -->
<select id="findPlaceAll" resultMap="placeMap">
SELECT
@ -31,6 +48,19 @@
where p.state != 3
</select>
<select id="findPlaceByMidAndDid" resultMap="placeMap" parameterType="map">
SELECT
<include refid="allColumns" />
from materialandplace mp left join place p on p.id = mp.pid
where 1 = 1
<if test="did != null and did != ''">
and p.did = #{did}
</if>
<if test="mid != null and mid != ''">
and mp.mid = #{mid}
</if>
</select>
<!-- 根据条件参数查询列表 -->
<select id="findPlaceByCondition" resultMap="placeMap" parameterType="map">
SELECT
@ -49,10 +79,10 @@
AND p.z = #{z}
</if>
<if test="code != null and code != ''">
AND p.code = #{code}
AND p.code LIKE CONCAT('%', #{code}, '%')
</if>
<if test="mid != null and mid != ''">
AND p.mid = #{mid}
AND find_in_set(#{mid},p.mid)
</if>
<if test="did != null and did != ''">
AND p.did = #{did}
@ -85,6 +115,9 @@
<if test="y != null and y != ''">
AND p.y = #{y}
</if>
<if test="code != null and code != ''">
AND p.code LIKE CONCAT('%', #{code}, '%')
</if>
<if test="z != null and z != ''">
AND p.z = #{z}
</if>
@ -112,6 +145,12 @@
FROM place p WHERE 1 = 1 and p.did = #{did}
</select>
<select id="findPlaceByMid" parameterType="int" resultMap="placeMap">
SELECT
<include refid="allColumns" />
FROM materialandplace mp left join place p on p.id = mp.pid WHERE 1 = 1 and mp.mid = #{mid}
</select>
<!-- 根据主键查询信息 -->
<select id="findPlaceById" resultMap="placeMap" parameterType="int">
SELECT
@ -119,10 +158,29 @@
FROM place p WHERE p.id = #{id}
</select>
<select id="findPlaceAndMaterialByPid" resultMap="materialAndPlaceMap" parameterType="int">
SELECT
<include refid="allColumnsByMaterialAndPlace" />
FROM materialandplace mp left join place p on p.id = mp.pid WHERE 1 = 1 and p.id = #{id}
</select>
<select id="findPlaceAndMaterialByMidAndPid" resultMap="materialAndPlaceMap" parameterType="map">
SELECT
<include refid="allColumnsByMaterialAndPlace" />
FROM materialandplace mp left join place p on p.id = mp.pid
where 1 = 1
<if test="mid != null">
and mp.mid = #{mid}
</if>
<if test="pid != null">
and mp.pid = #{pid}
</if>
</select>
<!-- 新增信息 -->
<insert id="InsertPlace">
INSERT INTO place (
id,x,y,z,code, mid,did,min,max,state
id,x,y,z,code, mid,did,min,max,state,quantity
) VALUES (
#{id},
#{x},
@ -133,10 +191,25 @@
#{did},
#{min},
#{max},
#{state}
#{state},
#{quantity}
)
</insert>
<insert id="addMaterialOnPlace">
insert into materialandplace(id,mid,pid,quantity)
values (
#{id},
#{mid},
#{pid},
#{quantity}
)
</insert>
<delete id="delMaterialOnPlace" parameterType="int">
DELETE FROM materialandplace WHERE id = #{id}
</delete>
<!-- 修改信息 -->
<update id="UpdatePlace">
UPDATE place
@ -166,12 +239,30 @@
max = #{max},
</if>
<if test="state != null and state !=''">
state = #{state}
state = #{state},
</if>
<if test="quantity != null">
quantity = #{quantity}
</if>
</set>
WHERE id = #{id}
</update>
<update id="updateMaterialAndPlace">
update materialandplace
<set>
<if test="mid != null">
mid = #{mid},
</if>
<if test="quantity != null">
quantity = #{quantity},
</if>
<if test="pid != null">
pid = #{pid}
</if>
</set>
where id = #{id}
</update>
<!-- 根据主键删除 -->
@ -201,4 +292,17 @@
WHERE id = #{id}
</update>
<!--获取当前仓库下的行-->
<select id="findPlaceXByDid" parameterType="int" resultType="int">
select DISTINCT x from place where did = #{did} and state != 3 ORDER BY x desc
</select>
<!--获取当前仓库下的列-->
<select id="findPlaceYByDid" parameterType="map" resultType="int">
select DISTINCT y from place where did = #{did} and x = #{x} and state != 3 ORDER BY y desc
</select>
<!--获取当前仓库下的ceng-->
<select id="findPlaceZByDid" parameterType="map" resultType="int">
select DISTINCT z from place where did = #{did} and x = #{x} and state != 3 ORDER BY z desc
</select>
</mapper>

36
target/classes/templates/pages/application/application-in.html

@ -83,6 +83,8 @@
lay-verify="required"/>
<input type="text" name="depositoryId" class="layui-input" id="depositoryId"
style="display: none" lay-verify="required"/>
<input type="text" name="placeId" class="layui-input" id="placeId"
style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
@ -184,8 +186,22 @@
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.detail);//失败的表情
return;
// layer.msg(data.statusInfo.detail);//失败的表情
var d = data.data;
var err = d["err"];
var success = d["success"];
var errMsg = "";
for (let i = 0; i < err.length; i++) {
errMsg += "物料编码: "
errMsg += err[i]["code"];
}
errMsg += "添加失败,请选择新仓库或库位";
layer.msg(errMsg,{
icon:1,
time:500
},function () {
step.next('#stepForm');
});
} else {
layer.msg("申请提交成功", {
icon: 6,//成功的表情
@ -267,6 +283,9 @@
lay-verify="required"/>
<input type="text" name=`+"depositoryId"+NewIdNumber+` class="layui-input" id="depositoryId"
style="display: none" lay-verify="required"/>
<input type="text" name=`+"placeId"+NewIdNumber+` class="layui-input" id="placeId"
style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
@ -281,7 +300,7 @@
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber)
$("#stepForm").css("height",height+430 +'px');
$("#stepForm").css("height",height+475 +'px');
$("#"+parentId).after(materialItem);
};
@ -294,7 +313,7 @@
// 获取祖父节点
var reparent = parent.parentNode;
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
$("#stepForm").css("height",height-430 +'px');
$("#stepForm").css("height",height-475 +'px');
params = remove(params,parentId);
reparent.removeChild(parent);
};
@ -323,10 +342,14 @@
var materialItem = children.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
var req = {};
req.code = code;
req.type = "in";
$.ajax({
url: "/material/findMatrialByCode?code=" + code,
url: "/material/findMatrialByCode",
type: "get",
dataType: 'json',
data:req,
contentType: "application/json;charset=utf-8",
success: function (d) {
var d = d.data;
@ -373,7 +396,8 @@
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var code = d.data.code;
var material = d.data.materialById;
var code = material.code;
if(code === undefined){
code = "";
}

6
target/classes/templates/pages/application/application-in_back.html

@ -117,10 +117,14 @@
$("#code").blur(function () {
var code = $(this).val();
var req = {};
req.code = code;
req.type = "in";
$.ajax({
url: "/material/findMatrialByCode?code=" + code,
url: "/material/findMatrialByCode",
type: "get",
dataType: 'json',
data:(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
var d = d.data;

51
target/classes/templates/pages/application/application-out.html

@ -56,6 +56,12 @@
class="layui-input" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">所处库位:</label>
<div class="layui-input-block">
<select name="placeId" id="place"></select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
@ -131,8 +137,6 @@
var $ = layui.$,
form = layui.form,
step = layui.step;
// 用于分步表单加载
step.render({
elem: '#stepForm',
@ -222,6 +226,12 @@
class="layui-input" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">所处库位:</label>
<div class="layui-input-block">
<select name=`+"placeId"+NewIdNumber +` id="place"></select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
@ -281,10 +291,14 @@
var materialItem = children.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
var req = {};
req.code = code;
req.type = "out";
$.ajax({
url: "/material/findMatrialByCode?code=" + code,
url: "/material/findMatrialByCode",
type: "get",
dataType: 'json',
data:(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
var d = d.data;
@ -293,9 +307,26 @@
materialName.value = "";
materialId.value = "";
obj.value = "";
$('#place').empty();
}else{
materialName.value = d.mname;
materialId.value = d.id;
req.mid = d.id;
$.ajax({
url: "/place/findPlaceByMid",
type: "post",
dataType: 'json',
data:JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success:function (res) {
$('#place').empty();
$.each(res.data, function (index, item) {
$('#place').append(new Option(item.depositoryName+"-"+item.code, item.id));//往下拉菜单里添加元素
});
form.render();
materialName.value = d.mname;
materialId.value = d.id;
}
});
}
}
});
@ -331,11 +362,18 @@
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var code = d.data.code;
var material = d.data.materialById;
var placeList = d.data.placeList;
var code = material.code;
if(code === undefined){
code = "";
}
codeValue.value = code;
$('#place').empty();
$.each(placeList, function (index, item) {
$('#place').append(new Option(item.depositoryName+"-"+item.code, item.id));//往下拉菜单里添加元素
});
form.render();
}
});
@ -382,6 +420,7 @@
materialName.value = material.mname;
materialId.value = material.id;
codeValue.value = material.code;
}
}
});

6
target/classes/templates/pages/application/application-out_back.html

@ -96,10 +96,14 @@
step = layui.step;
$("#code").blur(function () {
var code = $(this).val();
var req = {};
req.code = code;
req.type = "out";
$.ajax({
url: "/material/findMatrialByCode?code=" + code,
url: "/material/findMatrialByCode",
type: "get",
dataType: 'json',
data:(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
var d = d.data;

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

@ -121,7 +121,8 @@
{field: 'code',width: 200,title: '存货编码',sort: true},
{field: 'typeName', width: '10%', title: '物料类型'},
{field: 'depositoryName', width: '12%', title: '仓库名称'},
{field: 'depositoryCode', width: '12%', title: '仓库编号'},
{field: 'depositoryCode', width: '12%', title: '仓库编码'},
{field: 'placeCode', width: '12%', title: '库位编码'},
{field: 'quantity', width: '10%', title: '数量', sort: true},
{field: 'price', title: '单价', width: '8%', sort: true},
{field: 'amounts', title: '总金额', minWidth: 150, sort: true},
@ -293,6 +294,7 @@
//如果上传成功
if(res.code == 200){
var re = "";
console.log(res)
for (let i = 0; i < res.data.errMsg.length; i++) {
var show = "<p style='color: #ff211e'>"+res.data.errMsg[i] + ":错误"+"</p>"
re += show

31
target/classes/templates/pages/material/selectDepositoryByCard.html

@ -28,6 +28,16 @@
, data: []
, onlyIconControl: true //是否仅允许节点左侧图标控制展开收缩
, click: function (obj) {
var data = obj.data;
if(data.id === -1 ){
return false;
}
// 用于判断是库位还是仓库
var flag = false;
var dataId = data.id;
if(typeof dataId === "string"){
flag = true;
}
var windowParent = $("#" + clickObj, window.parent.document)[0];
var depositoryChildren = null;
if (windowParent.childNodes.length === 17) {
@ -38,8 +48,25 @@
var depositoryItem = depositoryChildren.childNodes[3].childNodes;
var depositoryName = depositoryItem[1];
var depositoryId = depositoryItem[3];
depositoryName.value = obj.data.title;
depositoryId.value = obj.data.id;
var placeId = depositoryItem[5];
if(!flag) {
depositoryName.value = obj.data.title;
depositoryId.value = obj.data.id;
placeId.value = -1;
}else{
var did = dataId.split("-");
$.ajax({
url: "/repository/findDepositoryByDid?depositoryId=0" + did[0],
type: 'get',
dataType: 'json',
contentType: "application/json;charset=utf-8",
success:function (d) {
depositoryName.value = d.data.dname +"-"+ obj.data.title;
}
});
depositoryId.value = did[0];
placeId.value = did[1];
}
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}

6
target/classes/templates/pages/place/place_add.html

@ -28,13 +28,13 @@
name="place_x" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<!-- <div class="layui-form-item">
<label class="layui-form-label">库位列:</label>
<div class="layui-input-block">
<input type="text" placeholder="请填写列数" class="layui-input"
name="place_y" lay-verify="required"/>
</div>
</div>
</div>-->
<div class="layui-form-item">
<label class="layui-form-label">库位层:</label>
<div class="layui-input-block">
@ -84,7 +84,7 @@
form = layui.form,
layer = layui.layer;
var depositoryId = $("#depositoryId").val();
var depositoryId = $("#depositoryID").val();
form.on('submit(formStep)', function (data) {
var req = data.field;
req.type = "one";

1
target/classes/templates/pages/place/place_edit.html

@ -86,6 +86,7 @@
layer = layui.layer;
var depositoryId = $("#depositoryId").val();
console.log(depositoryId);
form.on('submit(formStep)', function (data) {
var req = data.field;
req.type = "one";

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

@ -170,7 +170,7 @@
table.on('toolbar(currentTableFilter)', function (obj) {
if (obj.event === 'add') { // 监听添加操作
var index = layer.open({
title: '申请提交',
title: '库位增加',
type: 2,
shade: 0.2,
maxmin: true,
@ -185,44 +185,60 @@
else if (obj.event === 'delete') { // 监听删除操作
var checkStatus = table.checkStatus('currentTableId')
, data = checkStatus.data;
var req={};
req.ids=[];
for (i=0,len=data.length;i<len;i++){
req.ids[i]=data[i].id;
var req = {};
req.ids = [];
for (i = 0, len = data.length; i < len; i++) {
req.ids[i] = data[i].id;
}
$.ajax({
url: '/place/deletePlace',
dataType:'json',
type:'POST',
contentType: "application/json;charset=utf-8",
data:JSON.stringify(req),
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秒)
});
//执行搜索重载
table.reload('currentTableId', {
url: '/place/findPlace',
page: {
curr: 1
}
}, 'data');
return false;
if (req.ids.length > 0) {
$.ajax({
url: '/place/deletePlace',
dataType: 'json',
type: 'POST',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(req),
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秒)
});
//执行搜索重载
table.reload('currentTableId', {
url: '/place/findPlace',
page: {
curr: 1
}
}, 'data');
return false;
}
}
}
})
})
}else{
layer.msg("未选中记录,请确认!");
return false;
}
}
else if(obj.event === 'addList'){
var index = layer.open({
title: '批量增加',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/insertListPlace?depositoryId='+parentId,
});
$(window).on("resize", function () {
layer.full(index);
});
}
});
@ -245,7 +261,7 @@
content: '/placeView?id='+data.id,
end:function () {
req = {};
req.parentId = parentId;
req.did = parentId;
//执行搜索重载
table.reload('currentTableId', {
url: '/place/findPlace',

Loading…
Cancel
Save