package com.yuanchu.mom.service.impl; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yuanchu.mom.dto.HistoryDto; import com.yuanchu.mom.dto.WarehouseCellAndSampleDto; import com.yuanchu.mom.dto.WarehouseDto; import com.yuanchu.mom.exception.ErrorException; import com.yuanchu.mom.mapper.*; import com.yuanchu.mom.pojo.*; import com.yuanchu.mom.service.WarehouseCellService; import com.yuanchu.mom.service.WarehouseService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @author Administrator * @description 针对表【ins_sample_user(样品负责人记录)】的数据库操作Service实现 * @createDate 2024-03-14 17:12:02 */ @Service @AllArgsConstructor public class WarehouseServiceImpl extends ServiceImpl implements WarehouseService { private WarehouseMapper warehouseMapper; private WarehouseShelfMapper warehouseShelfMapper; private WarehouseCellMapper warehouseCellMapper; private WarehouseHistoryMapper warehouseHistoryMapper; private WarehouseCellService warehouseCellService; private InsSampleMapper insSampleMapper; private InsOrderStateMapper insOrderStateMapper; private InsProductMapper insProductMapper; private InsOrderMapper insOrderMapper; @Override public int addWarehouse(String name) { Warehouse warehouse = new Warehouse(); warehouse.setName(name); return warehouseMapper.insert(warehouse); } @Override public List selectWarehouse() { return warehouseMapper.selectWarehouseList(); } @Override @Transactional(rollbackFor = Exception.class) public int addShelf(WarehouseShelf warehouseShelf) { warehouseShelfMapper.insert(warehouseShelf); List cells = new ArrayList<>(); for (int i = 1; i < warehouseShelf.getRow() + 1; i++) { for (int a = 1; a < warehouseShelf.getCol() + 1; a++) { WarehouseCell cell = new WarehouseCell(); cell.setRow(i); cell.setCol(a); cell.setState(1); cell.setShelfId(warehouseShelf.getId()); cells.add(cell); } } warehouseCellService.saveBatch(cells); return 1; } @Override @Transactional(rollbackFor = Exception.class) public int delWarehouse(Integer id) { warehouseShelfMapper.delete(Wrappers.lambdaUpdate().eq(WarehouseShelf::getWarehouseId, id)); return warehouseMapper.deleteById(id); } @Override public int upWarehouse(Warehouse warehouse) { return warehouseMapper.updateById(warehouse); } @Override @Transactional(rollbackFor = Exception.class) public int delShelf(Integer id) { warehouseCellMapper.update(null ,Wrappers.lambdaUpdate().eq(WarehouseCell::getShelfId, id).set(WarehouseCell::getState, 0)); return warehouseShelfMapper.deleteById(id); } @Override @Transactional(rollbackFor = Exception.class) public int upShelf(WarehouseShelf warehouseShelf) { WarehouseShelf shelf = warehouseShelfMapper.selectById(warehouseShelf.getId()); if (shelf.getCol()>=warehouseShelf.getCol() && shelf.getRow() >= warehouseShelf.getRow()) { //如果维护的数据小于原有的行列数可以进行修改 warehouseCellMapper.update(null, Wrappers.lambdaUpdate() .eq(WarehouseCell::getShelfId, warehouseShelf.getId()) .and(true, wrapper -> wrapper.gt(WarehouseCell::getRow, warehouseShelf.getRow()) .or() .gt(WarehouseCell::getCol, warehouseShelf.getCol())) .set(WarehouseCell::getState, 0)); }else { //如果维护的数据大于原有的行列数需要进行额外添加 List cells = new ArrayList<>(); for (int i = 1; i < warehouseShelf.getRow() + 1; i++) { for (int a = 1; a < warehouseShelf.getCol() + 1; a++) { WarehouseCell cell = new WarehouseCell(); cell.setRow(i); cell.setCol(a); cell.setState(1); cell.setShelfId(warehouseShelf.getId()); WarehouseCell warehouseCell = warehouseCellMapper.selectOne(Wrappers.lambdaQuery() .eq(WarehouseCell::getShelfId, warehouseShelf.getId()) .eq(WarehouseCell::getRow, i) .eq(WarehouseCell::getCol, a)); if (ObjectUtils.isNotEmpty(warehouseCell)){ cell.setId(warehouseCell.getId()); } cells.add(cell); } } warehouseCellService.saveOrUpdateBatch(cells); } warehouseShelfMapper.updateById(warehouseShelf); return 0; } @Override public List getWarehouse(Integer shelfId,String sampleCode) { return warehouseCellMapper.getWarehouse(shelfId,sampleCode); } @Override public int inWarehouse(String trees, String sampleCode,String entrustCode) { String[] tree = trees.split("-"); if(tree.length < 4){ throw new ErrorException("库位选择错误"); } List insOrders = insOrderMapper.selectList(Wrappers.lambdaQuery().eq(InsOrder::getEntrustCode, entrustCode)); if(insOrders.size()!=1){ throw new ErrorException("订单编号输入有误"); } List samples = insSampleMapper.selectList(Wrappers.lambdaQuery() .eq(InsSample::getSampleCode, sampleCode) .eq(InsSample::getInsOrderId,insOrders.get(0).getId()) .select(InsSample::getId,InsSample::getCellId)); if(samples.size()!=1){ throw new ErrorException("样品编号输入有误"); } if(samples.get(0).getCellId()!=null){ throw new ErrorException("样品 " + sampleCode + " 未出库"); } WarehouseCell cell = warehouseCellMapper.selectOne(Wrappers.lambdaQuery().eq(WarehouseCell::getShelfId, tree[1]).eq(WarehouseCell::getRow, tree[2]).eq(WarehouseCell::getCol, tree[3]).eq(WarehouseCell::getState, 1).select(WarehouseCell::getId,WarehouseCell::getRow,WarehouseCell::getCol)); WarehouseShelf shelf = warehouseShelfMapper.selectById(tree[1]); Warehouse warehouse = warehouseMapper.selectById(tree[0]); WarehouseHistory history = new WarehouseHistory(); history.setCellId(cell.getId()); history.setState(1); history.setInsSampleId(samples.get(0).getId()); history.setWarehouseCode(warehouse.getName()+"-"+shelf.getName()+"-"+cell.getRow()+"-"+cell.getCol()); samples.get(0).setCellId(cell.getId()); insSampleMapper.updateById(samples.get(0)); return warehouseHistoryMapper.insert(history); } @Override public int outWarehouse(String sampleCode, boolean a,String entrustCode) { List insOrders = insOrderMapper.selectList(Wrappers.lambdaQuery().eq(InsOrder::getEntrustCode, entrustCode)); if(insOrders.size()!=1){ throw new ErrorException("订单编号输入有误"); } List samples = insSampleMapper.selectList(Wrappers.lambdaQuery() .eq(InsSample::getSampleCode, sampleCode) .eq(InsSample::getInsOrderId,insOrders.get(0).getId()) .select(InsSample::getId,InsSample::getCellId)); if(samples.size()!=1){ throw new ErrorException("样品编号输入有误"); } if(samples.get(0).getCellId()==null){ throw new ErrorException("样品 " + sampleCode + " 未入库"); } if (!a) { //判断该订单是否站点任务有(继续试验或者是结束试验) List orderStates = insOrderStateMapper.selectList(Wrappers.lambdaQuery() .eq(InsOrderState::getInsOrderId, samples.get(0).getInsOrderId()) .eq(InsOrderState::getInsState, 5)); List orderIds = new ArrayList(); orderIds.add(6); if (CollectionUtils.isEmpty(orderStates)) { List collect = insOrderStateMapper.selectList(Wrappers.lambdaQuery() .eq(InsOrderState::getInsOrderId, samples.get(0).getInsOrderId())).stream().map(InsOrderState::getInsState).distinct().collect(Collectors.toList()); if (collect.size()!=0 && !collect.containsAll(orderIds)) { throw new ErrorException("该样品的检验任务还没有结束试验或继续试验,暂时无法出库!"); } } } WarehouseHistory history = new WarehouseHistory(); history.setState(2); history.setInsSampleId(samples.get(0).getId()); history.setCellId(samples.get(0).getCellId()); history.setWarehouseCode(warehouseHistoryMapper.selectOne(Wrappers.lambdaQuery().eq(WarehouseHistory::getInsSampleId, samples.get(0).getId()).select(WarehouseHistory::getWarehouseCode).orderByDesc(WarehouseHistory::getId).last("limit 1")).getWarehouseCode()); insSampleMapper.update(null, Wrappers.lambdaUpdate().eq(InsSample::getId, samples.get(0).getId()).set(InsSample::getCellId, null)); return warehouseHistoryMapper.insert(history); } @Override public Map getSampleRecord(Integer id) { InsSample insSample = insSampleMapper.selectById(id); List histories = warehouseHistoryMapper.getHistoryListBySampleId(id); Map map = new HashMap<>(); Map sampleHistory = new HashMap<>(); WarehouseHistory history = histories.get(histories.size() - 1); if(history.getState() == 1){ sampleHistory.put("date", history.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); sampleHistory.put("user", warehouseHistoryMapper.getUserNameById(history.getCreateUser())); sampleHistory.put("code", history.getWarehouseCode()); } map.put("sampleHistory", sampleHistory); map.put("insSample", insSample); map.put("histories", histories); map.put("products", insProductMapper.getProductAndResult(id)); return map; } }