package com.example.erp.service.mm;
|
|
import cn.hutool.core.util.StrUtil;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.example.erp.common.Constants;
|
import com.example.erp.dto.mm.FinishedOperateLogDTO;
|
import com.example.erp.entity.mm.*;
|
import com.example.erp.entity.pp.*;
|
import com.example.erp.entity.sd.Delivery;
|
import com.example.erp.entity.sd.DeliveryDetail;
|
import com.example.erp.entity.sd.OrderDetail;
|
import com.example.erp.entity.sd.OrderProcessDetail;
|
import com.example.erp.entity.userInfo.Log;
|
import com.example.erp.entity.userInfo.SysError;
|
import com.example.erp.exception.ServiceException;
|
import com.example.erp.mapper.mm.BasicWarehouseTypeMapper;
|
import com.example.erp.mapper.mm.MaterialInventoryMapper;
|
import com.example.erp.mapper.mm.MaterialLogMapper;
|
import com.example.erp.mapper.mm.MaterialStoreMapper;
|
import com.example.erp.service.userInfo.LogService;
|
import com.example.erp.service.userInfo.SysErrorService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
import java.time.LocalDateTime;
|
import java.util.List;
|
import java.util.ArrayList;
|
|
import java.text.DecimalFormat;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDate;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
@Service
|
@DS("mm")
|
@Transactional(rollbackFor = Exception.class)
|
public class MaterialInventoryService {
|
@Autowired
|
MaterialInventoryMapper materialInventoryMapper;
|
@Autowired
|
MaterialStoreMapper materialStoreMapper;
|
@Autowired
|
BasicWarehouseTypeMapper basicWarehouseTypeMapper;
|
@Autowired
|
SysErrorService sysErrorService;
|
@Autowired
|
LogService logService;
|
@Autowired
|
MaterialLogMapper materialLogMapper;
|
|
public String saveMaterialOutbound(Map<String,Object> object) {
|
String saveState = "true";
|
//设置回滚点
|
Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
|
String materialOutboundId = "";
|
String oddNumber;
|
if (object.get("materialOutboundId") != null) {
|
materialOutboundId = object.get("materialOutboundId").toString();
|
}
|
Log log = new Log();
|
log.setOperatorId(object.get("userId").toString());
|
log.setOperator(object.get("userName").toString());
|
log.setContent(object.toString());
|
try {
|
MaterialOutbound materialOutbound = JSONObject.parseObject(JSONObject.toJSONString(object.get("title")), MaterialOutbound.class);
|
List<MaterialOutboundDetail> materialOutboundDetailList = JSONArray.parseArray(JSONObject.toJSONString(object.get("materialOutboundDetail")), MaterialOutboundDetail.class);
|
//查询出库单是否存在
|
Integer MaterialOutboundConut = materialInventoryMapper.getMaterialOutboundCount(materialOutboundId);
|
if (MaterialOutboundConut != 0) {
|
|
List<MaterialOutboundDetail> materialOutboundDetailLists = materialInventoryMapper.getIsNotMaterialOutboundDetail(materialOutboundId);
|
if (!materialOutboundDetailLists.isEmpty()) {
|
for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailLists) {
|
//还原物料库存数
|
materialInventoryMapper.updateMaterialInventoryAvailableInt(materialOutboundDetail.getInventoryId(), materialOutboundDetail.getOutboundQuantity());
|
if(materialOutboundDetail.getUseId()!=null){
|
//还原优化工程库存数
|
materialInventoryMapper.updateMaterialInventoryAvailableOptInt(materialOutboundDetail.getUseId(), materialOutboundDetail.getOutboundQuantity());
|
}/*else{
|
//还原物料库存数
|
materialInventoryMapper.updateMaterialInventoryAvailableInt(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity());
|
}*/
|
|
}
|
}
|
//删除材料出库明细的数据
|
materialInventoryMapper.deleteMaterialOutboundDetail(materialOutboundId);
|
materialInventoryMapper.updateMaterialOutbound(materialOutbound, materialOutboundId);
|
oddNumber = materialOutboundId;
|
log.setFunction("saveMaterialOutbound修改:"+oddNumber);
|
} else {
|
//获取单号
|
oddNumber = orderNumberSetting("出库");
|
//新增材料出库表数据
|
materialInventoryMapper.insertMaterialOutbound(materialOutbound, oddNumber);
|
log.setFunction("saveMaterialOutbound新增:"+oddNumber);
|
}
|
|
//获取对象集合循环进行新增修改
|
|
if (!materialOutboundDetailList.isEmpty()) {
|
for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailList) {
|
MaterialInventory materialInventory = materialInventoryMapper.getMaterialInventoryById(materialOutboundDetail.getId());
|
if(materialInventory.getAvailableQuantity()>=materialOutboundDetail.getOutboundQuantity()){
|
Integer materialOutboundDetailMaximum = materialInventoryMapper.getMaterialOutboundDetailMaximum(oddNumber);
|
//新增材料出库明细数据
|
materialInventoryMapper.insertMaterialOutboundDetail(materialOutboundDetail, oddNumber, materialOutboundDetailMaximum + 1);
|
//修改物料库存表出库数量
|
materialInventoryMapper.updateMaterialInventoryAvailableOut(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity());
|
if(materialOutboundDetail.getUseId()!=null){
|
//修改优化工程表出库数量
|
materialInventoryMapper.updateMaterialInventoryAvailableOptOut(materialOutboundDetail.getUseId(), materialOutboundDetail.getOutboundQuantity());
|
}/*else{
|
//修改物料库存表出库数量
|
materialInventoryMapper.updateMaterialInventoryAvailableOut(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity());
|
}*/
|
String json="";
|
MaterialStore materialStore=materialStoreMapper.getSelectMaterialStoreById(Long.valueOf(materialOutboundDetail.getMaterialCode()));
|
json=materialStore.getJson().substring(1, materialStore.getJson().length() - 1);
|
MaterialLog materialLog=new MaterialLog();
|
materialLog.setOperationOrderNumber(oddNumber);
|
materialLog.setOperationNumber(materialOutboundDetailMaximum + 1);
|
materialLog.setOperateType("物料出库");
|
materialLog.setMaterialCode(Long.valueOf(materialOutboundDetail.getMaterialCode()));
|
materialLog.setMaterialName(convertString(json,"\"name\""));
|
materialLog.setProducer(materialInventory.getProducer());
|
materialLog.setUnit(convertString(json,"\"unit\""));
|
materialLog.setWidth(convertDouble(json,"\"width\""));
|
materialLog.setHeight(convertDouble(json,"\"height\""));
|
materialLog.setThickness(convertDouble(json,"\"thickness\""));
|
materialLog.setQuantity(materialOutboundDetail.getOutboundQuantity());
|
materialLog.setSinglePieceArea(materialOutboundDetail.getSinglePieceArea());
|
materialLog.setInventoryId(materialOutboundDetail.getId());
|
materialLog.setInventoryArea(materialInventory.getInventoryArea());
|
materialLog.setRemarks(materialOutboundDetail.getRemarks());
|
materialLog.setOperator(object.get("userName").toString());
|
materialLog.setOperateTime(LocalDate.now());
|
materialLogMapper.insert(materialLog);
|
}else{
|
TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
|
return "false1";
|
}
|
|
|
|
|
}
|
|
}
|
logService.saveLog(log);
|
|
} catch (Exception e) {
|
TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
|
//将异常传入数据库
|
SysError sysError = new SysError();
|
sysError.setError(e+Arrays.toString(e.getStackTrace()));
|
sysError.setFunc("saveMaterialOutbound");
|
sysErrorService.insert(sysError);
|
saveState = "false1";
|
|
}
|
return saveState;
|
|
}
|
|
public String saveMaterialInventory(Map<String,Object> object) {
|
String saveState = "true";
|
//设置回滚点
|
Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
|
try {
|
Double singlePieceArea = 0.0;
|
Double totalArea = 0.0;
|
Long materialCode = 0L;
|
if (object.get("singlePieceArea") != null) {
|
singlePieceArea = Double.valueOf(object.get("singlePieceArea").toString());
|
}
|
if (object.get("totalArea") != null) {
|
totalArea = Double.valueOf(object.get("totalArea").toString());
|
}
|
if (object.get("materialCode") != null) {
|
materialCode = Long.valueOf(object.get("materialCode").toString());
|
}
|
Log log = new Log();
|
log.setOperatorId(object.get("userId").toString());
|
log.setOperator(object.get("userName").toString());
|
log.setContent(object.toString());
|
|
MaterialInventory materialInventory = JSONObject.parseObject(JSONObject.toJSONString(object.get("title")), MaterialInventory.class);
|
|
|
//查询物料是否存在
|
Integer MaterialInventoryCount=0;
|
if (materialInventory.getDateOfManufacture()!=null){
|
MaterialInventoryCount = materialInventoryMapper.getMaterialInventoryCount(materialCode,materialInventory.getDateOfManufacture());
|
}else{
|
MaterialInventoryCount = materialInventoryMapper.getMaterialInventoryCountNull(materialCode);
|
}
|
|
if(MaterialInventoryCount==1){
|
if (materialInventory.getDateOfManufacture()!=null){
|
materialInventoryMapper.updateMaterialInventory(materialCode,singlePieceArea,totalArea,materialInventory);
|
}else{
|
materialInventoryMapper.updateMaterialInventoryNull(materialCode,singlePieceArea,totalArea,materialInventory);
|
}
|
log.setFunction("saveMaterialInventory修改");
|
}else if(MaterialInventoryCount==0) {
|
materialInventoryMapper.insertMaterialInventory(materialCode,singlePieceArea,totalArea,materialInventory);
|
log.setFunction("saveMaterialInventory新增");
|
}else {
|
return "false1";
|
}
|
|
String json="";
|
MaterialStore materialStore=materialStoreMapper.getSelectMaterialStoreById(materialCode);
|
json=materialStore.getJson().substring(1, materialStore.getJson().length() - 1);
|
MaterialLog materialLog=new MaterialLog();
|
materialLog.setOperateType("物料新增");
|
materialLog.setMaterialCode(materialCode);
|
materialLog.setMaterialName(convertString(json,"\"name\""));
|
materialLog.setProducer(materialInventory.getProducer());
|
materialLog.setUnit(convertString(json,"\"unit\""));
|
materialLog.setWidth(convertDouble(json,"\"width\""));
|
materialLog.setHeight(convertDouble(json,"\"height\""));
|
materialLog.setThickness(convertDouble(json,"\"thickness\""));
|
materialLog.setQuantity(materialInventory.getInventoryQuantity());
|
materialLog.setSinglePieceArea(singlePieceArea);
|
materialLog.setInventoryId(materialInventory.getId());
|
materialLog.setInventoryArea(materialInventory.getInventoryArea());
|
materialLog.setRemarks(materialInventory.getRemarks());
|
materialLog.setOperator(object.get("userName").toString());
|
materialLog.setOperateTime(LocalDate.now());
|
materialLogMapper.insert(materialLog);
|
logService.saveLog(log);
|
} catch (Exception e) {
|
TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
|
//将异常传入数据库
|
SysError sysError = new SysError();
|
sysError.setError(e+Arrays.toString(e.getStackTrace()));
|
sysError.setFunc("saveMaterialInventory");
|
sysErrorService.insert(sysError);
|
saveState = "false";
|
|
}
|
return saveState;
|
|
}
|
|
public Map<String, Object> getSelectMaterialInventoryDate(Integer pageNum, Integer pageSize, List<String> selectDate, MaterialInventory materialInventory) {
|
Integer offset = (pageNum - 1) * pageSize;
|
String endDate = LocalDate.now().toString();
|
String startDate = LocalDate.now().minusDays(15).toString();
|
if(selectDate !=null && selectDate.size()==2){
|
if(!selectDate.get(0).isEmpty()){
|
startDate = selectDate.get(0);
|
}
|
if(!selectDate.get(1).isEmpty()){
|
endDate = selectDate.get(1);
|
}
|
}
|
Map<String, Object> map = new HashMap<>();
|
map.put("data", materialInventoryMapper.getSelectMaterialInventoryDate(offset, pageSize,startDate, endDate, materialInventory));
|
map.put("total", materialInventoryMapper.getSelectMaterialInventoryDatePageTotal(offset, pageSize,startDate, endDate, materialInventory));
|
List<String> list = new ArrayList<>();
|
list.add(startDate);
|
list.add(endDate);
|
map.put("selectDate",list);
|
return map;
|
}
|
|
public Map<String, Object> getSelectMaterialInventoryEngineeringDate(Integer pageNum, Integer pageSize, List<String> selectDate, MaterialInventory materialInventory) {
|
Integer offset = (pageNum - 1) * pageSize;
|
String endDate = LocalDate.now().toString();
|
String startDate = LocalDate.now().minusDays(15).toString();
|
if(selectDate !=null && selectDate.size()==2){
|
if(!selectDate.get(0).isEmpty()){
|
startDate = selectDate.get(0);
|
}
|
if(!selectDate.get(1).isEmpty()){
|
endDate = selectDate.get(1);
|
}
|
}
|
Map<String, Object> map = new HashMap<>();
|
map.put("data", materialInventoryMapper.getSelectMaterialInventoryEngineeringDate(offset, pageSize,startDate, endDate, materialInventory));
|
map.put("total", materialInventoryMapper.getSelectMaterialInventoryEngineeringDatePageTotal(offset, pageSize,startDate, endDate, materialInventory));
|
List<String> list = new ArrayList<>();
|
list.add(startDate);
|
list.add(endDate);
|
map.put("selectDate",list);
|
return map;
|
}
|
|
public Map<String, Object> getSelectMaterialInventory(Integer pageNum, Integer pageSize, MaterialInventory materialInventory) {
|
Integer offset = (pageNum - 1) * pageSize;
|
|
Map<String, Object> map = new HashMap<>();
|
List<Long> ids=new ArrayList<>();;
|
if(materialInventory.getStockId()!=null && !materialInventory.getStockId().isEmpty()){
|
List<String> result = StrUtil.split(materialInventory.getStockId(), '|');
|
ids=result.stream().map(Long::valueOf).collect(Collectors.toList());
|
}
|
map.put("data", materialInventoryMapper.getSelectMaterialInventory(offset, pageSize, materialInventory,ids));
|
map.put("total", materialInventoryMapper.getSelectMaterialInventoryPageTotal(offset, pageSize, materialInventory,ids));
|
return map;
|
}
|
|
public Map<String, Object> getSelectMaterialInventoryEngineering(Integer pageNum, Integer pageSize, OptimizeUse optimizeUse) {
|
Integer offset = (pageNum - 1) * pageSize;
|
Map<String, Object> map = new HashMap<>();
|
List<Long> ids=new ArrayList<>();;
|
if(optimizeUse.getRawStockCode()!=null && !optimizeUse.getRawStockCode().isEmpty()){
|
List<String> result = StrUtil.split(optimizeUse.getRawStockCode(), '|');
|
ids=result.stream().map(Long::valueOf).collect(Collectors.toList());
|
}
|
map.put("data", materialInventoryMapper.getSelectMaterialInventoryEngineering(offset, pageSize, optimizeUse,ids));
|
map.put("total", materialInventoryMapper.getSelectMaterialInventoryEngineeringPageTotal(offset, pageSize, optimizeUse,ids));
|
return map;
|
}
|
|
public Boolean deleteMaterialOutbound(Map<String,Object> object) {
|
boolean saveState = true;
|
//设置回滚点
|
Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
|
try {
|
String materialOutboundId = "";
|
if (object.get("materialOutboundId") != null) {
|
materialOutboundId = object.get("materialOutboundId").toString();
|
}
|
if(materialOutboundId!=null){
|
List<MaterialOutboundDetail> materialOutboundDetailLists = materialInventoryMapper.getIsNotMaterialOutboundDetail(materialOutboundId);
|
if (!materialOutboundDetailLists.isEmpty()) {
|
for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailLists) {
|
//还原物料库存数
|
materialInventoryMapper.updateMaterialInventoryAvailableInt(materialOutboundDetail.getInventoryId(), materialOutboundDetail.getOutboundQuantity());
|
|
}
|
}
|
|
materialInventoryMapper.deleteMaterialOutboundDetail(materialOutboundId);
|
materialInventoryMapper.deleteMaterialOutbound(materialOutboundId);
|
materialInventoryMapper.deleteMaterialLog(materialOutboundId);
|
}
|
Log log = new Log();
|
log.setContent(object.toString());
|
log.setOperatorId(object.get("userId").toString());
|
log.setOperator(object.get("userName").toString());
|
log.setFunction("deleteMaterialOutbound删除:"+materialOutboundId);
|
logService.saveLog(log);
|
|
|
} catch (Exception e) {
|
TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
|
//将异常传入数据库
|
SysError sysError = new SysError();
|
sysError.setError(e+Arrays.toString(e.getStackTrace()));
|
sysError.setFunc("deleteMaterialOutbound");
|
sysErrorService.insert(sysError);
|
saveState = false;
|
|
}
|
return saveState;
|
|
}
|
|
public Boolean deleteReturnToStorage(Map<String,Object> object) {
|
boolean saveState = true;
|
//设置回滚点
|
Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
|
try {
|
String returningId = "";
|
if (object.get("returningId") != null) {
|
returningId = object.get("returningId").toString();
|
}
|
if(returningId!=null){
|
|
List<ReturningWarehouseDetail> returningWarehouseDetailLists = materialInventoryMapper.getIsNotReturningWarehouseDetail(returningId);
|
if (!returningWarehouseDetailLists.isEmpty()) {
|
for (ReturningWarehouseDetail returningWarehouseDetail : returningWarehouseDetailLists) {
|
//还原物料库存数
|
materialInventoryMapper.updateMaterialInventoryAvailableOut(returningWarehouseDetail.getInventoryId(), returningWarehouseDetail.getReturnQuantity());
|
}
|
}
|
|
materialInventoryMapper.deleteReturningWarehouseDetail(returningId);
|
materialInventoryMapper.deleteReturningWarehouse(returningId);
|
materialInventoryMapper.deleteMaterialLog(returningId);
|
}
|
Log log = new Log();
|
log.setContent(object.toString());
|
log.setOperatorId(object.get("userId").toString());
|
log.setOperator(object.get("userName").toString());
|
log.setFunction("deleteReturnToStorage:"+returningId);
|
logService.saveLog(log);
|
|
|
} catch (Exception e) {
|
TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
|
//将异常传入数据库
|
SysError sysError = new SysError();
|
sysError.setError(e+Arrays.toString(e.getStackTrace()));
|
sysError.setFunc("deleteMaterialOutbound");
|
sysErrorService.insert(sysError);
|
saveState = false;
|
|
}
|
return saveState;
|
|
}
|
|
public Map<String, Object> getSelectMaterialOutboundDate(Integer pageNum, Integer pageSize, List<String> selectDate, MaterialOutbound materialOutbound) {
|
Integer offset = (pageNum - 1) * pageSize;
|
String endDate = LocalDate.now().toString();
|
String startDate = LocalDate.now().minusDays(15).toString();
|
if(selectDate !=null && selectDate.size()==2){
|
if(!selectDate.get(0).isEmpty()){
|
startDate = selectDate.get(0);
|
}
|
if(!selectDate.get(1).isEmpty()){
|
endDate = selectDate.get(1);
|
}
|
}
|
Map<String, Object> map = new HashMap<>();
|
map.put("data", materialInventoryMapper.getSelectMaterialOutboundDate(offset, pageSize,startDate, endDate, materialOutbound));
|
map.put("total", materialInventoryMapper.getSelectMaterialOutboundDatePageTotal(offset, pageSize,startDate, endDate, materialOutbound));
|
List<String> list = new ArrayList<>();
|
list.add(startDate);
|
list.add(endDate);
|
map.put("selectDate",list);
|
return map;
|
}
|
|
public Map<String, Object> getSelectMaterialOutbound(Integer pageNum, Integer pageSize, MaterialOutboundDetail materialOutboundDetail) {
|
Integer offset = (pageNum - 1) * pageSize;
|
Map<String, Object> map = new HashMap<>();
|
List<MaterialOutboundDetail> materialOutboundDetailList= materialInventoryMapper.SelectMaterialOutboundDetail(offset, pageSize, materialOutboundDetail);
|
if(materialOutboundDetailList.get(0).getUseId()==null){
|
map.put("materialOutbound", materialInventoryMapper.getSelectMaterialOutbound(offset, pageSize, materialOutboundDetail));
|
map.put("data", materialInventoryMapper.getSelectMaterialOutboundDetail(offset, pageSize, materialOutboundDetail));
|
map.put("total", materialInventoryMapper.getSelectMaterialOutboundDetailPageTotal(offset, pageSize, materialOutboundDetail));
|
}else{
|
map.put("materialOutbound", materialInventoryMapper.getSelectMaterialOutbound(offset, pageSize, materialOutboundDetail));
|
map.put("data", materialInventoryMapper.getSelectMaterialOutboundEngineering(offset, pageSize, materialOutboundDetail));
|
map.put("total", materialInventoryMapper.getSelectMaterialOutboundDetailPageTotal(offset, pageSize, materialOutboundDetail));
|
}
|
|
return map;
|
}
|
|
|
|
public Boolean updateMaterialOutboundToExamine(Map<String,Object> object) {
|
boolean saveState = true;
|
//设置回滚点
|
Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
|
try {
|
String materialOutboundId = "";
|
String reviewed = "";
|
int type =0;
|
if (object.get("materialOutboundId") != null) {
|
materialOutboundId = object.get("materialOutboundId").toString();
|
}
|
|
if (object.get("type") != null) {
|
type = Integer.parseInt(object.get("type").toString());
|
}
|
if (object.get("reviewed") != null) {
|
reviewed = object.get("reviewed").toString();
|
}
|
Log log = new Log();
|
log.setOperator(reviewed);
|
log.setContent(object.toString());
|
log.setFunction("updateMaterialOutboundToExamine:"+type);
|
logService.saveLog(log);
|
|
if (type==1){
|
List<MaterialOutboundDetail> materialOutboundDetailList = materialInventoryMapper.getIsNotMaterialOutboundDetail(materialOutboundId);
|
if (!materialOutboundDetailList.isEmpty()) {
|
for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailList) {
|
|
//修改物料库存数量
|
materialInventoryMapper.updateMaterialInventoryInventoryOut(materialOutboundDetail.getInventoryId(), materialOutboundDetail.getOutboundQuantity());
|
|
|
}
|
}
|
materialInventoryMapper.updateMaterialOutboundToExamine(materialOutboundId,type,reviewed);
|
}else{
|
List<MaterialOutboundDetail> materialOutboundDetailList = materialInventoryMapper.getIsNotMaterialOutboundDetail(materialOutboundId);
|
if (!materialOutboundDetailList.isEmpty()) {
|
for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailList) {
|
|
//修改物料库存数量
|
materialInventoryMapper.updateMaterialInventoryInventoryInt(materialOutboundDetail.getInventoryId(), materialOutboundDetail.getOutboundQuantity());
|
|
|
}
|
}
|
materialInventoryMapper.updateMaterialOutboundCounterExamination(materialOutboundId,type,reviewed);
|
}
|
|
} catch (Exception e) {
|
TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
|
//将异常传入数据库
|
SysError sysError = new SysError();
|
sysError.setError(e+Arrays.toString(e.getStackTrace()));
|
sysError.setFunc("updateMaterialOutboundToExamine");
|
sysErrorService.insert(sysError);
|
saveState = false;
|
|
}
|
return saveState;
|
|
|
|
}
|
|
public Boolean saveReturningWarehouse(Map<String,Object> object) {
|
boolean saveState = true;
|
//设置回滚点
|
Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
|
try {
|
String returningId = "";
|
String oddNumber;
|
if (object.get("returningId") != null) {
|
returningId = object.get("returningId").toString();
|
}
|
Log log = new Log();
|
log.setOperatorId(object.get("userId").toString());
|
log.setOperator(object.get("userName").toString());
|
log.setContent(object.toString());
|
|
ReturningWarehouse returningWarehouse = JSONObject.parseObject(JSONObject.toJSONString(object.get("title")), ReturningWarehouse.class);
|
List<ReturningWarehouseDetail> returningWarehouseDetailList = JSONArray.parseArray(JSONObject.toJSONString(object.get("returningWarehouseDetail")), ReturningWarehouseDetail.class);
|
//查询出库单是否存在
|
Integer ReturningWarehouseConut = materialInventoryMapper.getReturningWarehouseCount(returningId);
|
if (ReturningWarehouseConut != 0) {
|
|
List<ReturningWarehouseDetail> returningWarehouseDetailLists = materialInventoryMapper.getIsNotReturningWarehouseDetail(returningId);
|
if (!returningWarehouseDetailLists.isEmpty()) {
|
for (ReturningWarehouseDetail returningWarehouseDetail : returningWarehouseDetailLists) {
|
//还原物料库存数
|
materialInventoryMapper.updateMaterialInventoryAvailableOut(returningWarehouseDetail.getInventoryId(), returningWarehouseDetail.getReturnQuantity());
|
}
|
}
|
//删除材料出库明细的数据
|
materialInventoryMapper.deleteReturningWarehouseDetail(returningId);
|
oddNumber = returningId;
|
log.setFunction("saveReturningWarehouse修改:"+oddNumber);
|
} else {
|
//获取单号
|
oddNumber = orderNumberSetting("返库");
|
//新增材料出库表数据
|
materialInventoryMapper.insertReturningWarehouse(returningWarehouse, oddNumber);
|
log.setFunction("saveReturningWarehouse新增:"+oddNumber);
|
}
|
|
|
//获取对象集合循环进行新增修改
|
if (!returningWarehouseDetailList.isEmpty()) {
|
for (ReturningWarehouseDetail returningWarehouseDetail : returningWarehouseDetailList) {
|
|
Integer returningWarehouseDetailMaximum = materialInventoryMapper.getReturningWarehouseDetailMaximum(oddNumber);
|
//新增材料出库明细数据
|
materialInventoryMapper.insertReturningWarehouseDetail(returningWarehouseDetail, oddNumber, returningWarehouseDetailMaximum + 1);
|
|
double singlePieceArea=0.0;
|
double totalArea=0.0;
|
String json="";
|
MaterialStore materialStore=materialStoreMapper.getSelectMaterialStoreById(returningWarehouseDetail.getId());
|
json=materialStore.getJson().substring(1, materialStore.getJson().length() - 1);
|
|
|
double width= convertDouble(json,"\"width\"");
|
double height= convertDouble(json,"\"height\"");
|
DecimalFormat decimalFormat = new DecimalFormat("#0.00");
|
singlePieceArea= Double.parseDouble(decimalFormat.format(width * height / 100000));
|
totalArea= Double.parseDouble(decimalFormat.format(singlePieceArea * returningWarehouseDetail.getReturnQuantity()));
|
|
|
//查询物料是否存在
|
Integer MaterialInventoryCount=0;
|
if (returningWarehouseDetail.getDateOfManufacture()!=null){
|
MaterialInventoryCount = materialInventoryMapper.getMaterialInventoryCount(returningWarehouseDetail.getId(),returningWarehouseDetail.getDateOfManufacture());
|
}else{
|
MaterialInventoryCount = materialInventoryMapper.getMaterialInventoryCountNull(returningWarehouseDetail.getId());
|
}
|
|
|
if(MaterialInventoryCount>0){
|
if (returningWarehouseDetail.getDateOfManufacture()!=null){
|
materialInventoryMapper.updateMaterialInventoryReturning(returningWarehouseDetail.getId(),singlePieceArea,totalArea,returningWarehouseDetail);
|
}else{
|
materialInventoryMapper.updateMaterialInventoryReturningNull(returningWarehouseDetail.getId(),singlePieceArea,totalArea,returningWarehouseDetail);
|
}
|
|
}else {
|
materialInventoryMapper.insertMaterialInventoryReturning(returningWarehouseDetail.getId(),singlePieceArea,totalArea,returningWarehouseDetail);
|
}
|
|
//获取库存编号添加到返库明细表
|
List<MaterialInventory> MaterialInventoryId;
|
if (returningWarehouseDetail.getDateOfManufacture()!=null){
|
MaterialInventoryId = materialInventoryMapper.getMaterialInventoryCountId(returningWarehouseDetail.getId(),returningWarehouseDetail.getDateOfManufacture());
|
}else{
|
MaterialInventoryId = materialInventoryMapper.getMaterialInventoryCountNullId(returningWarehouseDetail.getId());
|
}
|
materialInventoryMapper.updateReturningWarehouseDetail(oddNumber, returningWarehouseDetailMaximum + 1,MaterialInventoryId.get(0).getId());
|
|
|
|
MaterialLog materialLog=new MaterialLog();
|
materialLog.setOperationOrderNumber(oddNumber);
|
materialLog.setOperationNumber(returningWarehouseDetailMaximum + 1);
|
materialLog.setOperateType("物料返库");
|
materialLog.setMaterialCode(returningWarehouseDetail.getId());
|
materialLog.setMaterialName(convertString(json,"\"name\""));
|
materialLog.setProducer(returningWarehouseDetail.getProducer());
|
materialLog.setUnit(convertString(json,"\"unit\""));
|
materialLog.setWidth(convertDouble(json,"\"width\""));
|
materialLog.setHeight(convertDouble(json,"\"height\""));
|
materialLog.setThickness(convertDouble(json,"\"thickness\""));
|
materialLog.setQuantity(returningWarehouseDetail.getReturnQuantity());
|
materialLog.setSinglePieceArea(singlePieceArea);
|
materialLog.setInventoryArea(returningWarehouseDetail.getInventoryArea());
|
materialLog.setRemarks(returningWarehouseDetail.getRemarks());
|
materialLog.setOperator(object.get("userName").toString());
|
materialLog.setOperateTime(LocalDate.now());
|
materialLogMapper.insert(materialLog);
|
|
}
|
|
}
|
logService.saveLog(log);
|
|
} catch (Exception e) {
|
TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
|
//将异常传入数据库
|
SysError sysError = new SysError();
|
sysError.setError(e+Arrays.toString(e.getStackTrace()));
|
sysError.setFunc("saveReturningWarehouse");
|
sysErrorService.insert(sysError);
|
saveState = false;
|
|
}
|
return saveState;
|
|
}
|
|
|
public Map<String, Object> getSelectReturningWarehouse(Integer pageNum, Integer pageSize, ReturningWarehouseDetail returningWarehouseDetail) {
|
Integer offset = (pageNum - 1) * pageSize;
|
Map<String, Object> map = new HashMap<>();
|
map.put("returningWarehouse", materialInventoryMapper.getSelectReturningWarehouse(offset, pageSize, returningWarehouseDetail));
|
map.put("data", materialInventoryMapper.getSelectReturningWarehouseDetail(offset, pageSize, returningWarehouseDetail));
|
map.put("total", materialInventoryMapper.getSelectReturningWarehouseDetailPageTotal(offset, pageSize, returningWarehouseDetail));
|
return map;
|
}
|
|
|
public Boolean updateReturningWarehouseToExamine(Map<String,Object> object) {
|
boolean saveState = true;
|
//设置回滚点
|
Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
|
try {
|
String returningId = "";
|
String reviewed = "";
|
int type =0;
|
if (object.get("returningId") != null) {
|
returningId = object.get("returningId").toString();
|
}
|
|
if (object.get("type") != null) {
|
type = Integer.parseInt(object.get("type").toString());
|
}
|
if (object.get("reviewed") != null) {
|
reviewed = object.get("reviewed").toString();
|
}
|
Log log = new Log();
|
log.setOperator(reviewed);
|
log.setContent(object.toString());
|
log.setFunction("updateReturningWarehouseToExamine:"+type);
|
logService.saveLog(log);
|
|
if (type==1){
|
List<ReturningWarehouseDetail> returningWarehouseDetailList = materialInventoryMapper.getIsNotReturningWarehouseDetail(returningId);
|
if (!returningWarehouseDetailList.isEmpty()) {
|
for (ReturningWarehouseDetail returningWarehouseDetail : returningWarehouseDetailList) {
|
//修改物料库存数量
|
materialInventoryMapper.updateMaterialInventoryInventoryInt(returningWarehouseDetail.getInventoryId(), returningWarehouseDetail.getReturnQuantity());
|
}
|
}
|
materialInventoryMapper.updateReturningWarehouseToExamine(returningId,type,reviewed);
|
}else{
|
List<ReturningWarehouseDetail> returningWarehouseDetailList = materialInventoryMapper.getIsNotReturningWarehouseDetail(returningId);
|
if (!returningWarehouseDetailList.isEmpty()) {
|
for (ReturningWarehouseDetail returningWarehouseDetail : returningWarehouseDetailList) {
|
//修改物料库存数量
|
materialInventoryMapper.updateMaterialInventoryInventoryOut(returningWarehouseDetail.getInventoryId(), returningWarehouseDetail.getReturnQuantity());
|
}
|
}
|
materialInventoryMapper.updateReturningWarehouseCounterExamination(returningId,type,reviewed);
|
}
|
|
} catch (Exception e) {
|
TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
|
//将异常传入数据库
|
SysError sysError = new SysError();
|
sysError.setError(e+Arrays.toString(e.getStackTrace()));
|
sysError.setFunc("updateReturningWarehouseToExamine");
|
sysErrorService.insert(sysError);
|
saveState = false;
|
|
}
|
return saveState;
|
|
|
|
}
|
|
|
public Map<String, Object> getSelectReturningWarehouseDate(Integer pageNum, Integer pageSize, List<String> selectDate, ReturningWarehouse returningWarehouse) {
|
Integer offset = (pageNum - 1) * pageSize;
|
String endDate = LocalDate.now().toString();
|
String startDate = LocalDate.now().minusDays(15).toString();
|
if(selectDate !=null && selectDate.size()==2){
|
if(!selectDate.get(0).isEmpty()){
|
startDate = selectDate.get(0);
|
}
|
if(!selectDate.get(1).isEmpty()){
|
endDate = selectDate.get(1);
|
}
|
}
|
Map<String, Object> map = new HashMap<>();
|
map.put("data", materialInventoryMapper.getSelectReturningWarehouseDate(offset, pageSize,startDate, endDate, returningWarehouse));
|
map.put("total", materialInventoryMapper.getSelectReturningWarehouseDatePageTotal(offset, pageSize,startDate, endDate, returningWarehouse));
|
List<String> list = new ArrayList<>();
|
list.add(startDate);
|
list.add(endDate);
|
map.put("selectDate",list);
|
return map;
|
}
|
|
public Map<String, Object> getSelectSurplusMaterialsDate(Integer pageNum, Integer pageSize, List<String> selectDate, SurplusMaterials surplusMaterials) {
|
Integer offset = (pageNum - 1) * pageSize;
|
String endDate = LocalDate.now().toString();
|
String startDate = LocalDate.now().minusDays(15).toString();
|
if(selectDate !=null && selectDate.size()==2){
|
if(!selectDate.get(0).isEmpty()){
|
startDate = selectDate.get(0);
|
}
|
if(!selectDate.get(1).isEmpty()){
|
endDate = selectDate.get(1);
|
}
|
}
|
Map<String, Object> map = new HashMap<>();
|
map.put("data", materialInventoryMapper.getSelectSurplusMaterialsDate(offset, pageSize,startDate, endDate, surplusMaterials));
|
map.put("total", materialInventoryMapper.getSelectSurplusMaterialsDatePageTotal(offset, pageSize,startDate, endDate, surplusMaterials));
|
List<String> list = new ArrayList<>();
|
list.add(startDate);
|
list.add(endDate);
|
map.put("selectDate",list);
|
return map;
|
}
|
|
public Boolean addSelectSurplusMaterialsDate(Map<String,Object> object) {
|
boolean saveState = true;
|
//设置回滚点
|
Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
|
|
String creator = "";
|
if (object.get("creator") != null) {
|
creator = object.get("creator").toString();
|
}
|
String type = "";
|
if (object.get("type") != null) {
|
type = object.get("type").toString();
|
}
|
int state = 0;
|
if (object.get("state") != null) {
|
state = Integer.parseInt(object.get("state").toString());
|
}
|
Log log = new Log();
|
log.setOperator(creator);
|
log.setContent(object.toString());
|
log.setFunction("addSelectSurplusMaterialsDate:"+state);
|
logService.saveLog(log);
|
|
if(state==1){
|
SurplusMaterials surplusMaterials = JSONObject.parseObject(JSONObject.toJSONString(object.get("surplusMaterials")), SurplusMaterials.class);
|
if(surplusMaterials!=null){
|
SurplusMaterials surplusMaterials1=materialInventoryMapper.selectSurplusMaterialsCount(surplusMaterials);
|
if(surplusMaterials1!=null){
|
materialInventoryMapper.updateSurplusMaterialsIntQuantity(surplusMaterials1);
|
materialInventoryMapper.insertSurplusMaterialsLog(surplusMaterials1,creator,type);
|
}else{
|
materialInventoryMapper.insertSurplusMaterials(surplusMaterials);
|
materialInventoryMapper.insertSurplusMaterialsLog(surplusMaterials,creator,type);
|
}
|
}
|
} else if (state==2) {
|
List<SurplusMaterials> surplusMaterialsList = JSONArray.parseArray(JSONObject.toJSONString(object.get("surplusMaterials")), SurplusMaterials.class);
|
if(!surplusMaterialsList.isEmpty()){
|
for(SurplusMaterials surplusMaterials:surplusMaterialsList){
|
materialInventoryMapper.updateSurplusMaterialsOutQuantity(surplusMaterials);
|
materialInventoryMapper.insertSurplusMaterialsLog(surplusMaterials,creator,type);
|
}
|
|
}
|
}
|
|
|
|
return saveState;
|
|
|
|
}
|
|
public Map<String, Object> printCreateOutbound(String materialOutboundId) {
|
Map<String, Object> map = new HashMap<>();
|
map.put("createOutbound", materialInventoryMapper.getPrintCreateOutbound(materialOutboundId));
|
map.put("createOutboundDetail", materialInventoryMapper.getPrintCreateOutboundDetail(materialOutboundId));
|
return map;
|
}
|
|
public Map<String, Object> getMaterialLogReport(String type,Integer pageNum, Integer pageSize, List<String> selectDate, MaterialLog materialLog) {
|
Integer offset = (pageNum-1)*pageSize;
|
String endDate = LocalDate.now().toString();
|
String startDate = LocalDate.now().minusDays(15).toString();
|
if(selectDate !=null && selectDate.size()==2){
|
if(!selectDate.get(0).isEmpty()){
|
startDate = selectDate.get(0);
|
}
|
if(!selectDate.get(1).isEmpty()){
|
endDate = selectDate.get(1);
|
}
|
}
|
|
Map<String, Object> map = new HashMap<>();
|
map.put("data", materialInventoryMapper.getMaterialLogReport(offset, pageSize,startDate, endDate, materialLog,type));
|
map.put("total", materialInventoryMapper.getMaterialLogReportTotal(offset, pageSize,startDate, endDate, materialLog,type));
|
List<String> list = new ArrayList<>();
|
list.add(startDate);
|
list.add(endDate);
|
map.put("selectDate",list);
|
return map;
|
}
|
|
public List<MaterialLog> exportMaterialLogReport(List<LocalDate> dates, String type) {
|
return materialInventoryMapper.exportMaterialLogReport(dates,type);
|
}
|
|
|
public Boolean deleteMaterialInventory(Map<String,Object> object) {
|
String creator = "";
|
if (object.get("creator") != null) {
|
creator = object.get("creator").toString();
|
}
|
String ids = "";
|
if (object.get("ids") != null) {
|
ids = object.get("ids").toString();
|
}
|
List<Long> id=new ArrayList<>();
|
if(!ids.isEmpty()){
|
List<String> result = StrUtil.split(ids, '|');
|
id=result.stream().map(Long::valueOf).collect(Collectors.toList());
|
}
|
materialInventoryMapper.deleteMaterialInventory(id);
|
Log log = new Log();
|
log.setOperator(creator);
|
log.setContent(object.toString());
|
log.setFunction("deleteMaterialInventory:"+ids);
|
logService.saveLog(log);
|
return true;
|
}
|
|
|
|
|
public String orderNumberSetting(String type) {
|
//根据类型自动生成不同的操作单号
|
String alias="";
|
Integer maximum=0;
|
if(Objects.equals(type, "出库")){
|
alias="CK";
|
maximum=materialInventoryMapper.getMaximum(type);
|
}
|
if(Objects.equals(type, "返库")){
|
alias="FK";
|
maximum=materialInventoryMapper.getMaximums(type);
|
}
|
//查询当天的最大数量
|
|
//设置两位不够补0
|
String formattedNumber = String.format("%02d", maximum+1);
|
//格式化当前日期
|
Date currentDate = new Date();
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd");
|
String formattedDate = dateFormat.format(currentDate);
|
String oddNumbers = alias+formattedDate+formattedNumber;
|
return oddNumbers;
|
}
|
|
|
public String convertString(String json,String string) {
|
Map<String, Object> map = new HashMap<>();
|
String[] keyValues = json.split(",");
|
for (String keyValue : keyValues) {
|
String[] pair = keyValue.split(":");
|
if (pair.length == 2) {
|
map.put(pair[0], pair[1]);
|
}
|
}
|
return map.get(string).toString().replace("\"","");
|
}
|
|
public Double convertDouble(String json,String string) {
|
Map<String, Object> map = new HashMap<>();
|
String[] keyValues = json.split(",");
|
for (String keyValue : keyValues) {
|
String[] pair = keyValue.split(":");
|
if (pair.length == 2) {
|
map.put(pair[0], pair[1]);
|
}
|
}
|
Double number=0.0;
|
if(map.get(string)!=null){
|
String[] widthStrings = map.get(string).toString().split("\\D+");
|
for (String numberString : widthStrings) {
|
if (!numberString.isEmpty()) {
|
number= Double.parseDouble(numberString);
|
}
|
}
|
}
|
|
|
return number;
|
}
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
public boolean mesMaterialOutbound(Map<String, Object> reportingWorkMap) {
|
//接收解析主附表信息
|
JSONObject reportingWorkJson = new JSONObject(reportingWorkMap);
|
String projectNo=reportingWorkJson.get("projectNo").toString();
|
Double width= Double.valueOf(reportingWorkJson.get("width").toString());
|
Double height= Double.valueOf(reportingWorkJson.get("height").toString());
|
Integer quantity= Integer.valueOf(reportingWorkJson.get("quantity").toString());
|
|
List<MaterialOutbound> materialOutboundList=materialInventoryMapper.getSelectMaterialOutboundProjectNo(projectNo);
|
OptimizeUse optimizeUses=materialInventoryMapper.getSelectOptimizeUses(projectNo,width,height);
|
List<MaterialOutboundDetail> materialOutboundDetailList=materialInventoryMapper.getSelectMaterialOutboundOptimizeUses(optimizeUses.getId());
|
List<MaterialOutboundDetail> materialOutboundDetailList1=materialInventoryMapper.getSelectMaterialOutboundOptimizeUses(null);
|
MaterialInventory materialInventory=materialInventoryMapper.getMaterialInventoryById(Long.valueOf(optimizeUses.getRawStockCode()));
|
if(materialOutboundList.size()==1){
|
if(materialOutboundDetailList.size()==1){
|
materialInventoryMapper.updateMaterialOutboundOptimizeUses(optimizeUses.getId());
|
materialInventoryMapper.updateMaterialInventoryAvailableInventoryOutMes(Long.valueOf(optimizeUses.getRawStockCode()),quantity);
|
}else{
|
materialInventoryMapper.insertMaterialOutboundDetailOptimizeUses(materialOutboundList.get(0).getMaterialOutboundId(),
|
materialOutboundDetailList1.size()+1,Long.valueOf(optimizeUses.getRawStockCode()),materialInventory.getMaterialCode(),materialInventory.getInventoryArea(),
|
optimizeUses.getId(),quantity,materialInventory.getSinglePieceArea(),materialInventory.getDateOfManufacture());
|
materialInventoryMapper.updateMaterialInventoryAvailableInventoryOutMes(Long.valueOf(optimizeUses.getRawStockCode()),quantity);
|
}
|
}else if(materialOutboundList.isEmpty()){
|
String oddNumber = orderNumberSetting("出库");
|
materialInventoryMapper.insertMaterialOutboundOptimizeUses(oddNumber,projectNo,reportingWorkJson.get("userName").toString());
|
materialInventoryMapper.insertMaterialOutboundDetailOptimizeUses(oddNumber, materialOutboundDetailList1.size()+1,Long.valueOf(optimizeUses.getRawStockCode()),materialInventory.getMaterialCode(),materialInventory.getInventoryArea(),
|
optimizeUses.getId(),quantity,materialInventory.getSinglePieceArea(),materialInventory.getDateOfManufacture());
|
materialInventoryMapper.updateMaterialInventoryAvailableInventoryOutMes(Long.valueOf(optimizeUses.getRawStockCode()),quantity);
|
}else{
|
return false;
|
}
|
|
//保存日志
|
Log log = new Log();
|
log.setContent(reportingWorkMap.toString());
|
log.setFunction("mesMaterialOutbound报工新增");
|
log.setOperatorId((String) reportingWorkJson.get("userId"));
|
log.setOperator((String) reportingWorkJson.get("userName"));
|
logService.saveLog(log);
|
return true;
|
}
|
|
|
|
|
}
|