package com.by4cloud.platformx.device.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.device.constant.MaxSizeContant; import com.by4cloud.platformx.device.dto.ReceivingNoteQueryDTO; import com.by4cloud.platformx.device.entity.*; import com.by4cloud.platformx.device.mapper.*; import com.by4cloud.platformx.device.service.JcMaxSizeService; import com.by4cloud.platformx.device.service.ReceivingNoteService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * 验收表 * * @author pig * @date 2025-03-13 11:03:52 */ @Service @AllArgsConstructor @Slf4j public class ReceivingNoteServiceImpl extends ServiceImpl implements ReceivingNoteService { private final JcMaxSizeService maxSizeService; private final ReceivingNoteItemMapper itemMapper; private final DeviceInventoryMapper inventoryMapper; private final InventoryFlowWaterMapper inventoryFlowWaterMapper; private final DeviceMapper deviceMapper; private final ContractMapper contractMapper; private final ContractItemMapper contractItemMapper; @Override public IPage pageNew(Page page, ReceivingNoteQueryDTO queryDTO) { return baseMapper.pageNew(page,queryDTO); } @Override public R saveDeep(ReceivingNote entity) { //明细设备数量与合同中签订数据比对 Contract contract = contractMapper.selectById(entity.getContractId()); if (contract == null) { return R.failed("合同不存在"); } //查询合同明细中设备情况 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("contract_id",contract.getId()); List list = contractItemMapper.selectList(queryWrapper); // // //比较设备种类是否一致 // if (list.size()!=entity.getNoteItemList().size()){ // return R.failed("合同中设备种类与验收明细中不一致"); // } // //比较单个设备台账数量是否与合同中一致 for (ContractItem contractItem:list ) { for (ReceivingNoteItem item:entity.getNoteItemList() ) { if (contractItem.getDeviceId().equals(item.getDeviceId())){ if (contractItem.getNum()>=item.getNum()) { return R.failed("验收明细中"+item.getDeviceName()+"设备数量不能超过合同明细中签订的设备数量"); } //查询是否有历史验收 QueryWrapper queryWrapperNoteItem = new QueryWrapper<>(); queryWrapperNoteItem.eq("contract_id",contract.getId()); queryWrapperNoteItem.eq("device_id",contractItem.getDeviceId()); List noteItemList = itemMapper.selectList(queryWrapperNoteItem); if (noteItemList != null&¬eItemList.size()>0) { Integer deviceNum = noteItemList.stream().mapToInt(ReceivingNoteItem::getNum).sum(); if (contractItem.getNum()>=(item.getNum()+deviceNum)) { return R.failed("合同中"+item.getDeviceName()+"设备数量与实际验收明细中不一致"); } } } //设备序列号检查是否有相同的存在 List serialArr = Arrays.stream(item.getSerialNos().split(",")).collect(Collectors.toList()); for (String serialNo:serialArr ) { QueryWrapper inventoryQueryWrapper = new QueryWrapper<>(); inventoryQueryWrapper.eq("device_id",item.getDeviceId()); inventoryQueryWrapper.eq("serial_no",serialNo); List inventoryList = inventoryMapper.selectList(inventoryQueryWrapper); if (inventoryList!=null&&inventoryList.size()>0){ return R.failed("合同明细中设备序列号"+serialNo+"已存在,请检查序列号"); } } } } //生成验收单编号 entity.setReleaseCode(maxSizeService.nextNo(MaxSizeContant.RELEASE_CODE)); //入库 baseMapper.insert(entity); if (entity.getNoteItemList()!=null&&entity.getNoteItemList().size()>0){ for (ReceivingNoteItem item:entity.getNoteItemList() ) { List serialArr = new ArrayList<>(); if (item.getSerialNos()!=null&&!"".equals(item.getSerialNos())) { item.setSerialNos(item.getSerialNos()); serialArr = Arrays.stream(item.getSerialNos().split(",")).collect(Collectors.toList()); } item.setNoteId(entity.getId()); itemMapper.insert(item); //设备库存同步新增 if (serialArr.size()>0){ for (String serialNo:serialArr ) { Device device = deviceMapper.selectById(item.getDeviceId()); if (device!=null) { DeviceInventory inventory = new DeviceInventory(); inventory.setDeviceId(item.getDeviceId()); inventory.setDeviceNumber(item.getDeviceCode()); inventory.setName(device.getName()); inventory.setSerialNo(serialNo); if (contract!=null&&(contract.getType()==1||contract.getType()==2)){ inventory.setSource(1); inventory.setInventoryStatus(1); } if (contract!=null&&contract.getType()==0){ inventory.setSource(1); inventory.setInventoryStatus(2); } inventoryMapper.insert(inventory); //设备库存流水同步新增 InventoryFlowWater flowWater = new InventoryFlowWater(); flowWater.setDeviceId(item.getDeviceId()); flowWater.setSerialNo(serialNo); flowWater.setInventoryId(inventory.getId()); flowWater.setClassId(device.getClassId()); if (contract!=null&&(contract.getType()==1||contract.getType()==2)){ flowWater.setOperateType(2); } if (contract!=null&&contract.getType()==0){ flowWater.setOperateType(1); } inventoryFlowWaterMapper.insert(flowWater); } } } } } //合同明细中与实际验收对比 for (ContractItem contractItem:list ) { //查询实际验收情况 QueryWrapper queryWrapperNoteItem = new QueryWrapper<>(); queryWrapperNoteItem.eq("contract_id",contract.getId()); queryWrapperNoteItem.eq("device_id",contractItem.getDeviceId()); List noteItemList = itemMapper.selectList(queryWrapperNoteItem); if (noteItemList != null&¬eItemList.size()>0) { Integer deviceNum = noteItemList.stream().mapToInt(ReceivingNoteItem::getNum).sum(); if (contractItem.getNum()!=deviceNum) { return R.ok(); } }else { return R.ok(); } } //更新合同状态为完成 contract.setStatus(2); contractMapper.updateById(contract); return R.ok(); } @Override public boolean updateByIdDeep(ReceivingNote entity) { baseMapper.updateById(entity); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("note_id",entity.getId()); itemMapper.delete(queryWrapper); if (entity.getNoteItemList()!=null&&entity.getNoteItemList().size()>0){ for (ReceivingNoteItem item:entity.getNoteItemList() ) { item.setNoteId(entity.getId()); itemMapper.insert(item); } } return Boolean.TRUE; } @Override public ReceivingNote getByIdDeep(Long id) { ReceivingNote note = baseMapper.selectById(id); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("note_id",note.getId()); List itemList = itemMapper.selectList(queryWrapper); note.setNoteItemList(itemList); return note; } public static void main(String[] args) { Long l1= 1905442028714270722l; long l2 = 1905442028714270722l; System.out.println(l1==l2); } }