Browse Source

修改bug以及库存盘点相关功能

lwx_dev
erdanergou 3 years ago
parent
commit
911ef3c18c
  1. 53
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  2. 90
      src/main/java/com/dreamchaser/depository_manage/controller/StockTakingController.java
  3. 24
      src/main/java/com/dreamchaser/depository_manage/entity/Inventory.java
  4. 13
      src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.java
  5. 43
      src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml
  6. 39
      src/main/java/com/dreamchaser/depository_manage/pojo/MaterialAndPlaceForView.java
  7. 9
      src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java
  8. 16
      src/main/java/com/dreamchaser/depository_manage/service/PlaceService.java
  9. 1
      src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java
  10. 82
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  11. 21
      src/main/java/com/dreamchaser/depository_manage/service/impl/PlaceServiceImpl.java
  12. 73
      src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java
  13. 3
      src/main/java/com/dreamchaser/depository_manage/utils/DateUtil.java
  14. 1175
      src/main/resources/templates/pages/stockTaking/stockTaking.html
  15. 9
      src/main/resources/templates/pages/stockTaking/stockTakingReview.html
  16. 43
      src/test/java/com/dreamchaser/depository_manage/TestForOther.java
  17. 43
      target/classes/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml
  18. 26
      target/classes/templates/pages/depository/table-stock.html
  19. 106
      target/classes/templates/pages/material/material-out.html
  20. 29
      target/classes/templates/pages/materialtype/materialType_view.html
  21. 1175
      target/classes/templates/pages/stockTaking/stockTaking.html
  22. 9
      target/classes/templates/pages/stockTaking/stockTakingReview.html

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

@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* @author Dreamchaser
@ -62,6 +63,30 @@ public class MaterialController {
}
/**
* 用于在盘点时获取到盘点位置的所有库存
*
* @param map
* @param request
* @return
*/
@GetMapping("/findInventoryForStockTaking")
public RestResponse findInventoryForStockTaking(@RequestParam Map<String, Object> map, HttpServletRequest request) {
Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId"));
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
if (Integer.compare(depositoryId, -1) == 0) {
return new RestResponse(null);
} else {
map.put("userTokenId",userToken.getId());
List<MaterialAndPlaceForView> inventoryForStockTaking = materialService.findInventoryForStockTaking(map);
return new RestResponse(inventoryForStockTaking,placeService.findPlaceAndMaterialCountByCondition(map),200);
}
}
/**
* 用于查询当前组合中物料的数量
*
@ -118,7 +143,7 @@ public class MaterialController {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
List<InventoryP> list = new ArrayList<>();
Integer total = 0;
if(Integer.compare(userToken.getMaindeparment(),361) != 0){
if (Integer.compare(userToken.getMaindeparment(), 361) != 0) {
// 查询当前用户管理的仓库
List<RoleAndDepository> depositoryAndRole = roleService.findDepositoryAndRole(userToken.getId());
// 查询当前用户部门拥有的仓库
@ -204,8 +229,7 @@ public class MaterialController {
) {
inventoryP.setSplitInfoList(splitUnitService.findSplitInfoByMid(inventoryP.getMid()));
}
}
else{
} else {
list = materialService.findInventory(map);
total = materialService.findInventoryCount(map);
}
@ -430,7 +454,7 @@ public class MaterialController {
depositoryIdList.add(rad.getDepositoryId());
}
}
for (Integer depositoryId :depositoryIdList
for (Integer depositoryId : depositoryIdList
) {
param.put("depositoryId", depositoryId);
List<InventoryP> inventoryPS = materialService.findInventory(param);
@ -458,8 +482,7 @@ public class MaterialController {
List<SplitInfo> splitInfoByMid = splitUnitService.findSplitInfoByMid(ip.getMid());
ip.setSplitInfoList(splitInfoByMid);
return new RestResponse(ip, 1, 200);
}
else if ("in".equals(type)) {
} else if ("in".equals(type)) {
param.put("code", code);
materialPByCondition = materialService.findMaterialPByCondition(param);
if (materialPByCondition.size() > 0) {
@ -513,7 +536,7 @@ public class MaterialController {
depositoryIdList.add(rad.getDepositoryId());
}
}
for (Integer depositoryId :depositoryIdList
for (Integer depositoryId : depositoryIdList
) {
map.put("depositoryId", depositoryId);
List<InventoryP> inventoryPS = materialService.findInventory(map);
@ -566,7 +589,7 @@ public class MaterialController {
}
try {
// 二维码保存信息
return RestResponse.CreateBarCode(qrCode,material.getMname());
return RestResponse.CreateBarCode(qrCode, material.getMname());
} catch (IOException e) {
return new RestResponse("err: " + e.getMessage(), 678, new StatusInfo("失败", "请联系开发人员"));
}
@ -897,12 +920,12 @@ public class MaterialController {
depositoryIdList.add(depository.getId());
}
for (RoleAndDepository depository : depositoryAndRole) {
if(!depositoryIdList.contains(depository.getDepositoryId())){
if (!depositoryIdList.contains(depository.getDepositoryId())) {
depositoryIdList.add(depository.getDepositoryId());
}
}
for (Integer depositoryId:depositoryIdList){
for (Integer depositoryId : depositoryIdList) {
param.put("mcode", mcode);
param.put("depositoryId", depositoryId);
// 获取当前仓库下是否有当前物料的库存
@ -1214,13 +1237,13 @@ public class MaterialController {
depositoryIdList.add(depository.getId());
}
for (RoleAndDepository depository : depositoryAndRole) {
if(!depositoryIdList.contains(depository.getDepositoryId())){
if (!depositoryIdList.contains(depository.getDepositoryId())) {
depositoryIdList.add(depository.getDepositoryId());
}
}
List<PlaceP> placePList = new ArrayList<>();
for (Integer depositoryId:depositoryIdList) {
for (Integer depositoryId : depositoryIdList) {
Boolean isExist = false;
Map<String, Object> param = new HashMap<>();
param.put("depositoryId", depositoryId);
@ -1310,8 +1333,8 @@ public class MaterialController {
if (isExist) {
materialList.add(mp);
}
} else {
// 如果当前条形码不存对应物料
} else {
barCodeListByNoMaterial.add(barCode);
}
}
@ -1516,7 +1539,7 @@ public class MaterialController {
// 获取当前物料
InventoryP materialP = inventory.get(0);
MaterialAndPlace pm = placeService.findPlaceAndMaterialByMidAndPid(0, materialP.getId());
if(pm!=null) {
if (pm != null) {
Map<String, Object> paramForCode = new HashMap<>();
paramForCode.put("mcode", materialP.getCode());
paramForCode.put("codeFlag", 1);
@ -1526,7 +1549,7 @@ public class MaterialController {
materialP.setMaterialAndBarCodeList(materialByBarCodeByCondition);
materialP.setBaseUnitQuantity(pm.getQuantity());
return new RestResponse(materialP, 1, 200);
}else {
} else {
return new RestResponse("", 0, 200);
}
}

90
src/main/java/com/dreamchaser/depository_manage/controller/StockTakingController.java

@ -3,6 +3,8 @@ package com.dreamchaser.depository_manage.controller;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.entity.Inventory;
import com.dreamchaser.depository_manage.entity.MaterialAndPlace;
import com.dreamchaser.depository_manage.entity.Place;
import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.pojo.RestResponse;
@ -14,6 +16,7 @@ import com.dreamchaser.depository_manage.service.PlaceService;
import com.dreamchaser.depository_manage.service.StockTakingService;
import com.dreamchaser.depository_manage.service.impl.QyWxOperationService;
import com.dreamchaser.depository_manage.utils.CrudUtil;
import com.dreamchaser.depository_manage.utils.DateUtil;
import com.dreamchaser.depository_manage.utils.Md5;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.springframework.beans.factory.annotation.Autowired;
@ -21,10 +24,7 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
@ -277,9 +277,8 @@ public class StockTakingController {
String minIds = (String) map.get("minIds");
String[] split = minIds.split(",");
List<Integer> minIdList = new ArrayList<>();
for (int i = 0; i < split.length; i++) {
String s = split[i];
if("".equals(s)){
for (String s : split) {
if ("".equals(s)) {
continue;
}
minIdList.add(ObjectFormatUtil.toInteger(s));
@ -290,4 +289,81 @@ public class StockTakingController {
Integer transfer = stockTakingService.stockTakingTransfer(map, userToken,crypt);
return CrudUtil.postHandle(transfer,minIdList.size());
}
@PostMapping("/temporaryStorageForTakingResult")
public void temporaryStorageForTakingResult(@RequestBody Map<String,Object> map,HttpServletRequest request){
// 获取当前盘点人
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
// 获取当前暂存的结果id
String key = "wms_stockTaking_" + userToken.getId() + "_"+ DateUtil.getNowTime()+"_"+map.get("id");
map.put("flagForSubmit","false");
redisTemplateForHash.opsForHash().putAll(key,map);
// 存储到今天的12点
redisTemplateForHash.expire(key,DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
}
@PostMapping("/submitStockTaking")
public RestResponse submitStockTaking(@RequestBody Map<String,Object> map,HttpServletRequest request){
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
String header = request.getHeader("user-agent");
String crypt = Md5.crypt(header);
// 获取所有有关当前key的键
String keyPatten = "wms_stockTaking_"+userToken.getId()+"_"+DateUtil.getNowTime()+"*";
Set<String> keys = redisTemplateForHash.keys(keyPatten);
int success = 0;
int size = 0;
if (keys != null && keys.size() > 0) {
size = keys.size();
// 定义用于插入的盘点记录
Map<String,Object> param = new HashMap<>();
// 如果存在
for (String key : keys) {
Boolean flagForSubmit = ObjectFormatUtil.toBoolean(redisTemplateForHash.opsForHash().get(key, "flagForSubmit"));
if(flagForSubmit != null && !flagForSubmit){
// 如果是第一次提交
// 获取盘点时的物料与库位的对应关系id
Integer id = ObjectFormatUtil.toInteger(redisTemplateForHash.opsForHash().get(key, "id"));
// 获取物料与库位的对应关系
MaterialAndPlace placeAndMaterial = placeService.findPlaceAndMaterialById(id);
Object unit = redisTemplateForHash.opsForHash().get(key, "unit");
String takingResult = (String) redisTemplateForHash.opsForHash().get(key, "takingResult");
Object number = redisTemplateForHash.opsForHash().get(key, "number");
Object oldInventory = redisTemplateForHash.opsForHash().get(key, "oldInventory");
Integer newInventory = ObjectFormatUtil.toInteger(oldInventory);
if ("Inventory_down".equals(takingResult)) {
// 如果盘亏
newInventory -= ObjectFormatUtil.toInteger(number);
}else if("Inventory_up".equals(takingResult)){
// 如果盘盈
newInventory += ObjectFormatUtil.toInteger(number);
}
param.put("newInventory", newInventory);
param.put("depositoryId",map.get("depositoryId"));
param.put("placeId",map.get("placeId"));
param.put("departmentManager",map.get("departmentManager"));
param.put("state",3);
param.put("departmentManagerState",3);
param.put("originator",userToken.getId());
param.put("mid", placeAndMaterial.getMid());
param.put("oldInventory", oldInventory);
param.put("takingResult", takingResult);
param.put("inventory", number);
param.put("unit",unit);
success += stockTakingService.insertStockTaking(param);
param.remove("id");
}
redisTemplateForHash.opsForHash().put(key,"flagForSubmit","true");
}
}
return CrudUtil.putHandle(success,size);
}
}

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

@ -1,5 +1,6 @@
package com.dreamchaser.depository_manage.entity;
import com.dreamchaser.depository_manage.pojo.MaterialAndPlaceForView;
import lombok.Data;
import java.util.List;
@ -150,4 +151,27 @@ public class Inventory {
* 该物料对应的拆单记录
*/
private List<SplitInfo> splitInfoList;
public Inventory() {
}
public Inventory(MaterialAndPlaceForView mpv) {
this.id = mpv.getIid();
this.mid = mpv.getMid();
this.mname = mpv.getMname();
this.code = mpv.getMcode();
this.materialTypeId = Long.valueOf(mpv.getType_id());
this.typeName = mpv.getTname();
this.version = mpv.getVersion();
this.quantity = mpv.getInventory();
}
public Inventory(MaterialAndPlace mp) {
this.id = mp.getMid();
this.quantity = mp.getQuantity();
}
}

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

@ -143,6 +143,19 @@ public interface PlaceMapper {
*/
List<MaterialAndPlaceForView> findPlaceAndMaterialByDidAndMid(Map<String,Object> map);
/**
* 根据条件获取对应库位存储的物料
* @param map 待查询条件
* @return
*/
List<MaterialAndPlaceForView> findPlaceAndMaterialByCondition(Map<String,Object> map);
/**
* 根据条件获取对应库位存储的物料数量
* @param map 待查询条件
* @return
*/
Integer findPlaceAndMaterialCountByCondition(Map<String,Object> map);
/**
* 根据当前库位编号及物料编号获取具体库位
*/

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

@ -115,6 +115,48 @@
and pstate != 3
</select>
<select id="findPlaceAndMaterialByCondition" parameterType="map" resultMap="MaterialAndPlaceForViewMap">
select
<include refid="allColumnsForView"/>
FROM materialandplaceinfo WHERE 1 = 1
<if test="depositoryId != null and depositoryId != ''">
and depository_id = #{depositoryId}
</if>
<if test="placeId != null and placeId != ''">
and pid = #{placeId}
</if>
<if test="mcode != null and mcode != ''">
and mcode = #{mcode}
</if>
<if test="mname != null and mname != ''">
and mname like CONCAT('%',#{mname},'%')
</if>
and pstate != 3
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select>
<select id="findPlaceAndMaterialCountByCondition" parameterType="map" resultType="int">
select
count(*)
FROM materialandplaceinfo WHERE 1 = 1
<if test="depositoryId != null and depositoryId != ''">
and depository_id = #{depositoryId}
</if>
<if test="placeId != null and placeId != ''">
and pid = #{placeId}
</if>
<if test="mcode != null and mcode != ''">
and mcode = #{mcode}
</if>
<if test="mname != null and mname != ''">
and mname like CONCAT('%',#{mname},'%')
</if>
and pstate != 3
</select>
<!-- 根据条件参数查询列表 -->
<select id="findPlaceByCondition" resultMap="placeMap" parameterType="map">
SELECT
@ -399,4 +441,5 @@
</select>
</mapper>

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

@ -1,7 +1,11 @@
package com.dreamchaser.depository_manage.pojo;
import com.dreamchaser.depository_manage.entity.SplitInfo;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class MaterialAndPlaceForView {
/**
@ -82,5 +86,40 @@ public class MaterialAndPlaceForView {
private String mname;
/**
* 盘点数量
*/
private Integer stockTakingQuantity;
/**
* 盘点结果
*/
private String takingResult;
/**
* 盈亏数量
*/
private String takingInventory;
/**
* 盘点结果用于展示
*/
private String takingResultString;
/**
* 盘点单位
*/
private String takingUnit;
/**
* 拆单单位
*/
private List<SplitInfo> splitInfoList;
/**
* 对应库存
*/
private Map<String,Integer> splitInventory;
}

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

@ -2,6 +2,7 @@ package com.dreamchaser.depository_manage.service;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.pojo.InventoryP;
import com.dreamchaser.depository_manage.pojo.MaterialAndPlaceForView;
import com.dreamchaser.depository_manage.pojo.MaterialP;
import java.util.List;
@ -409,4 +410,12 @@ public interface MaterialService {
* @return
*/
Integer findInventoryCountByDepository(List<Integer> depositoryIds);
/**
* 用于获取当前盘点位置的库存计量
* @param map 具体条件
* @return
*/
List<MaterialAndPlaceForView> findInventoryForStockTaking(Map<String,Object> map);
}

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

@ -124,6 +124,22 @@ public interface PlaceService {
*/
List<MaterialAndPlaceForView> findPlaceAndMaterialByDidAndMid(Integer did, Integer mid);
/**
* 根据条件获取对应库位存储的物料
* @param map 待查询条件
* @return
*/
List<MaterialAndPlaceForView> findPlaceAndMaterialByCondition(Map<String,Object> map);
/**
* 根据条件获取对应库位存储的物料数量
* @param map 待查询条件
* @return
*/
Integer findPlaceAndMaterialCountByCondition(Map<String,Object> map);
/**
* 根据当前库位编号及物料编号获取具体库位
*/

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

@ -113,7 +113,6 @@ public class ExcelServiceImpl implements ExcelService {
}
log.info("【导入Excel文件】删除临时文件成功,临时文件路径为:{}", filePath);
return ResultVoUtil.returnResultVo(200, readResult, "结果");
// return ResultVoUtil.success(excelVos);
}
/**

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

@ -14,6 +14,7 @@ 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.RedisOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -2591,6 +2592,87 @@ public class MaterialServiceImpl implements MaterialService {
return materialMapper.findInventoryCountByDepository(depositoryIds);
}
/**
* 用于获取当前盘点位置的库存计量
*
* @param map 具体条件
* @return
*/
@Override
public List<MaterialAndPlaceForView> findInventoryForStockTaking(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);
}
Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId"));
if (Integer.compare(placeId, 0) == 0) {
map.remove("placeId");
}
List<MaterialAndPlaceForView> placeAndMaterialByCondition = placeService.findPlaceAndMaterialByCondition(map);
for (MaterialAndPlaceForView mpv : placeAndMaterialByCondition
) {
// 获取其对应的拆单记录
List<SplitInfo> list = splitUnitMapper.findSplitInfoByMid(mpv.getMid());
// 用于获取对应的拆单记录库存
Map<String, Integer> splitInventory = new HashMap<>();
// 获取对应物料
MaterialAndPlace placeAndMaterial = placeService.findPlaceAndMaterialById(mpv.getId());
for (SplitInfo si : list
) {
// 获取当前拆单单位对应的库存数
int allInventoryForSplitInfo = splitUnitService.findAllInventoryForSplitInfo(-1, placeAndMaterial, si.getId(), 0, true);
splitInventory.put(si.getNewUnit(), allInventoryForSplitInfo);
}
// 创建默认单位的拆单信息
SplitInfo s = new SplitInfo();
s.setNewUnit(mpv.getUnit());
list.add(s);
splitInventory.put(mpv.getUnit(), mpv.getInventory());
// 设置拆单对应的库存
mpv.setSplitInventory(splitInventory);
// 设置拆单记录
mpv.setSplitInfoList(list);
// 定义存储在redis中的hash的key
String key = "wms_stockTaking_" + map.get("userTokenId") + "_" + DateUtil.getNowTime() + "_" + mpv.getId();
// 获取用于展示的盘点结果
String takingResultString = (String) redisTemplate.opsForHash().get(key, "takingResultString");
// 获取盘点结果
String takingResult = (String) redisTemplate.opsForHash().get(key, "takingResult");
// 获取盈亏数量
String number = (String) redisTemplate.opsForHash().get(key, "number");
// 获取盘点时的计量单位
String unit = (String) redisTemplate.opsForHash().get(key, "unit");
// 设置盘点单位
mpv.setTakingUnit(unit);
// 设置盈亏数量
if (number != null) {
mpv.setTakingInventory(number);
if ("Inventory_down".equals(takingResult)) {
// 如果盘亏
mpv.setStockTakingQuantity(splitInventory.get(unit) - ObjectFormatUtil.toInteger(number));
}else if("Inventory_up".equals(takingResult)){
// 如果盘盈
mpv.setStockTakingQuantity(splitInventory.get(unit) + ObjectFormatUtil.toInteger(number));
}else{
// 如果正常
mpv.setStockTakingQuantity(splitInventory.get(unit));
}
}
// 设置用于展示的盘点结果
mpv.setTakingResultString(takingResultString);
// 设置盘点结果
mpv.setTakingResult(takingResult);
}
return placeAndMaterialByCondition;
}
// 构造树形组件数据模板(通过物料名称搜索)
public Map<String, Object> InitTreeMenusForSelectName(MaterialType mt, List<Object> children) {
if (mt != null) {

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

@ -287,6 +287,27 @@ public class PlaceServiceImpl implements PlaceService {
return placeMapper.findPlaceAndMaterialByDidAndMid(map);
}
/**
* 根据条件获取对应库位存储的物料
* @param map 待查询条件
* @return
*/
@Override
public List<MaterialAndPlaceForView> findPlaceAndMaterialByCondition(Map<String,Object> map) {
return placeMapper.findPlaceAndMaterialByCondition(map);
}
/**
* 根据条件获取对应库位存储的物料数量
* @param map 待查询条件
* @return
*/
@Override
public Integer findPlaceAndMaterialCountByCondition(Map<String, Object> map) {
return placeMapper.findPlaceAndMaterialCountByCondition(map);
}
/**
* 根据当前库位编号及物料编号获取具体库位
*/

73
src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java

@ -362,14 +362,11 @@ public class StockTakingServiceImpl implements StockTakingService {
// 获取库位详情
Place placeById = placeMapper.findPlaceById(placeId);
Integer depositoryId = mainRecord.getDepositoryId();
// 获取仓库详情
Depository depositoryById = depositoryMapper.findDepositoryById(depositoryId);
// 获取所有子单
List<StockTakingChildP> minRecordList = stockTakingMapper.selectStockTakingChildByMainId(mainId);
for (int i = 0; i < minRecordList.size(); i++) {
for (StockTakingChildP minRecord : minRecordList) {
// 获取子单详情
StockTakingChildP minRecord = minRecordList.get(i);
// 获取盘点的物料详情
// 获取当前盘点结果
@ -393,20 +390,8 @@ public class StockTakingServiceImpl implements StockTakingService {
// 根据盘点结果重新计算物料的单价
// 数据库中的总额
Double amounts = (inventoryById.getAmounts() / 100);
Integer newInventory = minRecord.getNewInventory();
Double avgPrice = 0.0;
if (Integer.compare(newInventory, 0) != 0) {
// 如果新的库存不是0
// 新的均价
avgPrice = (amounts / newInventory) * 100;
BigDecimal bg = new BigDecimal(avgPrice);
avgPrice = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
inventoryById.setPrice(avgPrice);
// 获取当前库位上物料数量
Integer oldQuantity = inventoryById.getQuantity() - placeAndMaterialByMidAndPid.getQuantity();
@ -415,9 +400,9 @@ public class StockTakingServiceImpl implements StockTakingService {
// 用于计算新的库位数量
Integer newNumberForPlace = 0;
int newNumberForPlace = 0;
// 用于计算新的库位与物料对应关系的数量
Integer newNumberForMatrialAndPlace = 0;
int newNumberForMatrialAndPlace = 0;
if ("Inventory_up".equals(takingResult)) {
// 如果盘盈
@ -639,8 +624,6 @@ public class StockTakingServiceImpl implements StockTakingService {
Long producedDate = minRecord.getProducedDate();
// 数据库中的总额
double amounts = (inventoryById.getAmounts() / 100);
// 当前盘点数目
Integer newInventory = minRecord.getNewInventory();
@ -679,18 +662,8 @@ public class StockTakingServiceImpl implements StockTakingService {
inventoryById.setQuantity(inventoryById.getQuantity() - oldInventroy + newInventory);
}
// 定义平均价格
Double avgPrice = 0.0;
// 获取当前物料数目
Integer quantity = inventoryById.getQuantity();
if (quantity > 0) {
// 如果当前物料数目不为零
avgPrice = amounts / quantity;
BigDecimal bg = new BigDecimal(avgPrice);
avgPrice = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
// 更新物料单价
inventoryById.setPrice(avgPrice);
materialMapper.updateMaterialAndProducedDate(materialAndProducedDate);
} else {
@ -701,18 +674,6 @@ public class StockTakingServiceImpl implements StockTakingService {
// 获取新的物料数目
int quantity = oldQuantity + newInventory;
// 平均价格
Double avgPrice = 0.0;
if (Integer.compare(newInventory, 0) != 0) {
// 如果新的库存不是0
// 新的均价
avgPrice = (amounts / (quantity)) * 100;
BigDecimal bg = new BigDecimal(avgPrice);
avgPrice = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
// 更新物料单价
inventoryById.setPrice(avgPrice);
// 更新物料数目
inventoryById.setQuantity(quantity);
@ -798,7 +759,6 @@ public class StockTakingServiceImpl implements StockTakingService {
splitUnitMapper.updateSplitInventory(splitInventory);
if (splitInfo.getParentId() != null) {
SplitInfo parentSplitInfo = splitUnitMapper.findSplitInfoById(splitInfo.getParentId());
map.put("price", String.valueOf(inventoryById.getPrice() / 100));
map.put("quantity", String.valueOf(disposeQuantity));
splitUnitService.updateSplitInfoSaveQuantity(parentSplitInfo, disposeQuantity, placeAndMaterialByMidAndPid.getId(), map, inventory, splitInfo);
} else {
@ -1517,20 +1477,9 @@ public class StockTakingServiceImpl implements StockTakingService {
// 根据盘点结果重新计算物料的单价
// 数据库中的总额
Double amounts = (inventoryById.getAmounts() / 100);
Integer newInventory = minRecord.getNewInventory();
Double avgPrice = 0.0;
if (Integer.compare(newInventory, 0) != 0) {
// 如果新的库存不是0
// 新的均价
avgPrice = (amounts / newInventory) * 100;
BigDecimal bg = new BigDecimal(avgPrice);
avgPrice = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
inventoryById.setPrice(avgPrice);
Integer newInventory = minRecord.getNewInventory();
// 获取当前库位上物料数量
Integer oldQuantity = inventoryById.getQuantity() - placeAndMaterialByMidAndPid.getQuantity();
@ -2606,22 +2555,10 @@ public class StockTakingServiceImpl implements StockTakingService {
// 根据盘点结果重新计算物料的单价
// 数据库中的总额
Double amounts = (materialById.getAmounts() / 100);
Integer newInventory = minRecord.getNewInventory();
Double avgPrice = 0.0;
if (Integer.compare(newInventory, 0) != 0) {
// 如果新的库存不是0
// 新的均价
avgPrice = (amounts / newInventory) * 100;
BigDecimal bg = new BigDecimal(avgPrice);
avgPrice = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
Integer newInventory = minRecord.getNewInventory();
materialById.setPrice(avgPrice);
// 获取当前库位上物料数量
Integer oldQuantity = materialById.getQuantity() - placeAndMaterialByMidAndPid.getQuantity();

3
src/main/java/com/dreamchaser/depository_manage/utils/DateUtil.java

@ -170,8 +170,7 @@ public class DateUtil {
public static String getNowTime(){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
Calendar instance = Calendar.getInstance();
String format = simpleDateFormat.format(instance.getTime());
return format;
return simpleDateFormat.format(instance.getTime());
}
// 获取本周周一

1175
src/main/resources/templates/pages/stockTaking/stockTaking.html

File diff suppressed because it is too large

9
src/main/resources/templates/pages/stockTaking/stockTakingReview.html

@ -45,7 +45,7 @@
<div class="layui-fluid">
<div class="layui-card">
<form class="layui-form"
style="margin: 0 auto;max-width: 700px;padding-top: 100px; padding-bottom: 200px"
style="margin: 0 auto;max-width: 700px;"
lay-filter="form1" id="form1">
<div class="layui-card-body" id="takingHeader" style="padding-right: 0px">
<div class="layui-form-item">
@ -219,6 +219,10 @@
</div>
</fieldset>
</form>
</div>
</div>
<div id="review">
<div class="layui-form"
style="margin: 0 auto;max-width: 900px;padding-top: 40px;">
@ -249,9 +253,6 @@
</div>
</div>
</div>
</form>
</div>
</div>
</fieldset>
</div>
</div>

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

@ -7,10 +7,13 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
@RunWith(SpringRunner.class)
@SpringBootTest
@ -18,45 +21,15 @@ public class TestForOther {
@Autowired
DepositoryMapper depositoryMapper;
RedisTemplate<String, String> redisTemplate;
@Test
public void run() {
Depository depositoryById = depositoryMapper.findDepositoryById(9);
List<Integer> childForDepositoryByParent = findChildForDepositoryByParent(depositoryById);
System.out.println(childForDepositoryByParent);
}
// 根据id获取子类
public List<Integer> findChildForDepositoryByParent(Depository depository) {
List<Integer> result = new ArrayList<>();
result.add(depository.getId());
List<Integer> parentId = new ArrayList<>();
parentId.add(depository.getId());
List<Depository> depositoryAll = depositoryMapper.findDepositoryAll();
for (Depository d : depositoryAll) {
if (parentId.contains(d.getParentId())) {
parentId.add(d.getId());
result.add(d.getId());
}
}
return result;
}
/**
* 判断当前id是否在ids中
*
* @param parentList
* @param id
* @return
*/
public Boolean isTrueForParent(List<Integer> parentList, Integer id) {
for (Integer aLong : parentList) {
if (Integer.compare(aLong, id) == 0) {
return true;
Set<String> keys = redisTemplate.keys("wms_stockTaking_78_20230306*");
if (keys != null) {
for (String key : keys) {
System.out.println(key);
}
}
return false;
}
}

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

@ -115,6 +115,48 @@
and pstate != 3
</select>
<select id="findPlaceAndMaterialByCondition" parameterType="map" resultMap="MaterialAndPlaceForViewMap">
select
<include refid="allColumnsForView"/>
FROM materialandplaceinfo WHERE 1 = 1
<if test="depositoryId != null and depositoryId != ''">
and depository_id = #{depositoryId}
</if>
<if test="placeId != null and placeId != ''">
and pid = #{placeId}
</if>
<if test="mcode != null and mcode != ''">
and mcode = #{mcode}
</if>
<if test="mname != null and mname != ''">
and mname like CONCAT('%',#{mname},'%')
</if>
and pstate != 3
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select>
<select id="findPlaceAndMaterialCountByCondition" parameterType="map" resultType="int">
select
count(*)
FROM materialandplaceinfo WHERE 1 = 1
<if test="depositoryId != null and depositoryId != ''">
and depository_id = #{depositoryId}
</if>
<if test="placeId != null and placeId != ''">
and pid = #{placeId}
</if>
<if test="mcode != null and mcode != ''">
and mcode = #{mcode}
</if>
<if test="mname != null and mname != ''">
and mname like CONCAT('%',#{mname},'%')
</if>
and pstate != 3
</select>
<!-- 根据条件参数查询列表 -->
<select id="findPlaceByCondition" resultMap="placeMap" parameterType="map">
SELECT
@ -399,4 +441,5 @@
</select>
</mapper>

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

@ -30,19 +30,22 @@
<div class="layui-inline">
<label class="layui-form-label">物料名称</label>
<div class="layui-input-block">
<input type="text" name="mname" autocomplete="off" class="layui-input" placeholder="请填写物料名称">
<input type="text" name="mname" autocomplete="off" class="layui-input"
placeholder="请填写物料名称">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">存货编码</label>
<div class="layui-input-block">
<input type="text" name="code" autocomplete="off" class="layui-input" placeholder="请填写物料编码">
<input type="text" name="code" autocomplete="off" class="layui-input"
placeholder="请填写物料编码">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">型号</label>
<div class="layui-input-block">
<input type="text" class="layui-input" id="version" name="version" autocomplete="off" placeholder="请填写物料型号"/>
<input type="text" class="layui-input" id="version" name="version" autocomplete="off"
placeholder="请填写物料型号"/>
</div>
</div>
@ -92,6 +95,10 @@
function changeUnit() {
}
function bindTableToolbarFunction() {
}
layui.use(['form', 'table', 'upload'], function () {
var $ = layui.jquery,
form = layui.form,
@ -197,7 +204,7 @@
});
bindTableToolbarFunction();
}
});
@ -247,7 +254,7 @@
if (data.code !== '') {
req.mcode = data.code.trim();
}
if(data.version !== ''){
if (data.version !== '') {
req.version = data.version.trim();
}
//执行搜索重载
@ -332,8 +339,8 @@
layer.full(index);
});
return false;
}else if (obj.event === 'downloadFile') {
window.open("/download/inventoryImportDownload","_self");
} else if (obj.event === 'downloadFile') {
window.open("/download/inventoryImportDownload", "_self");
}
});
@ -376,7 +383,7 @@
// 获取当前showQuantity 的长度
let length = Object.getOwnPropertyNames(showQuantity).length;
if (length> 0) {
if (length > 0) {
if (clickNum < length) {
@ -451,6 +458,7 @@
};
//用于导入数据
function bindTableToolbarFunction() {
var upLoader = upload.render({
elem: "#u_fileUpload", // 绑定元素
url: '/excel/importInventory', // 上传接口
@ -497,6 +505,8 @@
})
}
})
}
});
</script>

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

@ -104,6 +104,9 @@
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
function bindTableToolbarFunction(){
}
layui.use(['form', 'table', 'upload'], function () {
var $ = layui.jquery,
form = layui.form,
@ -208,6 +211,7 @@
let col = {field: 'price', width: 150, title: '物料单价'};
cols.splice(6,0,col);
table.reload('currentTableId',{cols:[cols]});
bindTableToolbarFunction();
}
}
@ -217,6 +221,59 @@
});
//用于导入数据
function bindTableToolbarFunction() {
var upLoader = upload.render({
elem: "#u_fileUpload", // 绑定元素
url: '/excel/importExcelByMaterial', // 上传接口
accept: 'file', // 允许上传的格式,
before: function (obj) { //obj参数包含的信息,跟 choose回调完全一致,可参见上文。
layer.load(); //上传loading
},
exts: 'xls|xlsx|csv',
done: function (res) {
layer.closeAll('loading'); //关闭loading
//如果上传成功
var re = "";
for (let i = 0; i < res.data.errMsg.length; i++) {
var show = "<p style='color: #ff211e'>" + res.data.errMsg[i] + ":错误" + "</p>";
re += show
}
if (res.code === 200) {
for (let i = 0; i < res.data.dataList.length; i++) {
var mname = res.data.dataList[i]["mname"];
var code = res.data.dataList[i]["code"] == null || res.data.dataList[i]["code"] === undefined ? "" : res.data.dataList[i]["code"];
var version = res.data.dataList[i]["version"] == null || res.data.dataList[i]["version"] === undefined ? "" : res.data.dataList[i]["version"];
var texture = res.data.dataList[i]["texture"] == null || res.data.dataList[i]["texture"] === undefined ? "" : res.data.dataList[i]["texture"];
var unit = res.data.dataList[i]["unit"] == null || res.data.dataList[i]["unit"] === undefined ? "" : res.data.dataList[i]["unit"];
var typeId = res.data.dataList[i]["typeId"] == null || res.data.dataList[i]["typeId"] === undefined ? "" : res.data.dataList[i]["typeId"];
var show = "<p style='color: #00FF00'>" + mname + " " + version + " " + code + " " + texture + " " + unit + " " + typeId + " :成功" + "</p>";
re += show
}
layer.open({
type: 1,
skin: 'layui-layer-rim', //加上边框
area: ['500px', '500px'], //宽高
content: re
})
} else {
layer.msg(res.msg)
}
},
error: function () {
layer.closeAll('loading'); //关闭loading
var demoText = $('#demoText');
demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
demoText.find('.demo-reload').on('click', function () {
upLoader.upload()
})
}
});
}
// 监听搜索操作
@ -362,56 +419,7 @@
}
});
//用于导入数据
var upLoader = upload.render({
elem: "#u_fileUpload", // 绑定元素
url: '/excel/importExcelByMaterial', // 上传接口
accept: 'file', // 允许上传的格式,
before: function (obj) { //obj参数包含的信息,跟 choose回调完全一致,可参见上文。
layer.load(); //上传loading
},
exts: 'xls|xlsx|csv',
done: function (res) {
layer.closeAll('loading'); //关闭loading
//如果上传成功
var re = "";
for (let i = 0; i < res.data.errMsg.length; i++) {
var show = "<p style='color: #ff211e'>" + res.data.errMsg[i] + ":错误" + "</p>";
re += show
}
if (res.code === 200) {
for (let i = 0; i < res.data.dataList.length; i++) {
var mname = res.data.dataList[i]["mname"];
var code = res.data.dataList[i]["code"] == null || res.data.dataList[i]["code"] == undefined ? "" : res.data.dataList[i]["code"];
var version = res.data.dataList[i]["version"] == null || res.data.dataList[i]["version"] == undefined ? "" : res.data.dataList[i]["version"];
var texture = res.data.dataList[i]["texture"] == null || res.data.dataList[i]["texture"] == undefined ? "" : res.data.dataList[i]["texture"];
var unit = res.data.dataList[i]["unit"] == null || res.data.dataList[i]["unit"] == undefined ? "" : res.data.dataList[i]["unit"];
var typeId = res.data.dataList[i]["typeId"] == null || res.data.dataList[i]["typeId"] == undefined ? "" : res.data.dataList[i]["typeId"];
var show = "<p style='color: #00FF00'>" + mname + " " + version + " " + code + " " + texture + " " + unit + " " + typeId + " :成功" + "</p>";
re += show
}
layer.open({
type: 1,
skin: 'layui-layer-rim', //加上边框
area: ['500px', '500px'], //宽高
content: re
})
} else {
layer.msg(res.msg)
}
},
error: function () {
layer.closeAll('loading'); //关闭loading
var demoText = $('#demoText');
demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
demoText.find('.demo-reload').on('click', function () {
upLoader.upload()
})
}
});
//监听表格复选框选择
table.on('checkbox(currentTableFilter)', function (obj) {

29
target/classes/templates/pages/materialtype/materialType_view.html

@ -59,8 +59,12 @@
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add" th:style="'display:'+${display}"> 添加</button>
<button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete" th:style="'display:'+${display}"> 删除</button>
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"
th:style="'display:'+${display}"> 添加
</button>
<button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete"
th:style="'display:'+${display}"> 删除
</button>
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" id="u_fileUpload"
lay-event="import">导入数据
</button>
@ -73,8 +77,10 @@
<script type="text/html" id="currentTableBar">
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-subclass" lay-event="subclass">子类型</a>
<a class="layui-btn layui-btn-xs data-count-edit" lay-event="detail" th:style="'display:'+${display}">详情</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete" th:style="'display:'+${display}">删除</a>
<a class="layui-btn layui-btn-xs data-count-edit" lay-event="detail"
th:style="'display:'+${display}">详情</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete"
th:style="'display:'+${display}">删除</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" th:style="'display:'+${display}"
lay-event="realDelete">彻底删除</a>
</script>
@ -83,6 +89,9 @@
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
function bindTableToolbarFunction(){
}
layui.use(['form', 'table', 'upload'], function () {
var $ = layui.jquery,
form = layui.form,
@ -132,6 +141,7 @@
page: true,
skin: 'line',
done: function () {
bindTableToolbarFunction();
}
});
@ -175,8 +185,7 @@
$(window).on("resize", function () {
layer.full(index);
});
}
else if (obj.event === 'delete') { // 监听删除操作
} else if (obj.event === 'delete') { // 监听删除操作
var checkStatus = table.checkStatus('currentTableId')
, data = checkStatus.data;
var req = {};
@ -221,14 +230,14 @@
layer.msg("未选中记录,请确认!");
return false;
}
}
else if (obj.event === 'downloadFile') {
window.open("/download/materialTypeImportDownload","_self");
} else if (obj.event === 'downloadFile') {
window.open("/download/materialTypeImportDownload", "_self");
}
});
//用于导入数据
function bindTableToolbarFunction() {
var upLoader = upload.render({
elem: "#u_fileUpload", // 绑定元素
url: '/excel/importExcelByMT', // 上传接口
@ -270,6 +279,8 @@
})
}
});
}
//监听表格复选框选择
table.on('checkbox(currentTableFilter)', function (obj) {

1175
target/classes/templates/pages/stockTaking/stockTaking.html

File diff suppressed because it is too large

9
target/classes/templates/pages/stockTaking/stockTakingReview.html

@ -45,7 +45,7 @@
<div class="layui-fluid">
<div class="layui-card">
<form class="layui-form"
style="margin: 0 auto;max-width: 700px;padding-top: 100px; padding-bottom: 200px"
style="margin: 0 auto;max-width: 700px;"
lay-filter="form1" id="form1">
<div class="layui-card-body" id="takingHeader" style="padding-right: 0px">
<div class="layui-form-item">
@ -219,6 +219,10 @@
</div>
</fieldset>
</form>
</div>
</div>
<div id="review">
<div class="layui-form"
style="margin: 0 auto;max-width: 900px;padding-top: 40px;">
@ -249,9 +253,6 @@
</div>
</div>
</div>
</form>
</div>
</div>
</fieldset>
</div>
</div>

Loading…
Cancel
Save