package com.example.erp.service.mm;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
import com.example.erp.entity.mm.MaterialInventory;
|
import com.example.erp.entity.mm.MaterialOutbound;
|
import com.example.erp.entity.mm.MaterialOutboundDetail;
|
import com.example.erp.entity.mm.MaterialStore;
|
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.userInfo.SysError;
|
import com.example.erp.mapper.mm.BasicWarehouseTypeMapper;
|
import com.example.erp.mapper.mm.MaterialInventoryMapper;
|
import com.example.erp.mapper.mm.MaterialStoreMapper;
|
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.text.SimpleDateFormat;
|
import java.time.LocalDate;
|
import java.util.*;
|
|
@Service
|
@DS("mm")
|
@Transactional(rollbackFor = Exception.class)
|
public class MaterialInventoryService {
|
@Autowired
|
MaterialInventoryMapper materialInventoryMapper;
|
@Autowired
|
BasicWarehouseTypeMapper basicWarehouseTypeMapper;
|
@Autowired
|
SysErrorService sysErrorService;
|
|
public Boolean saveMaterialOutbound(Map<String,Object> object) {
|
boolean saveState = true;
|
//设置回滚点
|
Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
|
String materialOutboundId = "";
|
String oddNumber;
|
if (object.get("materialOutboundId") != null) {
|
materialOutboundId = object.get("materialOutboundId").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.getId(), materialOutboundDetail.getOutboundQuantity());
|
}
|
}
|
//删除材料出库明细的数据
|
materialInventoryMapper.deleteMaterialOutboundDetail(materialOutboundId);
|
oddNumber = materialOutboundId;
|
} else {
|
//获取单号
|
oddNumber = orderNumberSetting("出库");
|
//新增材料出库表数据
|
materialInventoryMapper.insertMaterialInventoryMapper(materialOutbound, oddNumber);
|
}
|
|
//获取对象集合循环进行新增修改
|
|
if (!materialOutboundDetailList.isEmpty()) {
|
for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailList) {
|
|
Integer materialOutboundDetailMaximum = materialInventoryMapper.getMaterialOutboundDetailMaximum(oddNumber);
|
//新增材料出库明细数据
|
materialInventoryMapper.insertMaterialOutboundDetail(materialOutboundDetail, oddNumber, materialOutboundDetailMaximum + 1);
|
//修改物料库存表出库数量
|
System.out.println(materialOutboundDetail.getInventoryId());
|
materialInventoryMapper.updateMaterialInventoryAvailableOut(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity());
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
|
//将异常传入数据库
|
SysError sysError = new SysError();
|
sysError.setError(e.toString());
|
sysError.setFunc("saveOrder");
|
sysErrorService.insert(sysError);
|
saveState = false;
|
|
}
|
return saveState;
|
|
}
|
|
public Boolean saveMaterialInventory(Map<String,Object> object) {
|
boolean saveState = true;
|
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());
|
}
|
|
MaterialInventory materialInventory = JSONObject.parseObject(JSONObject.toJSONString(object.get("title")), MaterialInventory.class);
|
|
//查询物料是否存在
|
Integer MaterialInventoryCount = materialInventoryMapper.getMaterialInventoryCount(materialCode,materialInventory.getDateOfManufacture());
|
|
if(MaterialInventoryCount>0){
|
materialInventoryMapper.updateMaterialInventory(materialCode,singlePieceArea,totalArea,materialInventory);
|
}else {
|
materialInventoryMapper.insertMaterialInventory(materialCode,singlePieceArea,totalArea,materialInventory);
|
}
|
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> getSelectMaterialInventory(Integer pageNum, Integer pageSize, MaterialInventory materialInventory) {
|
Integer offset = (pageNum - 1) * pageSize;
|
|
Map<String, Object> map = new HashMap<>();
|
map.put("data", materialInventoryMapper.getSelectMaterialInventory(offset, pageSize, materialInventory));
|
map.put("total", materialInventoryMapper.getSelectMaterialInventoryPageTotal(offset, pageSize, materialInventory));
|
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){
|
materialInventoryMapper.deleteMaterialOutboundDetail(materialOutboundId);
|
materialInventoryMapper.deleteMaterialOutbound(materialOutboundId);
|
}
|
|
|
|
} catch (Exception e) {
|
TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
|
//将异常传入数据库
|
SysError sysError = new SysError();
|
sysError.setError(e.toString());
|
sysError.setFunc("saveOrder");
|
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<>();
|
System.out.println("数据"+materialOutboundDetail);
|
map.put("materialOutbound", materialInventoryMapper.getSelectMaterialOutbound(offset, pageSize, materialOutboundDetail));
|
map.put("data", materialInventoryMapper.getSelectMaterialOutboundDetail(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();
|
}
|
|
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.toString());
|
sysError.setFunc("saveOrder");
|
sysErrorService.insert(sysError);
|
saveState = false;
|
|
}
|
return saveState;
|
|
|
|
}
|
|
|
public String orderNumberSetting(String type) {
|
//根据类型自动生成不同的操作单号
|
String alias="";
|
if(Objects.equals(type, "出库")){
|
alias="CK";
|
}
|
//查询当天的最大数量
|
Integer maximum=materialInventoryMapper.getmaximum(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;
|
}
|
|
|
|
|
|
|
|
|
}
|