Browse Source

完成拆单出库功能

lwx_dev
erdanergou 3 years ago
parent
commit
a86ee89dd6
  1. 14
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java
  2. 22
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java
  3. 89
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  4. 12
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  5. 5
      src/main/java/com/dreamchaser/depository_manage/entity/Inventory.java
  6. 3
      src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml
  7. 12
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java
  8. 15
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  9. 8
      src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.java
  10. 6
      src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml
  11. 13
      src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationModel.java
  12. 5
      src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordP.java
  13. 5
      src/main/java/com/dreamchaser/depository_manage/pojo/InventoryP.java
  14. 5
      src/main/java/com/dreamchaser/depository_manage/pojo/SimpleApplicationOutMinRecordP.java
  15. 2
      src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java
  16. 8
      src/main/java/com/dreamchaser/depository_manage/service/SplitUnitService.java
  17. 425
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
  18. 202
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  19. 2
      src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java
  20. 46
      src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java
  21. 38
      src/main/resources/templates/pages/application/application-in_back.html
  22. 94
      src/main/resources/templates/pages/application/application-out.html
  23. 4
      src/main/resources/templates/pages/application/application-out_min-mobile.html
  24. 2
      src/main/resources/templates/pages/application/application-out_min.html
  25. 4
      src/main/resources/templates/pages/application/application-review.html
  26. 39
      src/main/resources/templates/pages/application/application_multi.html
  27. 3
      src/main/resources/templates/pages/depository/table-stock.html
  28. 7
      src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html
  29. 6
      src/main/resources/templates/pages/warehouse/depository-out.html
  30. 3
      target/classes/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml
  31. 15
      target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  32. 6
      target/classes/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml
  33. 38
      target/classes/templates/pages/application/application-in_back.html
  34. 94
      target/classes/templates/pages/application/application-out.html
  35. 4
      target/classes/templates/pages/application/application-out_min-mobile.html
  36. 2
      target/classes/templates/pages/application/application-out_min.html
  37. 4
      target/classes/templates/pages/application/application-review.html
  38. 39
      target/classes/templates/pages/application/application_multi.html
  39. 3
      target/classes/templates/pages/depository/table-stock.html
  40. 7
      target/classes/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html
  41. 6
      target/classes/templates/pages/warehouse/depository-out.html

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

@ -1554,12 +1554,14 @@ public class DepositoryController {
public RestResponse FindManagerByDid(@RequestParam("did") Integer did, HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
List<Integer> userIdByDid = roleService.findUserIdByDid(did);
List<UserByPort> userByPortList = new ArrayList<>();
for (int i = 0; i < userIdByDid.size(); i++) {
UserByPort userByPort = LinkInterfaceUtil.FindUserById(userIdByDid.get(i), userToken);
userByPortList.add(userByPort);
}
return new RestResponse(userByPortList, userByPortList.size(), 200);
List<UserByPortP> list = new ArrayList<>();
for (Integer integer : userIdByDid) {
UserByPort userByPort = LinkInterfaceUtil.FindUserById(integer, userToken);
UserByPortP user = new UserByPortP(userByPort);
list.add(user);
}
int size = list.size();
return new RestResponse(list,size,200);
}

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

@ -306,6 +306,7 @@ public class DepositoryRecordController {
}
// 出库申请
@Transactional(rollbackFor = Exception.class)
@PostMapping("/applicationOut")
public RestResponse insertApplicationOutRecord(@RequestBody Map<String, Object> map, HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
@ -333,12 +334,8 @@ public class DepositoryRecordController {
map.remove("id");
map.put("parentId", id);
}
String unit = (String) map.get("unit");
if(!"-1".equals(unit)){
integer += splitUnitService.addSplitInventory(map);
}else {
integer += depositoryRecordService.insertApplicationOutMin(map);
}
// 开启一个线程执行发送信息操作
/*new Thread(new Runnable() {
@Override
@ -357,7 +354,7 @@ public class DepositoryRecordController {
}
}).start();*/
// 开启一个线程开启审批
/*// 开启一个线程开启审批
new Thread(new Runnable() {
@Override
public void run() {
@ -370,7 +367,7 @@ public class DepositoryRecordController {
// 设置过期为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
}
}).start();
}).start();*/
}
} else {
@ -526,8 +523,14 @@ public class DepositoryRecordController {
SimpleApplicationOutMinRecordP simpleApplicationOutMinRecordP = new SimpleApplicationOutMinRecordP(applicationOutMinById);
// 设置展示时的数量为申请数-已出库数
simpleApplicationOutMinRecordP.setQuantity(applicationOutMinById.getQuantity() - applicationOutMinById.getTrueOut());
// 获取申请的物料信息
Inventory materialById = materialService.findInventoryById(applicationOutMinById.getMid());
if("-1".equals(applicationOutMinById.getUnit())) {
simpleApplicationOutMinRecordP.setShowQuantity(materialById.getUnit() + ":" + (applicationOutMinById.getQuantity() - applicationOutMinById.getTrueOut()));
}else{
simpleApplicationOutMinRecordP.setShowQuantity(applicationOutMinById.getUnit() + ":" + (applicationOutMinById.getQuantity() - applicationOutMinById.getTrueOut()));
}
// 获取当前物料所存在的库位
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(materialById.getId(), applicationOutMinById.getDepositoryId());
// 获取库位编码
@ -893,6 +896,11 @@ public class DepositoryRecordController {
ap.setPrice(materialById.getPrice());
ap.setApplicant(userToken.getId());
ap.setQuantity(1.0);
ap.setUnit(materialById.getUnit());
List<SplitInfo> splitInfoByMid = splitUnitService.findSplitInfoByMid(materialById.getMid());
ap.setSplitInfoList(splitInfoByMid);
list.add(ap);
}
return new RestResponse(list, ObjectFormatUtil.toInteger(size), 200);

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

@ -247,11 +247,9 @@ public class MaterialController {
String depositoryId = (String) map.get("depositoryId");
String placeId = (String) map.get("placeId");
list = materialService.InitTreeMenus(mname, depositoryId, placeId);
}else if("4".equals(type)){
list = materialService.InitTreeMenus_Test();
}*/
if (!"".equals(mname)) {
list = materialService.InitTreeForSelectName(mname.split(",")[0]);
list = materialService.InitTreeForSelectName(mname.split(",")[0], type);
} else {
list = materialService.InitTreeMenus_Test();
}
@ -274,13 +272,20 @@ public class MaterialController {
* @return
*/
@GetMapping("/findMatrialById")
public RestResponse findMatrialById(@RequestParam(value = "mid", required = false) String mid, HttpServletRequest request) {
public RestResponse findMatrialById(@RequestParam(value = "mid", required = false) String mid, @RequestParam(value = "type", required = false) String type, HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
if ("".equals(mid)) {
return new RestResponse("", 0, 200);
}
Map<String, Object> map = new HashMap<>();
Material materialById = materialService.findMaterialById(ObjectFormatUtil.toInteger(mid));
String mcode = materialById.getCode();
if ("out".equals(type)) {
Inventory inventoryById = materialService.findInventoryById(ObjectFormatUtil.toInteger(mid));
mcode = inventoryById.getCode();
}
List<PlaceP> placePList = new ArrayList<>();
List<Depository> depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userToken.getMaindeparment().toString());
for (int i = 0; i < depositoryByAdminorg.size(); i++) {
@ -288,10 +293,10 @@ public class MaterialController {
placePList.addAll(placeByMidAndDid);
}
Map<String, Object> param = new HashMap<>();
param.put("mcode", materialById.getCode());
param.put("mcode", mcode);
List<InventoryP> inventory = materialService.findInventory(param);
Map<String, Object> paramByBarcode = new HashMap<>();
paramByBarcode.put("mcode", materialById.getCode());
paramByBarcode.put("mcode", mcode);
List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(paramByBarcode);
if (inventory.size() > 0) {
InventoryP materialP = inventory.get(0);
@ -447,6 +452,14 @@ public class MaterialController {
@PostMapping("/findInventoryByCondition")
public RestResponse findInventoryByCondition(@RequestBody Map<String, Object> map) {
List<InventoryP> materialPByCondition = materialService.findInventory(map);
Map<String, Object> paramByBarcode = new HashMap<>();
for (InventoryP inventoryP : materialPByCondition) {
List<SplitInfo> splitInfoByMid = splitUnitService.findSplitInfoByMid(inventoryP.getMid());
inventoryP.setSplitInfoList(splitInfoByMid);
paramByBarcode.put("mcode", inventoryP.getCode());
List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(paramByBarcode);
inventoryP.setMaterialAndBarCodeList(materialByBarCodeByCondition);
}
return new RestResponse(materialPByCondition, materialService.findInventoryCount(map), 200);
}
@ -565,23 +578,56 @@ public class MaterialController {
UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
// 当前出库数量
Integer quantity = ObjectFormatUtil.toInteger(map.get("quantity"));
// 当前出库单位
String unit = (String) map.get("unit");
map.remove("unit");
// 标志变量,用于标识当前数量是否合适
Boolean flag = false;
boolean flag = false;
map.remove("quantity");
// 获取当前用户所在部门关闭的仓库及公共仓库
List<Depository> depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userByPort.getMaindeparment().toString());
for (int i = 0; i < depositoryByAdminorg.size(); i++) {
map.put("depositoryId", depositoryByAdminorg.get(i).getId());
List<InventoryP> inventory = materialService.findInventory(map);
if (inventory.size() > 0) { // 如果有库存
for (int j = 0; j < inventory.size(); j++) {
InventoryP materialP = inventory.get(j);
if (quantity <= materialP.getQuantity()) { // 如果当前数量合适则跳出循环
for (Depository depository : depositoryByAdminorg) {
map.put("depositoryId", depository.getId());
List<InventoryP> inventoryPList = materialService.findInventory(map);
if (inventoryPList.size() > 0) { // 如果有库存
if ("-1".equals(unit)) {
// 如果是基础单位
for (InventoryP inventoryP : inventoryPList) {
if (quantity <= inventoryP.getQuantity()) { // 如果当前数量合适则跳出循环
flag = true;
break;
}
}
}else{
// 如果是拆单单位
for (InventoryP inventoryP : inventoryPList) {
// 获取对应拆单库存处理记录
SplitInventory splitInventory = splitUnitService.findSplitInventoryByIid(inventoryP.getId());
if(splitInventory != null) {
// 如果存在
// 获取对应拆单记录
SplitInfo splitInfoById = splitUnitService.findSplitInfoById(splitInventory.getSid());
// 获取当前所有拆单单位
int saveQuantity = splitInventory.getSaveQuantity() + inventoryP.getQuantity() * splitInfoById.getQuantity();
if (quantity <= saveQuantity) { // 如果当前数量合适则跳出循环
flag = true;
break;
}
}else{
// 如果不存在
Map<String,Object> paramForSplitInfo = new HashMap<>();
paramForSplitInfo.put("mid",inventoryP.getMid());
paramForSplitInfo.put("newUnit",unit);
SplitInfo splitInfo = splitUnitService.findSplitInfoByMidAndUnit(paramForSplitInfo);
int saveQuantity = inventoryP.getQuantity() * splitInfo.getQuantity();
if(quantity <= saveQuantity){
flag = true;
break;
}
}
}
}
}
}
return new RestResponse(flag);
@ -771,6 +817,9 @@ public class MaterialController {
mp.setPlacePList(placePList);
// 设置物料与条形码的对应关系
mp.setMaterialAndBarCodeList(materialByBarCodeByCondition);
// 获取拆单信息
List<SplitInfo> splitInfoByMid = splitUnitService.findSplitInfoByMid(mp.getMid());
mp.setSplitInfoList(splitInfoByMid);
}
return new RestResponse(mp);
@ -1084,18 +1133,20 @@ public class MaterialController {
Boolean isExist = false;
Map<String, Object> param = new HashMap<>();
param.put("depositoryId", depositoryByAdminorg.get(j).getId());
param.put("mcode", materialByBarCode.getMcode());
param.put("mid", materialByBarCode.getMid());
List<InventoryP> inventory = materialService.findInventory(param);
if (inventory.size() > 0) {
// 如果存在该物料
InventoryP materialP = inventory.get(0);
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(materialP.getId(), depositoryByAdminorg.get(j).getId());
materialByBarCode.setMid(materialP.getId());
InventoryP inventoryP = inventory.get(0);
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(inventoryP.getId(), depositoryByAdminorg.get(j).getId());
materialByBarCode.setIid(inventoryP.getId());
placePList.addAll(placeByMidAndDid);
isExist = true;
}
if (isExist) {
List<SplitInfo> splitInfoByMid = splitUnitService.findSplitInfoByMid(materialByBarCode.getMid());
materialByBarCode.setSplitInfoList(splitInfoByMid);
return new RestResponse(materialByBarCode);
}
}

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

@ -674,6 +674,8 @@ public class PageController {
if (materialById.getShelfLife() == null) {
mv.addObject("display", "none");
}
List<SplitInfo> splitInfoByMid = splitUnitService.findSplitInfoByMid(materialById.getMid());
materialById.setSplitInfoList(splitInfoByMid);
mv.addObject("materialById", materialById);
mv.addObject("depository", depositoryRecordById);
mv.setViewName("pages/application/application-in_back");
@ -1224,6 +1226,8 @@ public class PageController {
Integer sumQuantity = 0;
// 当前总额
Double sumPrice = 0.0;
// 计量单位
StringBuffer sumUnit = new StringBuffer();
for (int i = 0; i < applicationOutRecordMinByParent.size(); i++) {
// 获取子订单信息
ApplicationOutRecordMin applicationOutRecordMin = applicationOutRecordMinByParent.get(i);
@ -1241,6 +1245,12 @@ public class PageController {
depositoryName.append(depository.getDname()).append(",");
sumQuantity += applicationOutRecordMin.getQuantity();
sumPrice += (materialById.getPrice());
String unit = applicationOutRecordMin.getUnit();
if("-1".equals(unit)){
sumUnit.append(materialById.getUnit()+",");
}else{
sumUnit.append(unit+",");
}
}
// 申请人
UserByPort userByPort = LinkInterfaceUtil.FindUserById(recordP.getApplicantId(), userToken);
@ -1271,6 +1281,7 @@ public class PageController {
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);
@ -1281,6 +1292,7 @@ public class PageController {
recordP.setDepositoryName(depositoryName.toString());
recordP.setQuantity(sumQuantity);
recordP.setPrice(sumPrice);
recordP.setUnit(sumUnit.toString());
mv.addObject("record", recordP);
return mv;
}

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

@ -145,4 +145,9 @@ public class Inventory {
* 保质期
*/
private String showShelfLife;
/**
* 该物料对应的拆单记录
*/
private List<SplitInfo> splitInfoList;
}

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

@ -92,6 +92,7 @@
<result column="mcode" property="mcode" jdbcType="VARCHAR" />
<result column="placeId" property="placeId" jdbcType="INTEGER" />
<result column="pass" property="pass" jdbcType="INTEGER" />
<result column="aormUnit" property="unit" jdbcType="VARCHAR"/>
</resultMap>
@ -141,7 +142,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,mcode,placeId,pass
depositoryManager,depositoryManagerPass,depositoryManagerTime,depositoryManagerMessage,aorstate,istransfer,mcode,placeId,pass,aormUnit
</sql>
<sql id="ApplicationOutRecordMinInfo">

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

@ -167,10 +167,10 @@ public interface MaterialMapper {
/**
* 根据库存id查询库存信息
* @param mid 库存id
* @param id 库存id
* @return 库存信息
*/
Inventory findInventoryById(int mid);
Inventory findInventoryById(int id);
/**
* 根据物料id获取对应库存信息
@ -318,6 +318,14 @@ public interface MaterialMapper {
*/
List<Material> findMaterialByTypeIdsAndMname(Map<String,Object> map);
/**
* 批量查询当前类型下包含该名称的物料
* @param map 待查询数据
* @return
*/
List<Inventory> findInventoryByTypeIdsAndMname(Map<String,Object> map);
/**
* 添加当前批次下的物料与生产日期对应
* @param map

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

@ -659,6 +659,21 @@
</select>
<select id="findInventoryByTypeIdsAndMname" resultMap="InventoryMap" parameterType="map">
SELECT
<include refid="allColumnsAndTypeNameOnViewByInventory" />
FROM findInventory
where
mname like concat('%',#{mname},'%')
and
mtid in
<foreach collection="list" index="index" item="item" open="("
separator="," close=")">
#{item}
</foreach>
</select>
<!-- 插入数据 -->
<insert id="insertMaterial" useGeneratedKeys="true" keyProperty="id">
INSERT INTO material (

8
src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.java

@ -144,5 +144,13 @@ public interface SplitUnitMapper {
List<SplitInfo> findSplitInfoByMid(Integer mid);
/**
* 根据库存id获取对应的拆单库存处理记录
* @param Iid 待查询库存id
* @return
*/
SplitInventory findSplitInventoryByIid(Integer Iid);
}

6
src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml

@ -110,6 +110,12 @@
where si.sid = #{sid}
</select>
<select id="findSplitInventoryByIid" parameterType="int" resultMap="splitInventoryMap">
select
<include refid="splitInventoryAllColumns"/>
from `split_inventory` si
where si.iid = #{Iid}
</select>
<update id="updateSplitInfo">
update `split`

13
src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationModel.java

@ -1,8 +1,10 @@
package com.dreamchaser.depository_manage.pojo;
import com.dreamchaser.depository_manage.entity.SplitInfo;
import lombok.Data;
import java.math.BigInteger;
import java.util.List;
/**
* 出去库申请模板
@ -64,4 +66,15 @@ public class ApplicationModel {
* 库位编码
*/
private String placeCode;
/**
* 计量单位
*/
private String unit;
/**
* 该物料对应的拆单记录
*/
private List<SplitInfo> splitInfoList;
}

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

@ -144,4 +144,9 @@ public class ApplicationOutRecordP {
* 订单状态
*/
private Integer pass;
/**
* 出库单位
*/
private String unit;
}

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

@ -172,6 +172,11 @@ public class InventoryP {
*/
private List<SplitInfo> splitInfoList;
/**
* 用于展示的数量
*/
private String showQuantity;

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

@ -82,6 +82,11 @@ public class SimpleApplicationOutMinRecordP {
*/
private Integer trueOut;
/**
* 用于展示的数量
*/
private String showQuantity;
public SimpleApplicationOutMinRecordP(ApplicationOutRecordMin applicationOutRecordMin) {
this.id = applicationOutRecordMin.getId();
this.parentId = applicationOutRecordMin.getParentId();

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

@ -356,5 +356,5 @@ public interface MaterialService {
* @param mname 物料名称
* @return
*/
List<Object> InitTreeForSelectName(String mname);
List<Object> InitTreeForSelectName(String mname,String type);
}

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

@ -91,4 +91,12 @@ public interface SplitUnitService {
* @return
*/
SplitInfo findSplitInfoByMidAndUnit(Map<String,Object> map);
/**
* 根据库存id获取对应拆单库存处理记录
* @param Iid 待查询库存id
* @return
*/
SplitInventory findSplitInventoryByIid(Integer Iid);
}

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

@ -58,6 +58,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
@Autowired
private MaterialTypeMapper materialTypeMapper;
@Autowired
private SplitUnitMapper splitUnitMapper;
/**
* 提交申请插入一条仓库调度记录
@ -764,15 +767,22 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 获取要出库的数量
Integer trueOut = ObjectFormatUtil.toInteger(param.get("trueOut"));
// 获取出库库位
Integer placeId = ObjectFormatUtil.toInteger(param.get("placeId"));
// 获取出库申请时的单位
String unit = applicationOutMinById.getUnit();
MaterialAndPlace placeAndMaterialByMidAndPid = null;
if("-1".equals(unit)) {
// 如果是按基础单位出库
if (istransfer == 1) {// 如果是库存转移
// 获取库存转移订单
TransferRecord transferRecordById = transferRecordMapper.findTransferRecordById(applicationOutMinById.getTransferId());
placeId = transferRecordById.getFromPlaceId();// 获取转出库位
}
MaterialAndPlace placeAndMaterialByMidAndPid = null;
if (placeId != 0) { // 如果不是默认库位
Map<String, Object> params = new HashMap<>();
params.put("mid", inventory.getId());
@ -791,7 +801,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
restResponse.setStatusInfo(new StatusInfo("出库失败", "当前位置未发现该物料"));
return restResponse;
}
} else { // 如果是默认库位
}
else { // 如果是默认库位
Map<String, Object> params = new HashMap<>();
params.put("mid", inventory.getId());
params.put("pid", 0);
@ -810,24 +821,23 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
return restResponse;
}
}
// 如果物料数量可以出库并且库位数量充足
if (inventory.getQuantity() >= trueOut && flag) {
// 当前出库金额
Double sum = inventory.getPrice() * trueOut;
// 当前出库数量
Integer quantity = trueOut;
inventory.setAmounts(inventory.getAmounts() - sum);
inventory.setQuantity(inventory.getQuantity() - quantity);
inventory.setNumberOfTemporary(inventory.getNumberOfTemporary() - quantity);
// 修改物料信息
materialMapper.updateInventory(inventory);
if (placeAndMaterialByMidAndPid != null) { //如果库位不为空
// 修改当前库位存放物料的数量
placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() - quantity);
placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid);
}
// 修改库位数量
Place placeById = placeMapper.findPlaceById(placeId);
@ -835,6 +845,348 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
placeMapper.UpdatePlace(placeById);
// 如果是库存转移订单
Map<String, Object> map = new HashMap<>();
if (record.getIstransfer() == 1) {
map.put("quantity", trueOut.toString());
map.put("applicantId", record.getApplicantId());
map.put("minRecordId", applicationOutMinById.getId()); // 出库订单编号
transferMaterial(map);
}
restResponse.setStatus(200);
restResponse.setData("");
restResponse.setStatusInfo(new StatusInfo("出库成功", "出库成功"));
// 进行子订单的相关处理
updateApplicationMinOutInfo(id,applicationOutMinById,record,trueOut,userByPort,placeId,userAgent);
// 更新入库批次中的物料数量
new Thread(new Runnable() {
@Override
public void run() {
// 获取出库物料id
Integer mid = inventory.getId();
// 获取当前物料对应的生产日期
List<MaterialAndProducedDate> materialAndProducedDateByMid = materialMapper.findMaterialAndProducedDateByMid(mid);
if (materialAndProducedDateByMid.size() > 0) {
// 获取距今生产日期远的(即生产日期最早的)
for (MaterialAndProducedDate materialAndProducedDate :
materialAndProducedDateByMid) {
if (materialAndProducedDate.getInventory() > quantity) {
// 设置使用的数量
materialAndProducedDate.setExpendnum(materialAndProducedDate.getExpendnum() + quantity);
// 设置剩余的数量
materialAndProducedDate.setInventory(materialAndProducedDate.getInventory() - quantity);
materialMapper.updateMaterialAndProducedDate(materialAndProducedDate);
// 跳出循环
break;
}
}
}
}
}).start();
}
else {
restResponse.setStatus(508);
restResponse.setData("");
restResponse.setStatusInfo(new StatusInfo("出库失败", "出库失败,库存不足"));
}
}
else{
// 如果是拆单后的单位
// 获取拆单库存处理记录
SplitInventory splitInventory = splitUnitMapper.findSplitInventoryByIid(inventory.getId());
if(splitInventory != null) {
// 如果拆单库存处理记录存在
if (splitInventory.getSaveQuantity() >= trueOut) {
// 如果当前待处理树可以满足需求
splitInventory.setSaveQuantity(splitInventory.getSaveQuantity() - trueOut);
if (splitInventory.getOutQuantity() != null) {
splitInventory.setOutQuantity(splitInventory.getOutQuantity() + trueOut);
} else {
splitInventory.setOutQuantity(trueOut);
}
splitUnitMapper.updateSplitInventory(splitInventory);
// 进行子订单的相关处理
updateApplicationMinOutInfo(id, applicationOutMinById, record, trueOut, userByPort, placeId, userAgent);
restResponse.setStatus(200);
restResponse.setData("");
restResponse.setStatusInfo(new StatusInfo("出库成功", "出库成功"));
} else {
// 如果不能满足需求
// 获取对应的拆单记录
SplitInfo splitInfo = splitUnitMapper.findSplitInfoById(splitInventory.getSid());
// 获取剩余不足的数量
int surplus = trueOut - splitInventory.getSaveQuantity();
if (surplus < splitInfo.getQuantity()) {
// 如果剩余不足的数量小于拆单单位对应的数量
Map<String, Object> params = new HashMap<>();
params.put("mid", inventory.getId());
params.put("pid", placeId);
// 获取当前物料在库位中的数量
placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(params);
if (placeAndMaterialByMidAndPid != null) {
// 如果当前库位存在该物料
if (placeAndMaterialByMidAndPid.getQuantity() < 1) {
// 如果当前库存中的物料库存不足以出库
flag = false;
}
} else {
restResponse.setStatus(566);
restResponse.setData("");
restResponse.setStatusInfo(new StatusInfo("出库失败", "当前位置未发现该物料"));
return restResponse;
}
// 如果物料数量可以出库并且库位数量充足
if (inventory.getQuantity() >= 1 && flag) {
// 令库存-1
inventory.setQuantity(inventory.getQuantity() - 1);
// 重新计算总额
inventory.setAmounts(inventory.getQuantity() * inventory.getPrice());
// 重新计算单价
BigDecimal decimal = new BigDecimal(inventory.getAmounts() / inventory.getQuantity());
Double price = decimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
inventory.setPrice(price);
// 修改库存记录
materialMapper.updateInventory(inventory);
// 修改当前库位存放物料的数量
placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() - 1);
placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid);
// 修改库位数量
Place placeById = placeMapper.findPlaceById(placeId);
placeById.setQuantity(placeById.getQuantity() - 1);
placeMapper.UpdatePlace(placeById);
// 如果是库存转移订单
Map<String, Object> map = new HashMap<>();
if (record.getIstransfer() == 1) {
map.put("quantity", "1");
map.put("applicantId", record.getApplicantId());
map.put("minRecordId", applicationOutMinById.getId()); // 出库订单编号
transferMaterial(map);
}
// 设置剩余拆单库存处理数量
splitInventory.setSaveQuantity(splitInfo.getQuantity() + splitInventory.getSaveQuantity() - trueOut);
splitInventory.setOutQuantity(splitInventory.getOutQuantity() + trueOut);
splitUnitMapper.updateSplitInventory(splitInventory);
updateApplicationMinOutInfo(id, applicationOutMinById, record, trueOut, userByPort, placeId, userAgent);
restResponse.setStatus(200);
restResponse.setData("");
restResponse.setStatusInfo(new StatusInfo("出库成功", "出库成功"));
} else {
restResponse.setStatus(508);
restResponse.setData("");
restResponse.setStatusInfo(new StatusInfo("出库失败", "出库失败,库存不足"));
}
} else {
// 如果大于
// 获取库存重要减少的数量
int surplus_redundant = surplus / splitInfo.getQuantity();
// 获取拆单库存处理中要处理数量
int saveQuantity = surplus - surplus_redundant * splitInfo.getQuantity();
if (saveQuantity > splitInventory.getSaveQuantity()) {
// 如果要处理的数量大于剩余数量
// 获取一个数量
surplus_redundant += 1;
splitInventory.setSaveQuantity(splitInfo.getQuantity() + splitInventory.getSaveQuantity() - saveQuantity);
} else {
// 如果不大于
splitInventory.setSaveQuantity(splitInventory.getSaveQuantity() - saveQuantity);
}
splitInventory.setOutQuantity(splitInventory.getOutQuantity() + saveQuantity);
Map<String, Object> params = new HashMap<>();
params.put("mid", inventory.getId());
params.put("pid", placeId);
// 获取当前物料在库位中的数量
placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(params);
if (placeAndMaterialByMidAndPid != null) {
// 如果当前库位存在该物料
if (placeAndMaterialByMidAndPid.getQuantity() < surplus_redundant) {
// 如果当前库存中的物料库存不足以出库
flag = false;
}
} else {
restResponse.setStatus(566);
restResponse.setData("");
restResponse.setStatusInfo(new StatusInfo("出库失败", "当前位置未发现该物料"));
return restResponse;
}
if (inventory.getQuantity() >= surplus_redundant && flag) {
// 如果能够出库
// 令库存-1
inventory.setQuantity(inventory.getQuantity() - surplus_redundant);
// 重新计算总额
inventory.setAmounts(inventory.getQuantity() * inventory.getPrice());
// 重新计算单价
BigDecimal decimal = new BigDecimal(inventory.getAmounts() / inventory.getQuantity());
Double price = decimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
inventory.setPrice(price);
// 修改库存记录
materialMapper.updateInventory(inventory);
// 修改当前库位存放物料的数量
placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() - surplus_redundant);
placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid);
// 修改库位数量
Place placeById = placeMapper.findPlaceById(placeId);
placeById.setQuantity(placeById.getQuantity() - surplus_redundant);
placeMapper.UpdatePlace(placeById);
// 如果是库存转移订单
Map<String, Object> map = new HashMap<>();
if (record.getIstransfer() == 1) {
map.put("quantity", String.valueOf(surplus_redundant));
map.put("applicantId", record.getApplicantId());
map.put("minRecordId", applicationOutMinById.getId()); // 出库订单编号
transferMaterial(map);
}
updateApplicationMinOutInfo(id, applicationOutMinById, record, trueOut, userByPort, placeId, userAgent);
restResponse.setStatus(200);
restResponse.setData("");
restResponse.setStatusInfo(new StatusInfo("出库成功", "出库成功"));
} else {
restResponse.setStatus(508);
restResponse.setData("");
restResponse.setStatusInfo(new StatusInfo("出库失败", "出库失败,库存不足"));
}
}
}
}
else{
// 如果拆单库存处理记录不存在
// 用于获取对应的拆单记录
Map<String,Object> paramForSplitInfo = new HashMap<>();
paramForSplitInfo.put("mid",inventory.getMid());
paramForSplitInfo.put("newUnit",record.getUnit());
// 获取对应拆单记录
SplitInfo splitInfo = splitUnitMapper.findSplitInfoByMidAndUnit(paramForSplitInfo);
if(inventory.getQuantity() * splitInfo.getQuantity() > trueOut){
// 如果当前库存数量满足要求
// 获取当前出库的具体数目
int residue = trueOut / splitInfo.getQuantity();
// 获取剩余数目
int residue_realQuantity = trueOut - residue * splitInfo.getQuantity();
// 设置新总额
inventory.setAmounts(inventory.getAmounts() - (residue + 1) * inventory.getPrice());
// 设置新库存
inventory.setQuantity(inventory.getQuantity() - residue - 1);
// 重新计算单价
BigDecimal decimal = BigDecimal.valueOf(inventory.getAmounts() / inventory.getQuantity());
Double price = decimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
inventory.setPrice(price);
//更新库存
materialMapper.updateInventory(inventory);
// 更新对应库位的库存
// 修改当前库位存放物料的数量
placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() - residue - 1);
placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid);
// 修改库位数量
Place placeById = placeMapper.findPlaceById(placeId);
placeById.setQuantity(placeById.getQuantity() - residue - 1);
placeMapper.UpdatePlace(placeById);
// 添加拆单库存处理记录
Map<String,Object> insertSplitInventory = new HashMap<>();
insertSplitInventory.put("sid",splitInfo.getId());
insertSplitInventory.put("iid",inventory.getId());
insertSplitInventory.put("outQuantity",trueOut);
insertSplitInventory.put("inQuantity",0);
insertSplitInventory.put("saveQuantity",splitInfo.getQuantity() - residue_realQuantity);
splitUnitMapper.addSplitInventory(insertSplitInventory);
// 如果是库存转移订单
Map<String, Object> map = new HashMap<>();
if (record.getIstransfer() == 1) {
map.put("quantity", String.valueOf(residue));
map.put("applicantId", record.getApplicantId());
map.put("minRecordId", applicationOutMinById.getId()); // 出库订单编号
transferMaterial(map);
}
updateApplicationMinOutInfo(id, applicationOutMinById, record, trueOut, userByPort, placeId, userAgent);
restResponse.setStatus(200);
restResponse.setData("");
restResponse.setStatusInfo(new StatusInfo("出库成功", "出库成功"));
}else {
restResponse.setStatus(508);
restResponse.setData("");
restResponse.setStatusInfo(new StatusInfo("出库失败", "出库失败,库存不足"));
}
}
}
return restResponse;
}
/**
* 用于完成出库时的相关处理操作
* @param id 子订单id
* @param applicationOutMinById 待处理的子订单
* @param record 子订单对应的主订单
* @param trueOut 实际出库数量
* @param userByPort 当前登录用户
* @param placeId 出库库位id
* @param userAgent user-agent
*/
@Transactional(rollbackFor = Exception.class)
void updateApplicationMinOutInfo(Integer id, ApplicationOutRecordMin applicationOutMinById, ApplicationOutRecordP record, Integer trueOut, UserByPort userByPort, Integer placeId, String userAgent){
String redisMinRecordKey = "minRecord:" + id; // 设置redis中子订单键值
// 修改redis中本子订单状态
// redisTemplate.opsForHash().put(redisMinRecordKey,"state","2");
@ -954,58 +1306,12 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// depositoryManagerByQyWx.append(depositoryManager.getWorkwechat()+",");
}
depositoryManagerByQyWx.append("PangFuZhen,");
JSONObject jsonObject = qyWxOperationService.sendCcMessageToUsers(depositoryManagerByQyWx.toString(), record.getId(), userAgent);
// JSONObject jsonObject = qyWxOperationService.sendCcMessageToUsers(depositoryManagerByQyWx.toString(), record.getId(), userAgent);
// 删除redis中本订单
redisTemplate.delete("record:" + record.getId());
}
}
// 如果是库存转移订单
Map<String, Object> map = new HashMap<>();
if (record.getIstransfer() == 1) {
map.put("quantity", trueOut.toString());
map.put("applicantId", record.getApplicantId());
map.put("minRecordId", applicationOutMinById.getId()); // 出库订单编号
transferMaterial(map);
}
restResponse.setStatus(200);
restResponse.setData("");
restResponse.setStatusInfo(new StatusInfo("出库成功", "出库成功"));
// 更新入库批次中的物料数量
new Thread(new Runnable() {
@Override
public void run() {
// 获取出库物料id
Integer mid = inventory.getId();
// 获取当前物料对应的生产日期
List<MaterialAndProducedDate> materialAndProducedDateByMid = materialMapper.findMaterialAndProducedDateByMid(mid);
if (materialAndProducedDateByMid.size() > 0) {
// 获取距今生产日期远的(即生产日期最早的)
for (MaterialAndProducedDate materialAndProducedDate :
materialAndProducedDateByMid) {
if (materialAndProducedDate.getInventory() > quantity) {
// 设置使用的数量
materialAndProducedDate.setExpendnum(materialAndProducedDate.getExpendnum() + quantity);
// 设置剩余的数量
materialAndProducedDate.setInventory(materialAndProducedDate.getInventory() - quantity);
materialMapper.updateMaterialAndProducedDate(materialAndProducedDate);
// 跳出循环
break;
}
}
}
}
}).start();
} else {
restResponse.setStatus(508);
restResponse.setData("");
restResponse.setStatusInfo(new StatusInfo("出库失败", "出库失败,库存不足"));
}
return restResponse;
}
/**
@ -1372,7 +1678,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(id), s, userAgent, 1);
}
}).start();
} else {
}
else {
String result = "";
// 开启线程更改其他用户卡片模板样式
String simpleTime = DateUtil.getSimpleTime(new Date());
@ -1428,16 +1735,14 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 获取对应的物料编号
Integer mid = applicationOutRecordMin.getMid();
// 获取物料信息
Material materialById = materialMapper.findMaterialById(mid);
Inventory inventory = materialMapper.findInventoryById(mid);
// 获取该物料所处仓库的仓库管理员
List<Integer> userIdByDid = new ArrayList<>();
userIdByDid = roleService.findUserIdByDid(materialById.getDepositoryId());
userIdByDid = roleService.findUserIdByDid(inventory.getDepositoryId());
// 用于保存仓库管理员的企业微信openid
StringBuilder QyWxUid = new StringBuilder();
for (int j = 0; j < userIdByDid.size(); j++) {
// 获取当前用户信息
UserByPort userByPort = LinkInterfaceUtil.FindUserById(userIdByDid.get(j), userToken);
// 仓库管理员订单信息
Map<String, Object> userRecord = new HashMap<>();
// 用户当前子订单
@ -1469,7 +1774,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}).start();*/
}
for (int i = 0; i < depositoryIdList.size(); i++) {
/* for (int i = 0; i < depositoryIdList.size(); i++) {
Object o = minIdByDepository.get("depository" + depositoryIdList.get(i));
if (o != null) {
List<Integer> minIdList = (List<Integer>) o;
@ -1517,7 +1822,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
s = "PangFuZhen,";
qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(id), s, userAgent, 1);
}
}).start();
}).start();*/
// 将主订单插入到redis中
redisTemplate.opsForHash().put("record:" + record.getId(), "minRecord", minRecordByMain.toString());

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

@ -4,10 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.DepositoryMapper;
import com.dreamchaser.depository_manage.mapper.MaterialMapper;
import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper;
import com.dreamchaser.depository_manage.mapper.QrCodeMapper;
import com.dreamchaser.depository_manage.mapper.*;
import com.dreamchaser.depository_manage.pojo.InventoryP;
import com.dreamchaser.depository_manage.pojo.MaterialP;
import com.dreamchaser.depository_manage.pojo.PlaceP;
@ -16,6 +13,7 @@ import com.dreamchaser.depository_manage.service.PlaceService;
import com.dreamchaser.depository_manage.service.RoleService;
import com.dreamchaser.depository_manage.utils.DateUtil;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
@ -48,6 +46,9 @@ public class MaterialServiceImpl implements MaterialService {
@Autowired
RedisTemplate<String, String> redisTemplate;
@Autowired
SplitUnitMapper splitUnitMapper;
/**
* 增加一条库存记录
@ -226,6 +227,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据物料名与物料规格型号查询对应的物料
*
* @param map
* @return
*/
@ -276,6 +278,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据条件查询符合条件的库存
*
* @param map
* @return
*/
@ -339,6 +342,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据条件查询物料总数
*
* @param map 查询条件
* @return 当前条件下的总数
*/
@ -380,6 +384,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据库存id查询库存信息
*
* @param id 库存id
* @return 库存信息
*/
@ -395,6 +400,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据物料id获取对应库存信息
*
* @param mid 待查询物料id
* @return
*/
@ -413,6 +419,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据物料id获取其在对应仓库中的库存数
*
* @param mid 物料id
* @param depositoryList 待查询的仓库
* @return
@ -439,6 +446,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据id查询库存信息
*
* @param id 库存id
* @return 库存信息
*/
@ -619,6 +627,21 @@ public class MaterialServiceImpl implements MaterialService {
m.setTypeName(materialTypeByOldId.getTname());
m.setTypeId(materialTypeByOldId.getOldId());
m.setWarningCount(warningCount);
// 获取当前是否存在拆单处理记录
SplitInventory splitInventoryByIid = splitUnitMapper.findSplitInventoryByIid(m.getId());
if (splitInventoryByIid != null) {
// 如果存在拆单库存处理记录
// 获取拆单信息
SplitInfo splitInfo = splitUnitMapper.findSplitInfoById(splitInventoryByIid.getSid());
if (Integer.compare(m.getQuantity(), 0) == 0) {
m.setShowQuantity(splitInfo.getNewUnit() + ":" + splitInventoryByIid.getSaveQuantity());
} else {
m.setShowQuantity(m.getUnit() + ":" + m.getQuantity() + "," + splitInfo.getNewUnit() + ":" + splitInventoryByIid.getSaveQuantity());
}
} else {
m.setShowQuantity(m.getUnit() + ":" + m.getQuantity());
}
result.add(m);
}
return result;
@ -686,6 +709,7 @@ public class MaterialServiceImpl implements MaterialService {
}
return result;
}
/**
* 根据仓库查询物品
*
@ -699,6 +723,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 查询仓库中的物料
*
* @param map
* @return
*/
@ -829,8 +854,7 @@ public class MaterialServiceImpl implements MaterialService {
}
}
return materialMapper.updateInventory(material);
}
else {
} else {
// 用于标志是新插入的物料
map.put("isNew", true);
if (!map.containsKey("producedDate")) {
@ -892,8 +916,16 @@ public class MaterialServiceImpl implements MaterialService {
List<MaterialAndBarCode> materialByBarCodeByCondition = materialMapper.findMaterialByBarCodeByCondition(map);
if (materialByBarCodeByCondition.size() > 0) {
MaterialAndBarCode materialAndBarCode = materialByBarCodeByCondition.get(0);
if (materialAndBarCode.getIid() != null) {
Inventory inventoryByMid = materialMapper.findInventoryById(materialAndBarCode.getIid());
if (inventoryByMid != null) {
materialAndBarCode.setPrice(inventoryByMid.getPrice() / 100);
} else {
materialAndBarCode.setPrice(0.0);
}
} else {
materialAndBarCode.setPrice(0.0);
}
return materialAndBarCode;
}
return null;
@ -1200,6 +1232,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 用于修改库位中的物料
*
* @param map 修改条件
* @return
*/
@ -1278,6 +1311,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 用于真实关闭打开的树
*
* @param jsonArray 传入的子列表
* @param mtLevel 当前关闭的物料类型等级
* @param mt 要关闭的类型
@ -1652,8 +1686,10 @@ public class MaterialServiceImpl implements MaterialService {
}
String title = material.getMname() + ",规格型号: " + version;
if (material.getDepositoryId() != null) {
// 如果当前是库存
title += ",当前库存为:" + material.getQuantity();
title += ",当前库存为:" + material.getUnit() + ":" + material.getQuantity();
}
map.put("title", title);
map.put("id", material.getId());
@ -1670,7 +1706,7 @@ public class MaterialServiceImpl implements MaterialService {
String title = material.getMname() + ",规格型号: " + version;
if (material.getDepositoryId() != null) {
// 如果当前是库存
title += ",当前库存为:" + material.getQuantity();
title += ",当前库存为:" + material.getUnit() + ":" + material.getQuantity();
}
map.put("title", title);
map.put("id", material.getId());
@ -1680,36 +1716,57 @@ public class MaterialServiceImpl implements MaterialService {
}
} else {
if ("".equals(mname)) { // 如果没有输入名称
for (Inventory material : materialPByCondition) {
for (Inventory inventory : materialPByCondition) {
Map<String, Object> map = new HashMap<>();
String version = material.getVersion();
String version = inventory.getVersion();
if (version == null) {
version = "";
}
String title = material.getMname() + ",规格型号: " + version;
if (material.getDepositoryId() != null) {
String title = inventory.getMname() + ",规格型号: " + version;
if (inventory.getDepositoryId() != null) {
// 如果当前是库存
title += ",当前库存为:" + material.getQuantity();
// 获取对应拆单库存处理记录
title += ",当前库存为:" + inventory.getUnit() + ":" + inventory.getQuantity();
SplitInventory splitInventoryByIid = splitUnitMapper.findSplitInventoryByIid(inventory.getId());
if (splitInventoryByIid != null) {
// 如果存在
// 获取对应的拆单记录
SplitInfo splitInfoById = splitUnitMapper.findSplitInfoById(splitInventoryByIid.getSid());
title += "," + splitInventoryByIid.getSaveQuantity() + splitInfoById.getNewUnit();
}
}
map.put("title", title);
map.put("id", material.getId());
map.put("id", inventory.getId());
result.add(map);
}
} else {
for (Inventory material : materialPByCondition) {
for (Inventory inventory : materialPByCondition) {
Map<String, Object> map = new HashMap<>();
if (material.getMname().contains(mname)) {
String version = material.getVersion();
if (inventory.getMname().contains(mname)) {
String version = inventory.getVersion();
if (version == null) {
version = "";
}
String title = material.getMname() + ",规格型号: " + version;
if (material.getDepositoryId() != null) {
String title = inventory.getMname() + ",规格型号: " + version;
if (inventory.getDepositoryId() != null) {
// 如果当前是库存
// 如果当前是库存
title += ",当前库存为:" + material.getQuantity();
// 获取对应拆单库存处理记录
title += ",当前库存为:" + inventory.getUnit() + ":" + inventory.getQuantity();
SplitInventory splitInventoryByIid = splitUnitMapper.findSplitInventoryByIid(inventory.getId());
if (splitInventoryByIid != null) {
// 如果存在
// 获取对应的拆单记录
SplitInfo splitInfoById = splitUnitMapper.findSplitInfoById(splitInventoryByIid.getSid());
title += "," + splitInventoryByIid.getSaveQuantity() + splitInfoById.getNewUnit();
}
}
map.put("title", title);
map.put("id", material.getId());
map.put("id", inventory.getId());
result.add(map);
}
}
@ -2017,6 +2074,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 用于构造物料树结构
*
* @return
*/
public List<Object> InitTree_Test_New() {
@ -2203,6 +2261,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 用于构造树结构
*
* @param list 树列表
* @param parentId 父级id
* @return
@ -2228,9 +2287,10 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 用于构造物料树结构(通过物料名称搜索)
*
* @return
*/
public List<Object> InitTreeForSelectName(String mname) {
public List<Object> InitTreeForSelectName(String mname, String type) {
// 获取所有物料类型
List<MaterialType> materialTypeAll = materialTypeMapper.findMaterialTypeAll();
// 物料总数
@ -2258,7 +2318,7 @@ public class MaterialServiceImpl implements MaterialService {
MaterialType materialType = materialTypeAll.get(i);
if (((i + 1) % 100) == 0) { // 如果有100个开启线程进行处理
materialTypeList.add(materialType.getOldId());
Future<Object> future = completionService.submit(new TaskTestForSelectMname(materialTypeList,mname));
Future<Object> future = completionService.submit(new TaskTestForSelectMname(materialTypeList, mname, type));
futureList.add(future); // 添加到结果集
materialTypeList = new ArrayList<>(); // 情况列表
} else {
@ -2269,7 +2329,7 @@ public class MaterialServiceImpl implements MaterialService {
if (materialTypeList.size() > 0) {
// 如果有剩余,开启线程进行处理
Future<Object> future = completionService.submit(new TaskTestForSelectMname(materialTypeList,mname));
Future<Object> future = completionService.submit(new TaskTestForSelectMname(materialTypeList, mname, type));
futureList.add(future);
}
@ -2295,10 +2355,13 @@ public class MaterialServiceImpl implements MaterialService {
// 待处理的物料类型id列表
List<Long> materialTypeIdList;
String mname;
// 1入库2出库3盘点
String type;
public TaskTestForSelectMname(List<Long> materialTypeByCondition,String mname) {
public TaskTestForSelectMname(List<Long> materialTypeByCondition, String mname, String type) {
this.materialTypeIdList = materialTypeByCondition;
this.mname = mname;
this.type = type;
}
@Override
@ -2310,7 +2373,15 @@ public class MaterialServiceImpl implements MaterialService {
Map<String, Object> paramForMnameAndMtid = new HashMap<>();
paramForMnameAndMtid.put("list", materialTypeIdList);
paramForMnameAndMtid.put("mname", mname);
List<Material> materialByTypeIds = materialMapper.findMaterialByTypeIdsAndMname(paramForMnameAndMtid);
List<Material> materialByTypeIds = new ArrayList<>();
List<Inventory> inventoryByTypeIdsAndMname = new ArrayList<>();
if ("1".equals(type)) {
materialByTypeIds = materialMapper.findMaterialByTypeIdsAndMname(paramForMnameAndMtid);
} else if ("2".equals(type)) {
inventoryByTypeIdsAndMname= materialMapper.findInventoryByTypeIdsAndMname(paramForMnameAndMtid);
}
// 查询当前物料类型所包含的物料
List<MaterialType> materialTypeByOldIds = materialTypeMapper.findMaterialTypeByOldIds(materialTypeIdList);
@ -2322,14 +2393,25 @@ public class MaterialServiceImpl implements MaterialService {
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
for (int i = 0; i < materialTypeByOldIds.size(); i++) {
if("1".equals(type)) {
for (MaterialType mt : materialTypeByOldIds) {
// 获取当前物料类型
MaterialType mt = materialTypeByOldIds.get(i);
// 开启对应线程
Future<Object> future = completionService.submit(new MtTaskTestForSelectMname(mt, materialByTypeIds,mname));
Future<Object> future = completionService.submit(new MtTaskTestForSelectMname(mt, materialByTypeIds, mname, type));
// 添加到线程结果列表
futureList.add(future);
}
}else if("2".equals(type)){
for (MaterialType mt : materialTypeByOldIds) {
// 获取当前物料类型
// 开启对应线程
MtTaskTestForSelectMname mtTaskTestForSelectMname = new MtTaskTestForSelectMname(mt, materialByTypeIds, mname, type);
mtTaskTestForSelectMname.setInventoryList(inventoryByTypeIdsAndMname);
Future<Object> future = completionService.submit(mtTaskTestForSelectMname);
// 添加到线程结果列表
futureList.add(future);
}
}
// 3.获取结果
for (int i = 0; i < materialTypeIdList.size(); i++) {
Object result = null;
@ -2349,16 +2431,24 @@ public class MaterialServiceImpl implements MaterialService {
}
// 用于执行测试新算法(通过物料名称搜索)
class MtTaskTestForSelectMname implements Callable<Object> {
MaterialType mt; // 物料类型
List<Material> materiaList; // 物料列表
String mname;
String type;
List<Inventory> inventorys; // 库存列表
public MtTaskTestForSelectMname(MaterialType mt, List<Material> materiaList,String mname) {
public MtTaskTestForSelectMname(MaterialType mt, List<Material> materiaList, String mname, String type) {
this.mt = mt;
this.materiaList = materiaList;
this.mname = mname;
this.type = type;
}
public void setInventoryList(List<Inventory> inventoryList) {
this.inventorys = inventoryList;
}
@Override
@ -2366,6 +2456,10 @@ public class MaterialServiceImpl implements MaterialService {
// 开启对应数量的线程
List<Material> materialList = new ArrayList<>();
List<Inventory> inventoryList = new ArrayList<>();
// 将物料打包成树结构对应结果
List<Object> objectList = new ArrayList<>();
if("1".equals(type)) {
for (int i = 0; i < materiaList.size(); i++) {
Material material = materiaList.get(i);
// 如果当前物料是当前物料类型下的物料
@ -2373,8 +2467,18 @@ public class MaterialServiceImpl implements MaterialService {
materialList.add(material);
}
}
// 将物料打包成树结构对应结果
List<Object> objectList = AddMaterialByTypeForSelectMname(materialList);
objectList = AddMaterialByTypeForSelectMname(materialList, null);
}else if("2".equals(type)){
for (int i = 0; i < inventorys.size(); i++) {
Inventory inventory = inventorys.get(i);
// 如果当前物料是当前物料类型下的物料
if (Long.compare(inventory.getMaterialTypeId(), mt.getOldId()) == 0) {
inventoryList.add(inventory);
}
}
objectList = AddMaterialByTypeForSelectMname(null,inventoryList);
}
// 封装成对应的结构
Map<String, Object> objectMap = InitTreeMenusForSelectName(mt, objectList);
return objectMap;
@ -2396,26 +2500,50 @@ public class MaterialServiceImpl implements MaterialService {
}
// 在类别后添加物料名称(通过物料名称搜索)
public List<Object> AddMaterialByTypeForSelectMname(List<Material> materialList) {
public List<Object> AddMaterialByTypeForSelectMname(List<Material> materialList,List<Inventory> inventoryList) {
List<Object> result = new ArrayList<>();
for (int i = 0; i < materialList.size(); i++) {
Material material = materialList.get(i);
if(materialList!=null) {
for (Material material : materialList) {
Map<String, Object> map = new HashMap<>();
String version = material.getVersion();
if (version == null) {
version = "";
}
String title = material.getMname() + ",规格型号: " + version;
String title = "";
title = material.getMname() + ",规格型号: " + version;
map.put("title", title);
map.put("id", material.getId());
result.add(map);
}
}else if(inventoryList != null){
for (Inventory inventory : inventoryList) {
Map<String, Object> map = new HashMap<>();
String version = inventory.getVersion();
if (version == null) {
version = "";
}
String title = "";
title = inventory.getMname() + ",规格型号: " + version+",库存数量:"+inventory.getUnit() +":"+inventory.getQuantity();
// 获取对应拆单库存处理记录
SplitInventory splitInventoryByIid = splitUnitMapper.findSplitInventoryByIid(inventory.getId());
if(splitInventoryByIid != null){
// 如果不为空
// 获取对应拆单信息
SplitInfo splitInfoById = splitUnitMapper.findSplitInfoById(splitInventoryByIid.getSid());
title +=","+splitInfoById.getNewUnit()+":"+splitInventoryByIid.getSaveQuantity();
}
map.put("title", title);
map.put("id", inventory.getId());
result.add(map);
}
}
return result;
}
/**
* 用于构造树结构通过物料名称搜索)
*
* @param list 树列表
* @return
*/

2
src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java

@ -1540,7 +1540,7 @@ public class QyWxOperationService {
detail_list_control_info_outNumber.put("title",detail_list_control_info_title_list_outNumber);
Map<String,String> detail_list_control_info_value_outNumber = new HashMap<>();
detail_list_control_info_value_outNumber.put("new_number",recordMin.getQuantity().toString());
detail_list_control_info_value_outNumber.put("new_number",recordMin.getQuantity().toString() + materialById.getQuantity());
detail_list_control_info_outNumber.put("value",detail_list_control_info_value_outNumber);
// 物料名称

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

@ -97,6 +97,8 @@ public class SplitUnitServiceImpl implements SplitUnitService {
// 定义库存拆单记录
SplitInventory splitInventory = null;
// 定义对应的库存记录
Inventory inventory = null;
// 用于存储拆单库存处理操作的数据
Map<String,Object> paramForInsertSplitInventory = new HashMap<>();
paramForInsertSplitInventory.put("sid",splitInfoForUnit.getId());
@ -104,14 +106,20 @@ public class SplitUnitServiceImpl implements SplitUnitService {
paramForInsertSplitInventory.put("iid",iid);
// 查询当前库存是否有该拆单的处理记录
splitInventory = splitUnitMapper.findSplitInventoryByIidAndSid(paramForInsertSplitInventory);
}else{
// 获取对应的库存记录
inventory = materialMapper.findInventoryById(iid);
}
else{
Map<String, Object> param = new HashMap<>();
param.put("depositoryId", map.get("depositoryId"));
param.put("mid", map.get("mid"));
// 判断该仓库中有无该物物料
List<Inventory> materialByCondition = materialMapper.findInventory(param);
if(materialByCondition.size() > 0){
paramForInsertSplitInventory.put("iid",materialByCondition.get(0).getId());
inventory = materialByCondition.get(0);
paramForInsertSplitInventory.put("iid",inventory.getId());
// 查询当前库存是否有该拆单的处理记录
splitInventory = splitUnitMapper.findSplitInventoryByIidAndSid(paramForInsertSplitInventory);
}
@ -135,15 +143,20 @@ public class SplitUnitServiceImpl implements SplitUnitService {
if(realQuantity > splitInfoForUnit.getQuantity()){
// 如果当前入库的数量大于拆单规定的进制数量
int quantity_in = realQuantity - (realQuantity % splitInfoForUnit.getQuantity());
int quantity_in = realQuantity - (realQuantity / splitInfoForUnit.getQuantity());
disposeQuantity += quantity_in;
realQuantity = realQuantity - quantity_in * splitInfoForUnit.getQuantity();
}
// 设置当前计量单位的库存
splitInventory.setSaveQuantity(realQuantity);
// 设置当前计量单位的入库数目
if(splitInventory.getInQuantity() != null){
splitInventory.setInQuantity((int) Math.round(splitInventory.getInQuantity() + quantity));
}else{
splitInventory.setInQuantity((int)Math.round(quantity));
}
splitUnitMapper.updateSplitInventory(splitInventory);
if(disposeQuantity != 0) {
@ -171,24 +184,11 @@ public class SplitUnitServiceImpl implements SplitUnitService {
result += depositoryRecordService.applicationInPlace(map);
paramForInsertSplitInventory.put("inQuantity",quantity);
paramForInsertSplitInventory.put("outQuantity",0);
paramForInsertSplitInventory.put("saveQuantity",saveQuantity);
paramForInsertSplitInventory.put("iid",map.get("newInMid"));
splitUnitMapper.addSplitInventory(paramForInsertSplitInventory);
}
} else if ("out".equals(type)) {
// 如果是出库操作
// 设置出库标志位
paramForInsertSplitInventory.put("outFlag",1);
if(splitInventory != null){
// 如果该物料已经有拆单的数据操作
}else{
// 如果没有数据操作
}
}
}
return result;
@ -343,4 +343,14 @@ public class SplitUnitServiceImpl implements SplitUnitService {
return splitUnitMapper.findSplitInfoByMidAndUnit(map);
}
/**
* 根据库存id获取对应拆单库存处理记录
* @param Iid 待查询库存id
* @return
*/
@Override
public SplitInventory findSplitInventoryByIid(Integer Iid) {
return splitUnitMapper.findSplitInventoryByIid(Iid);
}
}

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

@ -26,9 +26,7 @@
.lay-step{
display: none;
}
.layui-form-select .layui-input{
border-style: none;
}
</style>
<div class="layuimini-container">
@ -84,6 +82,15 @@
class="layui-input" lay-verify="number">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">计量单位:</label>
<div class="layui-input-block">
<select id="unit" name="unit">
<option value="-1" th:text="${materialById.getUnit()}"/>
<option th:each="splitInfo,iterStar:${materialById.getSplitInfoList()}" th:value="${splitInfo?.getNewUnit()}" th:text="${splitInfo?.getNewUnit()}" ></option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">仓库:</label>
<div class="layui-input-block">
@ -339,6 +346,31 @@
step.next('#stepForm');
});
form.on('select()', function (data) {
let elem = data.elem; //得到select原始DOM对象
let elemId = elem.id;
if(elemId.indexOf("unit") === 0){
// 如果进行选择的是计量单位
let id = elemId.split("unit")[1];
let mid = $("#mid"+id).val();
let unit = data.value;
let req = {};
req.newUnit = unit;
req.mid = mid;
$.ajax({
url:"/split/calcPriceForSplit",
data:JSON.stringify(req),
dataType:"json",
type:"post",
contentType: "application/json;charset=utf-8",
success:function (res) {
let data = res.data;
$("#price"+id).val(data);
}
});
}
});
})
</script>
</body>

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

@ -42,9 +42,6 @@
display: none;
}
.layui-form-select .layui-input {
border-style: none;
}
</style>
<div class="layuimini-container">
<div class="layuimini-main">
@ -121,6 +118,14 @@
class="layui-input" lay-verify="number" required>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">计量单位:</label>
<div class="layui-input-block">
<select id="unit" name="unit">
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
@ -546,6 +551,14 @@
id=` + "quantity" + NewIdNumber + ` class="layui-input" lay-verify="number">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">计量单位:</label>
<div class="layui-input-block">
<select id=`+"unit"+NewIdNumber+` name=`+"unit"+NewIdNumber+`>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
@ -773,6 +786,14 @@
var idNumber = materialId.name.split("mid")[1];
// 获取物料与条形码的对应关系
var materialAndBarCodeList = d["materialAndBarCodeList"];
var unit = $("#unit" + idNumber);
unit.empty();
$("#unit" + idNumber).append(new Option(d.unit, "-1"));
var unitList = d["splitInfoList"];
for (let i = 0; i < unitList.length; i++) {
$("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit));
}
form.render();
if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
@ -904,9 +925,9 @@
},
end: function () {
var mid = materialId.value;
if(mid != '') {
if(mid !== '') {
$.ajax({
url: "/material/findMatrialById?mid=" + mid,
url: "/material/findMatrialById?mid=" + mid+"&type=out",
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
@ -919,6 +940,14 @@
codeValue.value = code;
var materialAndBarCodeList = material["materialAndBarCodeList"];
var idNumber = materialId.name.split("mid")[1];
var unit = $("#unit" + idNumber);
unit.empty();
$("#unit" + idNumber).append(new Option(material.unit, "-1"));
var unitList = material["splitInfoList"];
for (let i = 0; i < unitList.length; i++) {
$("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit));
}
form.render();
if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
@ -1154,6 +1183,9 @@
var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
var barCodeChildren = parent.childNodes[9];
// 条形码条码
var barCodeItem = barCodeChildren.childNodes[3];
var req = {};
req.mname = data;
$.ajax({
@ -1175,7 +1207,46 @@
materialName.value = "";
return false;
} else {
var idNumber = materialId.name.split("mid")[1];
var material = d.data[0];
var unit = $("#unit" + idNumber);
unit.empty();
$("#unit" + idNumber).append(new Option(material.unit, "-1"));
var unitList = material["splitInfoList"];
if(unitList !== null && unitList != undefined){
for (let i = 0; i < unitList.length; i++) {
$("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit));
}
form.render();
}
var materialAndBarCodeList = material["materialAndBarCodeList"];
if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var id = barCodeInput.id;
$("#" + id).remove();
$("#barCode" + idNumber).empty();
var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) {
barCode.empty();
} else {
var barCodeSelect = `
<select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `>
</select>`;
$("#" + barCodeImg.id).before(barCodeSelect);
}
form.render();
$.each(materialAndBarCodeList, function (index, item) {
$("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
form.render();
} else {
var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) {
barCode.empty();
}
}
materialName.value = material.mname;
materialId.value = material.id;
codeValue.value = material.code;
@ -1223,10 +1294,19 @@
var data = d.data;
if (data !== null) {
materialName.value = data.mname;
materialId.value = data.id;
materialId.value = data.iid;
materialCode.value = data.mcode;
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
barCodeInput.value = result;
var idNumber = materialId.name.split("mid")[1];
var unit = $("#unit" + idNumber);
unit.empty();
$("#unit" + idNumber).append(new Option(data.unit, "-1"));
var unitList = data["splitInfoList"];
for (let i = 0; i < unitList.length; i++) {
$("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit));
}
form.render();
} else {
// 如果没有对应关系
layer.msg("对于编码:" + result + ",并未发现对应的物料", {
@ -1325,6 +1405,7 @@
MaterialQuantityIsTrue = function (obj) {
var id = obj.id.split("quantity")[1];
var mcode = $("#code" + id).val(); // 获取到当前输入的物料编码
var unit = $("#unit"+id).val();
if (mcode === "" || mcode === undefined || mcode === null) {
layer.msg("请输入物料的正确编码!", {icon: 0, time: 500}, function () {
$("#quantity" + id).val("")
@ -1335,6 +1416,7 @@
var req = {};
req.mcode = mcode;
req.quantity = val;
req.unit = unit;
$.ajax({
url: "/material/MaterialQuantityIsTrue",
type: "post",

4
src/main/resources/templates/pages/application/application-out_min-mobile.html

@ -70,7 +70,7 @@
lis.push('<div class="layui-col-md4 my-card-context">' +
'<h4> 物料名称:' + data[i].mname + '</h4>' +
'<h4> 物料编码:' + data[i].mcode + '</h4>' +
'<h4> 出库数量:' + data[i].quantity + '</h4>' +
'<h4> 出库数量:' + data[i].showQuantity + '</h4>' +
'<h4> 生产日期:' + producedDate + '</h4>' +
'<h4> 所处库位:' + data[i].pcode + '</h4>' +
'<div>备注:<h4> ' + data[i].applyRemark + '</h4></div>' +
@ -91,7 +91,7 @@
lis.push('<div class="layui-col-md4 my-card-context">' +
'<h4> 物料名称:' + data[i].mname + '</h4>' +
'<h4> 物料编码:' + data[i].mcode + '</h4>' +
'<h4> 出库数量:' + data[i].quantity + '</h4>' +
'<h4> 出库数量:' + data[i].showQuantity + '</h4>' +
'<h4> 处理人:' + data[i].checkerName + '</h4>' +
'<h4> 生产日期:' + producedDate+ '</h4>' +
'<h4> 所处库位:' + data[i].pcode + '</h4>' +

2
src/main/resources/templates/pages/application/application-out_min.html

@ -74,7 +74,7 @@
{field: 'producedDate', width: 120, title: '生产日期'},
{field: 'depositoryName', width: 120, title: '仓库名称'},
{field: 'pcode', width: 120, title: '库位编码'},
{field: 'quantity', width: 80, title: '数量', sort: true},
{field: 'showQuantity', width: 200, title: '数量'},
{field: 'applicantName', width: 150, title: '申请人'},
{field: 'applicantTime', width: 200, title: '申请时间', sort: true},
{field: 'applyRemark', width: 200, title: '备注'},

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

@ -48,6 +48,10 @@
<td>数量</td>
<td id="quantity" th:text="${record.getQuantity()}">数量</td>
</tr>
<tr>
<td>计量单位</td>
<td id="unit" th:text="${record.getUnit()}">单位</td>
</tr>
<tr>
<td>金额</td>
<td id="price" th:text="${record.getPrice()}">金额</td>

39
src/main/resources/templates/pages/application/application_multi.html

@ -11,6 +11,21 @@
</head>
<body>
<style>
td .layui-form-select {
margin-top: -10px;
margin-left: -15px;
}
/* .laytable-cell-1-0-7 {
overflow: visible !important;
}
*/
</style>
<div class="layuimini-container">
<div class="layuimini-main">
@ -27,6 +42,12 @@
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-subclass" lay-event="applicationIn">入库</a>
<a class="layui-btn layui-btn-xs data-count-edit" lay-event="applicationOut" >出库申请</a>
</script>
<script type="text/html" id="selectUnit" >
<select name="unit" lay-filter="selectUnit" id="unit" >
<option value="-1">{{d.unit}}</option>
</select>
</script>
</div>
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
@ -70,6 +91,9 @@
{field: 'depositoryName', width: 150, title: '仓库名称'},
{field: 'placeCode', width: 150, title: '库位编码'},
{field: 'quantity', width: 150, title: '数量',edit:'quantity'},
{field: 'unit', width: 150, title: '计量单位'},
// {rowspan: 2,title:'计量单位', width: 200, templet: '#selectUnit'},
{field: 'price', width: 150, title: '单价',edit:'price'},
{field: 'depositoryId', width: 150, title: '仓库编号'},
{field: 'applyRemark', width: 150, title: '备注说明',edit:'applyRemark'},
@ -80,9 +104,18 @@
limit: 10,
page: true,
skin: 'line',
done:function () {
$("[data-field='id']").css('display','none');
$("[data-field='depositoryId']").css('display','none');
done: function (res, curr, count) {
/* $.each(res['data'], function (i, j) {
let splitInfoList = j['splitInfoList'];
var unitItem = $("[lay-id='currentTableId'] tr:eq(" + (i+1) + ")").children()[7];
var selectItem = unitItem.childNodes[0].childNodes[2].childNodes[1];
for (let k = 0; k < splitInfoList.length; k++) {
$(selectItem).append('<dd lay-value='+splitInfoList[k].newUnit+' class="layui-this">'+splitInfoList[k].newUnit+'</dd>')
}
});*/
}
});

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

@ -139,8 +139,7 @@
{field: 'version', width: 200, title: '规格型号'},
{field: 'code', width: 200, title: '存货编码'},
{field: 'typeName', width: 200, title: '物料类型'},
{field: 'quantity', width: 200, title: '数量', sort: true},
{field: 'unit', width: 200, title: '计量单位'},
{field: 'showQuantity', width: 200, title: '数量'},
{field: 'depositoryName', width: 200, title: '仓库名称'},
{field: 'depositoryCode', width: 200, title: '仓库编码'},
{title: '所处库位', width: 200, templet: '#selectManager', align: "center"},

7
src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html

@ -54,7 +54,7 @@
var barCode = null;
layui.$(function () {
parent.parent.parent.wx.scanQRCode({
/* parent.parent.parent.wx.scanQRCode({
desc: 'scanQRCode desc',
needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,
scanType: ["barCode", "qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有
@ -73,7 +73,10 @@
}
});
});*/
var req = {};
req.qrCode = "1605487077042200576";
outboundLogic(req);
});

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

@ -157,7 +157,7 @@
if (data.state != '') {
req.state = data.state;
}
req.parentId = parentId
req.parentId = parentId;
//执行搜索重载
table.reload('currentTableId', {
@ -429,14 +429,14 @@
}
}
})
} else if (obj.event == 'manager') {
} else if (obj.event === 'manager') {
layer.open({
type: 2,
title: '仓管员信息',
shadeClose: true,
shade: false,
maxmin: true, //开启最大化最小化按钮
area: ['893px', '600px'],
area: ['70%', '70%'],
content: '/ManagerView?id=' + data.id
});
}

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

@ -92,6 +92,7 @@
<result column="mcode" property="mcode" jdbcType="VARCHAR" />
<result column="placeId" property="placeId" jdbcType="INTEGER" />
<result column="pass" property="pass" jdbcType="INTEGER" />
<result column="aormUnit" property="unit" jdbcType="VARCHAR"/>
</resultMap>
@ -141,7 +142,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,mcode,placeId,pass
depositoryManager,depositoryManagerPass,depositoryManagerTime,depositoryManagerMessage,aorstate,istransfer,mcode,placeId,pass,aormUnit
</sql>
<sql id="ApplicationOutRecordMinInfo">

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

@ -659,6 +659,21 @@
</select>
<select id="findInventoryByTypeIdsAndMname" resultMap="InventoryMap" parameterType="map">
SELECT
<include refid="allColumnsAndTypeNameOnViewByInventory" />
FROM findInventory
where
mname like concat('%',#{mname},'%')
and
mtid in
<foreach collection="list" index="index" item="item" open="("
separator="," close=")">
#{item}
</foreach>
</select>
<!-- 插入数据 -->
<insert id="insertMaterial" useGeneratedKeys="true" keyProperty="id">
INSERT INTO material (

6
target/classes/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml

@ -110,6 +110,12 @@
where si.sid = #{sid}
</select>
<select id="findSplitInventoryByIid" parameterType="int" resultMap="splitInventoryMap">
select
<include refid="splitInventoryAllColumns"/>
from `split_inventory` si
where si.iid = #{Iid}
</select>
<update id="updateSplitInfo">
update `split`

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

@ -26,9 +26,7 @@
.lay-step{
display: none;
}
.layui-form-select .layui-input{
border-style: none;
}
</style>
<div class="layuimini-container">
@ -84,6 +82,15 @@
class="layui-input" lay-verify="number">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">计量单位:</label>
<div class="layui-input-block">
<select id="unit" name="unit">
<option value="-1" th:text="${materialById.getUnit()}"/>
<option th:each="splitInfo,iterStar:${materialById.getSplitInfoList()}" th:value="${splitInfo?.getNewUnit()}" th:text="${splitInfo?.getNewUnit()}" ></option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">仓库:</label>
<div class="layui-input-block">
@ -339,6 +346,31 @@
step.next('#stepForm');
});
form.on('select()', function (data) {
let elem = data.elem; //得到select原始DOM对象
let elemId = elem.id;
if(elemId.indexOf("unit") === 0){
// 如果进行选择的是计量单位
let id = elemId.split("unit")[1];
let mid = $("#mid"+id).val();
let unit = data.value;
let req = {};
req.newUnit = unit;
req.mid = mid;
$.ajax({
url:"/split/calcPriceForSplit",
data:JSON.stringify(req),
dataType:"json",
type:"post",
contentType: "application/json;charset=utf-8",
success:function (res) {
let data = res.data;
$("#price"+id).val(data);
}
});
}
});
})
</script>
</body>

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

@ -42,9 +42,6 @@
display: none;
}
.layui-form-select .layui-input {
border-style: none;
}
</style>
<div class="layuimini-container">
<div class="layuimini-main">
@ -121,6 +118,14 @@
class="layui-input" lay-verify="number" required>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">计量单位:</label>
<div class="layui-input-block">
<select id="unit" name="unit">
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
@ -546,6 +551,14 @@
id=` + "quantity" + NewIdNumber + ` class="layui-input" lay-verify="number">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">计量单位:</label>
<div class="layui-input-block">
<select id=`+"unit"+NewIdNumber+` name=`+"unit"+NewIdNumber+`>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
@ -773,6 +786,14 @@
var idNumber = materialId.name.split("mid")[1];
// 获取物料与条形码的对应关系
var materialAndBarCodeList = d["materialAndBarCodeList"];
var unit = $("#unit" + idNumber);
unit.empty();
$("#unit" + idNumber).append(new Option(d.unit, "-1"));
var unitList = d["splitInfoList"];
for (let i = 0; i < unitList.length; i++) {
$("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit));
}
form.render();
if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
@ -904,9 +925,9 @@
},
end: function () {
var mid = materialId.value;
if(mid != '') {
if(mid !== '') {
$.ajax({
url: "/material/findMatrialById?mid=" + mid,
url: "/material/findMatrialById?mid=" + mid+"&type=out",
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
@ -919,6 +940,14 @@
codeValue.value = code;
var materialAndBarCodeList = material["materialAndBarCodeList"];
var idNumber = materialId.name.split("mid")[1];
var unit = $("#unit" + idNumber);
unit.empty();
$("#unit" + idNumber).append(new Option(material.unit, "-1"));
var unitList = material["splitInfoList"];
for (let i = 0; i < unitList.length; i++) {
$("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit));
}
form.render();
if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
@ -1154,6 +1183,9 @@
var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
var barCodeChildren = parent.childNodes[9];
// 条形码条码
var barCodeItem = barCodeChildren.childNodes[3];
var req = {};
req.mname = data;
$.ajax({
@ -1175,7 +1207,46 @@
materialName.value = "";
return false;
} else {
var idNumber = materialId.name.split("mid")[1];
var material = d.data[0];
var unit = $("#unit" + idNumber);
unit.empty();
$("#unit" + idNumber).append(new Option(material.unit, "-1"));
var unitList = material["splitInfoList"];
if(unitList !== null && unitList != undefined){
for (let i = 0; i < unitList.length; i++) {
$("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit));
}
form.render();
}
var materialAndBarCodeList = material["materialAndBarCodeList"];
if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var id = barCodeInput.id;
$("#" + id).remove();
$("#barCode" + idNumber).empty();
var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) {
barCode.empty();
} else {
var barCodeSelect = `
<select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `>
</select>`;
$("#" + barCodeImg.id).before(barCodeSelect);
}
form.render();
$.each(materialAndBarCodeList, function (index, item) {
$("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
form.render();
} else {
var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) {
barCode.empty();
}
}
materialName.value = material.mname;
materialId.value = material.id;
codeValue.value = material.code;
@ -1223,10 +1294,19 @@
var data = d.data;
if (data !== null) {
materialName.value = data.mname;
materialId.value = data.id;
materialId.value = data.iid;
materialCode.value = data.mcode;
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
barCodeInput.value = result;
var idNumber = materialId.name.split("mid")[1];
var unit = $("#unit" + idNumber);
unit.empty();
$("#unit" + idNumber).append(new Option(data.unit, "-1"));
var unitList = data["splitInfoList"];
for (let i = 0; i < unitList.length; i++) {
$("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit));
}
form.render();
} else {
// 如果没有对应关系
layer.msg("对于编码:" + result + ",并未发现对应的物料", {
@ -1325,6 +1405,7 @@
MaterialQuantityIsTrue = function (obj) {
var id = obj.id.split("quantity")[1];
var mcode = $("#code" + id).val(); // 获取到当前输入的物料编码
var unit = $("#unit"+id).val();
if (mcode === "" || mcode === undefined || mcode === null) {
layer.msg("请输入物料的正确编码!", {icon: 0, time: 500}, function () {
$("#quantity" + id).val("")
@ -1335,6 +1416,7 @@
var req = {};
req.mcode = mcode;
req.quantity = val;
req.unit = unit;
$.ajax({
url: "/material/MaterialQuantityIsTrue",
type: "post",

4
target/classes/templates/pages/application/application-out_min-mobile.html

@ -70,7 +70,7 @@
lis.push('<div class="layui-col-md4 my-card-context">' +
'<h4> 物料名称:' + data[i].mname + '</h4>' +
'<h4> 物料编码:' + data[i].mcode + '</h4>' +
'<h4> 出库数量:' + data[i].quantity + '</h4>' +
'<h4> 出库数量:' + data[i].showQuantity + '</h4>' +
'<h4> 生产日期:' + producedDate + '</h4>' +
'<h4> 所处库位:' + data[i].pcode + '</h4>' +
'<div>备注:<h4> ' + data[i].applyRemark + '</h4></div>' +
@ -91,7 +91,7 @@
lis.push('<div class="layui-col-md4 my-card-context">' +
'<h4> 物料名称:' + data[i].mname + '</h4>' +
'<h4> 物料编码:' + data[i].mcode + '</h4>' +
'<h4> 出库数量:' + data[i].quantity + '</h4>' +
'<h4> 出库数量:' + data[i].showQuantity + '</h4>' +
'<h4> 处理人:' + data[i].checkerName + '</h4>' +
'<h4> 生产日期:' + producedDate+ '</h4>' +
'<h4> 所处库位:' + data[i].pcode + '</h4>' +

2
target/classes/templates/pages/application/application-out_min.html

@ -74,7 +74,7 @@
{field: 'producedDate', width: 120, title: '生产日期'},
{field: 'depositoryName', width: 120, title: '仓库名称'},
{field: 'pcode', width: 120, title: '库位编码'},
{field: 'quantity', width: 80, title: '数量', sort: true},
{field: 'showQuantity', width: 200, title: '数量'},
{field: 'applicantName', width: 150, title: '申请人'},
{field: 'applicantTime', width: 200, title: '申请时间', sort: true},
{field: 'applyRemark', width: 200, title: '备注'},

4
target/classes/templates/pages/application/application-review.html

@ -48,6 +48,10 @@
<td>数量</td>
<td id="quantity" th:text="${record.getQuantity()}">数量</td>
</tr>
<tr>
<td>计量单位</td>
<td id="unit" th:text="${record.getUnit()}">单位</td>
</tr>
<tr>
<td>金额</td>
<td id="price" th:text="${record.getPrice()}">金额</td>

39
target/classes/templates/pages/application/application_multi.html

@ -11,6 +11,21 @@
</head>
<body>
<style>
td .layui-form-select {
margin-top: -10px;
margin-left: -15px;
}
/* .laytable-cell-1-0-7 {
overflow: visible !important;
}
*/
</style>
<div class="layuimini-container">
<div class="layuimini-main">
@ -27,6 +42,12 @@
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-subclass" lay-event="applicationIn">入库</a>
<a class="layui-btn layui-btn-xs data-count-edit" lay-event="applicationOut" >出库申请</a>
</script>
<script type="text/html" id="selectUnit" >
<select name="unit" lay-filter="selectUnit" id="unit" >
<option value="-1">{{d.unit}}</option>
</select>
</script>
</div>
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
@ -70,6 +91,9 @@
{field: 'depositoryName', width: 150, title: '仓库名称'},
{field: 'placeCode', width: 150, title: '库位编码'},
{field: 'quantity', width: 150, title: '数量',edit:'quantity'},
{field: 'unit', width: 150, title: '计量单位'},
// {rowspan: 2,title:'计量单位', width: 200, templet: '#selectUnit'},
{field: 'price', width: 150, title: '单价',edit:'price'},
{field: 'depositoryId', width: 150, title: '仓库编号'},
{field: 'applyRemark', width: 150, title: '备注说明',edit:'applyRemark'},
@ -80,9 +104,18 @@
limit: 10,
page: true,
skin: 'line',
done:function () {
$("[data-field='id']").css('display','none');
$("[data-field='depositoryId']").css('display','none');
done: function (res, curr, count) {
/* $.each(res['data'], function (i, j) {
let splitInfoList = j['splitInfoList'];
var unitItem = $("[lay-id='currentTableId'] tr:eq(" + (i+1) + ")").children()[7];
var selectItem = unitItem.childNodes[0].childNodes[2].childNodes[1];
for (let k = 0; k < splitInfoList.length; k++) {
$(selectItem).append('<dd lay-value='+splitInfoList[k].newUnit+' class="layui-this">'+splitInfoList[k].newUnit+'</dd>')
}
});*/
}
});

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

@ -139,8 +139,7 @@
{field: 'version', width: 200, title: '规格型号'},
{field: 'code', width: 200, title: '存货编码'},
{field: 'typeName', width: 200, title: '物料类型'},
{field: 'quantity', width: 200, title: '数量', sort: true},
{field: 'unit', width: 200, title: '计量单位'},
{field: 'showQuantity', width: 200, title: '数量'},
{field: 'depositoryName', width: 200, title: '仓库名称'},
{field: 'depositoryCode', width: 200, title: '仓库编码'},
{title: '所处库位', width: 200, templet: '#selectManager', align: "center"},

7
target/classes/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html

@ -54,7 +54,7 @@
var barCode = null;
layui.$(function () {
parent.parent.parent.wx.scanQRCode({
/* parent.parent.parent.wx.scanQRCode({
desc: 'scanQRCode desc',
needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,
scanType: ["barCode", "qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有
@ -73,7 +73,10 @@
}
});
});*/
var req = {};
req.qrCode = "1605487077042200576";
outboundLogic(req);
});

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

@ -157,7 +157,7 @@
if (data.state != '') {
req.state = data.state;
}
req.parentId = parentId
req.parentId = parentId;
//执行搜索重载
table.reload('currentTableId', {
@ -429,14 +429,14 @@
}
}
})
} else if (obj.event == 'manager') {
} else if (obj.event === 'manager') {
layer.open({
type: 2,
title: '仓管员信息',
shadeClose: true,
shade: false,
maxmin: true, //开启最大化最小化按钮
area: ['893px', '600px'],
area: ['70%', '70%'],
content: '/ManagerView?id=' + data.id
});
}

Loading…
Cancel
Save