|
|
@ -9,26 +9,50 @@ import cn.hutool.core.util.StrUtil; |
|
|
|
import com.alibaba.fastjson.JSON; |
|
|
|
import com.alibaba.fastjson.JSONArray; |
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; |
|
|
|
import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; |
|
|
|
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvService; |
|
|
|
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdisService; |
|
|
|
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlService; |
|
|
|
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv; |
|
|
|
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis; |
|
|
|
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl; |
|
|
|
import org.nl.b_lms.storage_manage.st.dao.StIvtSectattr; |
|
|
|
import org.nl.b_lms.storage_manage.st.dao.StIvtStructattr; |
|
|
|
import org.nl.b_lms.storage_manage.st.dao.StIvtStructivt; |
|
|
|
import org.nl.b_lms.storage_manage.st.service.StIvtSectattrService; |
|
|
|
import org.nl.b_lms.storage_manage.st.service.StIvtStructattrService; |
|
|
|
import org.nl.b_lms.storage_manage.st.service.StIvtStructivtService; |
|
|
|
import org.nl.common.domain.query.PageQuery; |
|
|
|
import org.nl.common.utils.CodeUtil; |
|
|
|
import org.nl.common.utils.SecurityUtils; |
|
|
|
import org.nl.modules.common.exception.BadRequestException; |
|
|
|
import org.nl.common.utils.CodeUtil; |
|
|
|
import org.nl.modules.wql.WQL; |
|
|
|
import org.nl.modules.wql.core.bean.WQLObject; |
|
|
|
import org.nl.modules.wql.util.WqlUtil; |
|
|
|
import org.nl.wms.basedata.st.service.impl.UserStorServiceImpl; |
|
|
|
import org.nl.wms.st.inbill.service.InchargeService; |
|
|
|
import org.nl.wms.st.inbill.service.StorPublicService; |
|
|
|
import org.nl.wms.st.inbill.service.dto.ChargePageParam; |
|
|
|
import org.nl.wms.st.inbill.service.vo.WriteOffVo; |
|
|
|
import org.nl.wms.st.vehiclebill.service.dto.EmptyvehiclerecordDto; |
|
|
|
import org.nl.wms.stat.service.enums.OutBillTypeEnum; |
|
|
|
import org.springframework.data.domain.Pageable; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
import static org.nl.common.utils.IdUtil.getStringId; |
|
|
|
|
|
|
|
/** |
|
|
|
* @author Liuxy |
|
|
|
* @description 服务实现 |
|
|
@ -40,6 +64,16 @@ import java.util.Map; |
|
|
|
public class InchargeServiceImpl implements InchargeService { |
|
|
|
|
|
|
|
private final StorPublicService storPublicService; |
|
|
|
/** 出入库单分配表 */ |
|
|
|
private final IStIvtIostorinvService iStIvtIostorinvService; |
|
|
|
private final IStIvtIostorinvdisService iostorinvdisService; |
|
|
|
/** 出入库单明细表 */ |
|
|
|
private final IStIvtIostorinvdtlService iostorinvdtlService; |
|
|
|
/** 仓位库存表 */ |
|
|
|
private final StIvtStructivtService structivtService; |
|
|
|
private final IpdmBiSubpackagerelationService subpackagerelationService; |
|
|
|
private final StIvtStructattrService structattrService; |
|
|
|
private final StIvtSectattrService sectattrService; |
|
|
|
|
|
|
|
@Override |
|
|
|
public Map<String, Object> queryAll(Map whereJson, Pageable page) { |
|
|
@ -336,4 +370,141 @@ public class InchargeServiceImpl implements InchargeService { |
|
|
|
mstTab.update(jsonInMst); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public IPage<WriteOffVo> inWriteOffPageDatas(ChargePageParam paramMap, PageQuery page) { |
|
|
|
return iStIvtIostorinvService.inWriteOffPageDatas(paramMap, page); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public void inWriteOffCharge(StIvtIostorinv inbound) { |
|
|
|
String currentUserId = SecurityUtils.getCurrentUserId(); |
|
|
|
String nickName = SecurityUtils.getCurrentNickName(); |
|
|
|
Long deptId = SecurityUtils.getDeptId(); |
|
|
|
// 根据入库单创建出库单
|
|
|
|
String oldInOrderId = inbound.getIostorinv_id(); |
|
|
|
StIvtIostorinv oldInOrder = iStIvtIostorinvService.getById(oldInOrderId); |
|
|
|
StIvtIostorinv outOrder = new StIvtIostorinv(); |
|
|
|
outOrder.setIostorinv_id(getStringId()); |
|
|
|
outOrder.setBill_code(CodeUtil.getNewCode("IO_CODE")); |
|
|
|
outOrder.setIo_type("1"); |
|
|
|
outOrder.setBuss_type(OutBillTypeEnum.MANUAL_OUT.getCode()); |
|
|
|
outOrder.setBill_type(OutBillTypeEnum.MANUAL_OUT.getCode()); |
|
|
|
outOrder.setBiz_date(DateUtil.today()); |
|
|
|
outOrder.setStor_id(oldInOrder.getStor_id()); |
|
|
|
outOrder.setStor_code(oldInOrder.getStor_code()); |
|
|
|
outOrder.setStor_name(oldInOrder.getStor_name()); |
|
|
|
outOrder.setTotal_qty(oldInOrder.getTotal_qty()); |
|
|
|
outOrder.setTotal_weight(oldInOrder.getTotal_weight()); |
|
|
|
outOrder.setDetail_count(oldInOrder.getDetail_count()); |
|
|
|
outOrder.setBill_status("40"); |
|
|
|
outOrder.setInput_optid(currentUserId); |
|
|
|
outOrder.setInput_optname(nickName); |
|
|
|
outOrder.setInput_time(DateUtil.now()); |
|
|
|
outOrder.setUpdate_optid(currentUserId); |
|
|
|
outOrder.setUpdate_optname(nickName); |
|
|
|
outOrder.setUpdate_time(DateUtil.now()); |
|
|
|
outOrder.setDis_optid(currentUserId); |
|
|
|
outOrder.setDis_optname(nickName); |
|
|
|
outOrder.setDis_time(DateUtil.now()); |
|
|
|
outOrder.setConfirm_optid(""); |
|
|
|
outOrder.setConfirm_optname(""); |
|
|
|
outOrder.setConfirm_time(""); |
|
|
|
outOrder.setSysdeptid(deptId); |
|
|
|
outOrder.setSyscompanyid(deptId); |
|
|
|
iStIvtIostorinvService.save(outOrder); |
|
|
|
// 根据入库明细生成出库明细
|
|
|
|
List<StIvtIostorinvdis> needSaveOutDisList = new ArrayList<>(); |
|
|
|
List<StIvtIostorinvdtl> needSaveOutDtlList = new ArrayList<>(); |
|
|
|
List<String> needLockStructIds = new ArrayList<>(); |
|
|
|
// 获取入库明细
|
|
|
|
List<StIvtIostorinvdtl> inDtls = iostorinvdtlService.getBillDtlByInvId(oldInOrderId); |
|
|
|
for (int i = 0; i < inDtls.size(); i++) { |
|
|
|
StIvtIostorinvdtl inDtl = inDtls.get(i); |
|
|
|
StIvtIostorinvdtl outDtl = new StIvtIostorinvdtl(); |
|
|
|
outDtl.setIostorinvdtl_id(getStringId()); |
|
|
|
outDtl.setIostorinv_id(outOrder.getIostorinv_id()); |
|
|
|
outDtl.setSeq_no(inDtl.getSeq_no()); |
|
|
|
outDtl.setMaterial_id(inDtl.getMaterial_id()); |
|
|
|
outDtl.setPcsn(inDtl.getPcsn()); |
|
|
|
outDtl.setBox_no(inDtl.getBox_no()); |
|
|
|
outDtl.setQuality_scode("01"); |
|
|
|
outDtl.setBill_status("40"); |
|
|
|
outDtl.setQty_unit_id(inDtl.getQty_unit_id()); |
|
|
|
outDtl.setQty_unit_name(inDtl.getQty_unit_name()); |
|
|
|
outDtl.setPlan_qty(inDtl.getPlan_qty()); |
|
|
|
outDtl.setSource_billdtl_id(inDtl.getSource_billdtl_id()); |
|
|
|
outDtl.setAssign_qty(inDtl.getAssign_qty()); |
|
|
|
outDtl.setUnassign_qty(inDtl.getUnassign_qty()); |
|
|
|
outDtl.setVbeln(inDtl.getVbeln()); |
|
|
|
outDtl.setPosnr(inDtl.getPosnr()); |
|
|
|
needSaveOutDtlList.add(outDtl); |
|
|
|
// 根据入库分配明细生成出库分配明细
|
|
|
|
List<StIvtIostorinvdis> inDiss = iostorinvdisService.getBillDisByDtlId(inDtl.getIostorinvdtl_id()); |
|
|
|
for (int j = 0; j < inDiss.size(); j++) { |
|
|
|
StIvtIostorinvdis inDis = inDiss.get(j); |
|
|
|
StIvtIostorinvdis outDis = new StIvtIostorinvdis(); |
|
|
|
outDis.setIostorinvdis_id(getStringId()); |
|
|
|
outDis.setIostorinv_id(outOrder.getIostorinv_id()); |
|
|
|
outDis.setIostorinvdtl_id(outDtl.getIostorinvdtl_id()); |
|
|
|
outDis.setSeq_no(inDis.getSeq_no()); |
|
|
|
outDis.setSect_id(inDis.getSect_id()); |
|
|
|
outDis.setSect_code(inDis.getSect_code()); |
|
|
|
outDis.setSect_name(inDis.getSect_name()); |
|
|
|
outDis.setStruct_id(inDis.getStruct_id()); |
|
|
|
outDis.setStruct_code(inDis.getStruct_code()); |
|
|
|
outDis.setStruct_name(inDis.getStruct_name()); |
|
|
|
outDis.setMaterial_id(inDis.getMaterial_id()); |
|
|
|
outDis.setPcsn(inDis.getPcsn()); |
|
|
|
outDis.setBox_no(inDis.getBox_no()); |
|
|
|
outDis.setPoint_id(0L); |
|
|
|
outDis.setTask_id(""); |
|
|
|
outDis.setQuality_scode("01"); |
|
|
|
// 如果是虚拟库区则将执行状态改为生成:01
|
|
|
|
StIvtSectattr sectattr = sectattrService.getById(inDis.getSect_id()); |
|
|
|
if ("09".equals(sectattr.getSect_type_attr())) { |
|
|
|
outDis.setWork_status("01"); |
|
|
|
} else { |
|
|
|
outDis.setWork_status("00"); |
|
|
|
} |
|
|
|
outDis.setQty_unit_id(inDis.getQty_unit_id()); |
|
|
|
outDis.setQty_unit_name(inDis.getQty_unit_name()); |
|
|
|
outDis.setPlan_qty(inDis.getPlan_qty()); |
|
|
|
outDis.setReal_qty(inDis.getReal_qty()); |
|
|
|
needSaveOutDisList.add(outDis); |
|
|
|
StIvtStructivt structivt = structivtService.getOne(new LambdaQueryWrapper<StIvtStructivt>() |
|
|
|
.eq(StIvtStructivt::getPcsn, outDis.getPcsn()) |
|
|
|
.eq(StIvtStructivt::getCanuse_qty, inDis.getReal_qty()), false); |
|
|
|
if (ObjectUtil.isEmpty(structivt)) { |
|
|
|
throw new BadRequestException("库存不存在或库存数量不正确"); |
|
|
|
} |
|
|
|
|
|
|
|
// todo: 原来的方法
|
|
|
|
JSONObject jsonIvt = JSON.parseObject(JSON.toJSONString(structivt)); |
|
|
|
jsonIvt.put("bill_type_scode", outOrder.getBill_type()); |
|
|
|
jsonIvt.put("inv_id", outOrder.getIostorinv_id()); |
|
|
|
jsonIvt.put("bill_code", outOrder.getBill_code()); |
|
|
|
jsonIvt.put("bill_table", "ST_IVT_IOStorInv"); |
|
|
|
jsonIvt.put("change_qty", inDis.getReal_qty()); |
|
|
|
storPublicService.IOStor(jsonIvt, "11"); |
|
|
|
|
|
|
|
needLockStructIds.add(jsonIvt.getString("struct_id")); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
iostorinvdtlService.updateBatchById(needSaveOutDtlList); |
|
|
|
iostorinvdisService.updateBatchById(needSaveOutDisList); |
|
|
|
LambdaUpdateWrapper<StIvtStructattr> upLam = new LambdaUpdateWrapper<>(); |
|
|
|
upLam.set(StIvtStructattr::getLock_type, "3") |
|
|
|
.in(StIvtStructattr::getStruct_id, needLockStructIds); |
|
|
|
structattrService.update(upLam); |
|
|
|
|
|
|
|
// 修改入库单 是否冲销为 是
|
|
|
|
oldInOrder.setIs_writeoff(SlitterConstant.SLITTER_YES); |
|
|
|
oldInOrder.setWriteoff_optid(currentUserId); |
|
|
|
oldInOrder.setWriteoff_time(DateUtil.now()); |
|
|
|
iStIvtIostorinvService.updateById(oldInOrder); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|