package org.jeecg.modules.spare.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import org.jeecg.common.constant.CommonConstant;
|
import org.jeecg.common.system.api.ISysBaseAPI;
|
import org.jeecg.common.system.vo.DictModel;
|
import org.jeecg.modules.spare.entity.SparePart;
|
import org.jeecg.modules.spare.entity.SparePartPurchaseStorage;
|
import org.jeecg.modules.spare.entity.SparePartPurchaseStorageDetail;
|
import org.jeecg.modules.spare.entity.SparesPartInventory;
|
import org.jeecg.modules.spare.mapper.SparePartPurchaseStorageDetailMapper;
|
import org.jeecg.modules.spare.service.ISparePartPurchaseStorageDetailService;
|
import org.jeecg.modules.spare.service.ISparePartPurchaseStorageService;
|
import org.jeecg.modules.spare.service.ISparePartService;
|
import org.jeecg.modules.spare.service.ISparesPartInventoryService;
|
import org.jeecg.modules.spare.vo.SupplierVo;
|
import org.jeecg.modules.spare.vo.WarehouseAreaVo;
|
import org.jeecg.modules.spare.vo.WarehouseLocationVo;
|
import org.jeecg.modules.system.entity.SysRole;
|
import org.jeecg.modules.system.entity.SysUser;
|
import org.jeecg.modules.system.service.ISysDictService;
|
import org.jeecg.modules.system.service.ISysRoleService;
|
import org.jeecg.modules.system.service.ISysUserService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.annotation.Lazy;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.util.ArrayList;
|
import java.util.Calendar;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* @Description: mom_eam_spare_part_purchase_storage_deatil
|
* @Author: jeecg-boot
|
* @Date: 2023-06-27
|
* @Version: V1.0
|
*/
|
@Service
|
public class SparePartPurchaseStorageDetailServiceImpl extends ServiceImpl<SparePartPurchaseStorageDetailMapper, SparePartPurchaseStorageDetail> implements ISparePartPurchaseStorageDetailService {
|
|
|
@Autowired
|
private ISparePartPurchaseStorageService sparePartPurchaseStorageService;
|
|
@Autowired
|
private ISparesPartInventoryService sparesPartInventoryService;
|
|
@Autowired
|
@Lazy
|
private ISparePartService sparePartService;
|
|
@Autowired
|
@Lazy
|
private ISysDictService sysDictService;
|
|
@Autowired
|
@Lazy
|
private ISysRoleService sysRoleService;
|
|
@Autowired
|
@Lazy
|
private ISysUserService sysUserService;
|
|
@Autowired
|
@Lazy
|
private ISysBaseAPI sysBaseAPI;
|
|
@Override
|
public List<Map<String, Object>> getSparePartPurchaseStorageDeatilList(String sparePartPurchaseStorageId) {
|
List<Map<String, Object>> sparePartPurchaseStorageDeatilList = this.baseMapper.getSparePartPurchaseStorageDeatilList(sparePartPurchaseStorageId);
|
List<SupplierVo> suppliers = super.baseMapper.getSuppliers();
|
|
for (Map<String, Object> map : sparePartPurchaseStorageDeatilList) {
|
String warehouseId = (String)map.get("warehouseId");
|
String warehouseAreaId = (String) map.get("warehouseAreaId");
|
List<WarehouseAreaVo> warehouseAreas = super.baseMapper.getWarehouseAreas(warehouseId);
|
List<WarehouseLocationVo> warehouseLocations = super.baseMapper.getWarehouseLocations(warehouseId, warehouseAreaId);
|
map.put("suppliers",suppliers);
|
map.put("warehouseAreas",warehouseAreas);
|
map.put("warehouseLocations",warehouseLocations);
|
}
|
return sparePartPurchaseStorageDeatilList;
|
}
|
|
@Override
|
public IPage<Map<String, Object>> getSparePartPurchaseStorageDeatilsById(Integer pageNo, Integer pageSize, Map<String, Object> params) {
|
IPage<Map> pageData = new Page<Map>(pageNo, pageSize);
|
return super.getBaseMapper().getSparePartPurchaseStorageDeatilsById(pageData,params);
|
}
|
|
@Override
|
@Transactional(rollbackFor = { Exception.class })
|
public boolean sparePartStorage(SparePartPurchaseStorageDetail sparePartPurchaseStorageDetail) {
|
String sparePartPurchaseStorageId = sparePartPurchaseStorageDetail.getSparePartPurchaseStorageId();
|
SparePartPurchaseStorage sparePartPurchaseStorage = sparePartPurchaseStorageService.getById(sparePartPurchaseStorageId);
|
|
//1.修改明细行状态 未入库改为已入库 0未入库,1已入库
|
sparePartPurchaseStorageDetail.setStatus("1");
|
boolean b = super.updateById(sparePartPurchaseStorageDetail);
|
if(!b){
|
return b;
|
}
|
//2.创建入库记录
|
SparesPartInventory sparesPartInventory = new SparesPartInventory();
|
sparesPartInventory.setSparePartId(sparePartPurchaseStorageDetail.getSparePartId());
|
sparesPartInventory.setBatchNum(sparePartPurchaseStorageDetail.getBatchNum());
|
sparesPartInventory.setConstructorId(sparePartPurchaseStorageDetail.getConstructorId());
|
sparesPartInventory.setMainUnitId(sparePartPurchaseStorageDetail.getMainUnitId());
|
sparesPartInventory.setMainQuantity(sparePartPurchaseStorageDetail.getMainQuantity());
|
/* sparesPartInventory.setAuxiliaryUnitId(sparePartPurchaseStorageDetail.getAuxiliaryUnitId());
|
sparesPartInventory.setAuxiliaryQuantity(sparePartPurchaseStorageDetail.getAuxiliaryQuantity());*/
|
sparesPartInventory.setManufactureDate(sparePartPurchaseStorageDetail.getManufactureDate());
|
sparesPartInventory.setSupplierId(sparePartPurchaseStorageDetail.getSupplierId());
|
sparesPartInventory.setStatus("1");
|
sparesPartInventory.setDelFlag(0);
|
sparesPartInventory.setWarehouseId(sparePartPurchaseStorage.getWarehouseId());
|
sparesPartInventory.setWarehouseAreaId(sparePartPurchaseStorageDetail.getWarehouseAreaId());
|
sparesPartInventory.setWarehouseLocationId(sparePartPurchaseStorageDetail.getWarehouseLocationId());
|
boolean b1 = sparesPartInventoryService.save(sparesPartInventory);
|
if(!b1){
|
return b1;
|
}
|
|
//3.判断单据明细是否已全部入库 修改单据状态
|
List<SparePartPurchaseStorageDetail> storageDeatils = super.lambdaQuery()
|
.eq(SparePartPurchaseStorageDetail::getSparePartPurchaseStorageId, sparePartPurchaseStorageId)
|
.eq(SparePartPurchaseStorageDetail::getStatus, "0").eq(SparePartPurchaseStorageDetail::getDelFlag, 0)
|
.list();
|
if(storageDeatils.size()==0){
|
sparePartPurchaseStorage.setStatus("4");
|
sparePartPurchaseStorageService.updateById(sparePartPurchaseStorage);
|
}
|
|
//4.判断入库后库存是否低于安全库存或出现积压情况
|
List roleList = new ArrayList<>();
|
List<DictModel> dictModelList = sysDictService.getDictItems("warehouse_message");
|
for(DictModel dictModel : dictModelList){
|
roleList.add(dictModel.getText());
|
}
|
QueryWrapper<SysRole> queryWrapper = Wrappers.query();
|
queryWrapper.in("role_code", roleList);
|
List<SysRole> sysRoleList = sysRoleService.list(queryWrapper);
|
List<SysUser> sysUsers = new ArrayList<>();
|
for (SysRole sysRole : sysRoleList) {
|
sysUsers.addAll(sysUserService.getAllUsersByRoleId(sysRole.getId()));
|
}
|
double quantity = 0.0;
|
SparePart sparePart = sparePartService.getById(sparesPartInventory.getSparePartId());
|
List<SparesPartInventory> sparesPartInventoryList = sparesPartInventoryService.lambdaQuery().eq(SparesPartInventory::getSparePartId,sparesPartInventory.getSparePartId()).eq(SparesPartInventory::getDelFlag, CommonConstant.DEL_FLAG_0).list();
|
for(SparesPartInventory sparesPartInventory1 : sparesPartInventoryList){
|
quantity = quantity + sparesPartInventory1.getMainQuantity();
|
}
|
if(quantity < sparePart.getInventoryLowerLimit()){
|
String messageTitle;
|
String messageContent;
|
String sysTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
messageTitle = "系统消息:备件编码为 " + sparePart.getNum() + " 的备件库存量不足,请及时处理!";
|
messageContent = "系统消息:备件编码:" + sparePart.getNum() + " 的备件库存量已低于安全库存!" + "\n" + "消息时间:" + sysTime + "\n";
|
for (SysUser sysUser : sysUsers) {
|
sysBaseAPI.sendAnnouncement("admin", sysUser.getUsername(), messageTitle, messageContent, "备件库存量不足");
|
}
|
}else if(quantity > sparePart.getInventoryUpperLimit()){
|
String messageTitle;
|
String messageContent;
|
String sysTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
messageTitle = "系统消息:备件编码为 " + sparePart.getNum() + " 的备件出现积压情况,请及时处理!";
|
messageContent = "系统消息:备件编码为 " + sparePart.getNum() + " 的备件库存量已高于库存上限值,出现积压情况!" + "\n" + "消息时间:" + sysTime + "\n";
|
for (SysUser sysUser : sysUsers) {
|
sysBaseAPI.sendAnnouncement("admin", sysUser.getUsername(), messageTitle, messageContent, "备件积压");
|
}
|
}
|
return true;
|
}
|
|
@Override
|
public List<SupplierVo> getSuppliers() {
|
return super.baseMapper.getSuppliers();
|
}
|
|
@Override
|
public List<WarehouseAreaVo> getWarehouseAreas(String warehouseId) {
|
return super.baseMapper.getWarehouseAreas(warehouseId);
|
}
|
|
@Override
|
public List<WarehouseLocationVo> getWarehouseLocations(String warehouseId, String warehouseAreaId) {
|
return super.baseMapper.getWarehouseLocations(warehouseId,warehouseAreaId);
|
}
|
}
|