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 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> getSparePartPurchaseStorageDeatilList(String sparePartPurchaseStorageId) { List> sparePartPurchaseStorageDeatilList = this.baseMapper.getSparePartPurchaseStorageDeatilList(sparePartPurchaseStorageId); List suppliers = super.baseMapper.getSuppliers(); for (Map map : sparePartPurchaseStorageDeatilList) { String warehouseId = (String)map.get("warehouseId"); String warehouseAreaId = (String) map.get("warehouseAreaId"); List warehouseAreas = super.baseMapper.getWarehouseAreas(warehouseId); List warehouseLocations = super.baseMapper.getWarehouseLocations(warehouseId, warehouseAreaId); map.put("suppliers",suppliers); map.put("warehouseAreas",warehouseAreas); map.put("warehouseLocations",warehouseLocations); } return sparePartPurchaseStorageDeatilList; } @Override public IPage> getSparePartPurchaseStorageDeatilsById(Integer pageNo, Integer pageSize, Map params) { IPage pageData = new Page(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 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 dictModelList = sysDictService.getDictItems("warehouse_message"); for(DictModel dictModel : dictModelList){ roleList.add(dictModel.getText()); } QueryWrapper queryWrapper = Wrappers.query(); queryWrapper.in("role_code", roleList); List sysRoleList = sysRoleService.list(queryWrapper); List sysUsers = new ArrayList<>(); for (SysRole sysRole : sysRoleList) { sysUsers.addAll(sysUserService.getAllUsersByRoleId(sysRole.getId())); } double quantity = 0.0; SparePart sparePart = sparePartService.getById(sparesPartInventory.getSparePartId()); List 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 getSuppliers() { return super.baseMapper.getSuppliers(); } @Override public List getWarehouseAreas(String warehouseId) { return super.baseMapper.getWarehouseAreas(warehouseId); } @Override public List getWarehouseLocations(String warehouseId, String warehouseAreaId) { return super.baseMapper.getWarehouseLocations(warehouseId,warehouseAreaId); } }