Commit 78fdbc62 authored by 李驰骋's avatar 李驰骋 Committed by chicheng

添加批次号管理

(cherry picked from commit 51d3068f)
parent 9d4919cc
......@@ -56,6 +56,11 @@ public class Constants {
*/
public static final String LOGIN_FAIL = "Error";
/**
* 默认批号
*/
public static final String BATCH_DEF = Constants.BATCH_DEF;
/**
* 验证码 redis key
*/
......
......@@ -40,6 +40,11 @@ public class MoctaController {
Optional<MoctaDocDto> getForDoc(@RequestBody MoctaIdCriteria criteria){
return moctaService.getForDoc(criteria);
}
@ApiOperation("获取工单信息")
@PostMapping("/mocta/get")
Optional<MoctaDto> get(@RequestBody MoctaIdCriteria criteria){
return moctaService.get(criteria);
}
@ApiOperation("获取文件列表")
@PostMapping("/mocta/getfordocList")
......
package com.topsunit.scanservice.ximai.dto;
import com.topsunit.scanservice.ximai.common.Constants;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -47,7 +48,7 @@ public class CopthCreateParams {
@ApiModelProperty("订单序号")
private String th016;
@ApiModelProperty("批号")
private String th017="********************";
private String th017= Constants.BATCH_DEF;
@ApiModelProperty("备注")
private String th018;
@ApiModelProperty("客户品号")
......
......@@ -33,4 +33,7 @@ public interface IInvmlDto {
@ApiModelProperty("库存数量")
public BigDecimal getMl005();
@ApiModelProperty("最近入库日")
public String getMl009();
}
......@@ -43,4 +43,9 @@ public class InvmlDto {
*/
@ApiModelProperty("库存数量")
private BigDecimal ml005;
/**
* 最近入库日
*/
@ApiModelProperty("最近入库日")
private String ml009;
}
package com.topsunit.scanservice.ximai.dto;
import com.topsunit.scanservice.ximai.common.Constants;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -73,5 +74,5 @@ public class InvtaCreateParams {
@ApiModelProperty("单据来源")
private String ta025="1";
@ApiModelProperty("批号")
private String ta033="********************";
private String ta033= Constants.BATCH_DEF;
}
package com.topsunit.scanservice.ximai.dto;
import com.topsunit.scanservice.ximai.common.Constants;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -44,7 +45,7 @@ public class InvtbCreateParams {
@ApiModelProperty("转入库")
private String tb013="";
@ApiModelProperty("批号")
private String tb014="********************";
private String tb014= Constants.BATCH_DEF;
@ApiModelProperty("有效日期")
private String tb015="";
@ApiModelProperty("复检日期")
......
package com.topsunit.scanservice.ximai.dto;
import com.topsunit.scanservice.ximai.common.Constants;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -43,7 +44,7 @@ public class InvtbCreateParamsAllo {
@ApiModelProperty("转入库")
private String tb013="";
@ApiModelProperty("批号")
private String tb014="********************";
private String tb014= Constants.BATCH_DEF;
@ApiModelProperty("有效日期")
private String tb015="";
@ApiModelProperty("复检日期")
......
......@@ -22,11 +22,11 @@ public class MoctaDto {
private String ta003;
/*BOM日期[FORMATE:YMD]*/
private String ta004;
/*BOM版本*/
@ApiModelProperty("BOM版本")
private String ta005;
/*产品品号*/
@ApiModelProperty("产品品号")
private String ta006;
/*单位*/
@ApiModelProperty("单位")
private String ta007;
/*预留字段 小单位*/
private String ta008;
......@@ -41,16 +41,17 @@ public class MoctaDto {
/*审核码 Y、N、V*/
private String ta013;
/*实际完工[FORMATE:YMD]*/
@ApiModelProperty("实际完工[FORMATE:YMD]")
private String ta014;
/*预计产量*/
@ApiModelProperty("预计产量")
private BigDecimal ta015;
/*已领套数*/
@ApiModelProperty("已领套数")
private BigDecimal ta016;
/*已生产量*/
@ApiModelProperty("已生产量")
private BigDecimal ta017;
/*报废数量*/
private BigDecimal ta018;
/*工厂编号*/
@ApiModelProperty("工厂编号")
private String ta019;
/*入库仓库*/
private String ta020;
......
package com.topsunit.scanservice.ximai.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* <p>Title: MoctfCreateParams</p>
* <p>Description: 完工入库申请表头</p>
*
* @author chicheng.li
* @version V1.0
* @date 2024/10/22
*/
@Data
public class MoctfCreateParams2 {
@ApiModelProperty("入库单别")
private String tg001="5801";
@ApiModelProperty("仓库")
private String tg010;
@ApiModelProperty("库位")
private String tg036;
@ApiModelProperty("入库数量")
private BigDecimal tg011;
@ApiModelProperty("工单单别")
private String tg014;
@ApiModelProperty("工单单号")
private String tg015;
@ApiModelProperty("标签明细")
private List<StorageDetailParams> storageDetails;
}
package com.topsunit.scanservice.ximai.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* <p>Title: MoctfCreateParams</p>
* <p>Description: 完工入库申请表头</p>
*
* @author chicheng.li
* @version V1.0
* @date 2024/10/22
*/
@Data
public class MoctfCreateParams2 {
@ApiModelProperty("入库单别")
private String tg001="5801";
@ApiModelProperty("仓库")
private String tg010;
@ApiModelProperty("库位")
private String tg036;
@ApiModelProperty("入库数量")
private BigDecimal tg011;
@ApiModelProperty("工单单别")
private String tg014;
@ApiModelProperty("工单单号")
private String tg015;
@ApiModelProperty("批号")
private String batchNo;
@ApiModelProperty("标签明细")
private List<StorageDetailParams> storageDetails;
}
package com.topsunit.scanservice.ximai.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Id;
import java.math.BigDecimal;
import java.util.List;
/**
* <p>Title: MoctgCreateParams</p>
* <p>Description: 完工入库申请表身</p>
*
* @author chicheng.li
* @version V1.0
* @date 2024/10/22
*/
@Data
public class MoctgCreateParams {
@ApiModelProperty("入库单别")
private String tg001="5801";
@ApiModelProperty("入库单号")
private String tg002;
@ApiModelProperty("序号")
private String tg003="0001";
/**
* 产品品号
*/
@ApiModelProperty("产品品号")
private String tg004;
@ApiModelProperty("品名")
private String tg005;
@ApiModelProperty("规格")
private String tg006;
@ApiModelProperty("单位")
private String tg007;
@ApiModelProperty("入/出别")
private Integer tg009=1;
@ApiModelProperty("仓库")
private String tg010;
@ApiModelProperty("审核码")
private String tg022="N";
@ApiModelProperty("库位")
private String tg036;
@ApiModelProperty("库存单位")
private String tg037;
@ApiModelProperty("入库数量")
private BigDecimal tg011;
@ApiModelProperty("工单单别")
private String tg014;
@ApiModelProperty("工单单号")
private String tg015;
@ApiModelProperty("检验状态")
private String tg016="0";
@ApiModelProperty("批号")
private String tg017="********************";
@ApiModelProperty("急料")
private String tg024;
@ApiModelProperty("生产日期")
private String tg030;
@ApiModelProperty("批号说明")
private String tg031="";
@ApiModelProperty("报废数量")
private BigDecimal tg012=BigDecimal.ZERO;
@ApiModelProperty("验退数量")
private BigDecimal tg023=BigDecimal.ZERO;
@ApiModelProperty("破坏数量")
private BigDecimal tg032=BigDecimal.ZERO;
@ApiModelProperty("验收数量")
private BigDecimal tg013;
}
package com.topsunit.scanservice.ximai.dto;
import com.topsunit.scanservice.ximai.common.Constants;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Id;
import java.math.BigDecimal;
import java.util.List;
/**
* <p>Title: MoctgCreateParams</p>
* <p>Description: 完工入库申请表身</p>
*
* @author chicheng.li
* @version V1.0
* @date 2024/10/22
*/
@Data
public class MoctgCreateParams {
@ApiModelProperty("入库单别")
private String tg001="5801";
@ApiModelProperty("入库单号")
private String tg002;
@ApiModelProperty("序号")
private String tg003="0001";
/**
* 产品品号
*/
@ApiModelProperty("产品品号")
private String tg004;
@ApiModelProperty("品名")
private String tg005;
@ApiModelProperty("规格")
private String tg006;
@ApiModelProperty("单位")
private String tg007;
@ApiModelProperty("入/出别")
private Integer tg009=1;
@ApiModelProperty("仓库")
private String tg010;
@ApiModelProperty("审核码")
private String tg022="N";
@ApiModelProperty("库位")
private String tg036;
@ApiModelProperty("库存单位")
private String tg037;
@ApiModelProperty("入库数量")
private BigDecimal tg011;
@ApiModelProperty("工单单别")
private String tg014;
@ApiModelProperty("工单单号")
private String tg015;
@ApiModelProperty("检验状态")
private String tg016="0";
@ApiModelProperty("批号")
private String tg017= Constants.BATCH_DEF;
@ApiModelProperty("急料")
private String tg024;
@ApiModelProperty("生产日期")
private String tg030;
@ApiModelProperty("批号说明")
private String tg031="";
@ApiModelProperty("报废数量")
private BigDecimal tg012=BigDecimal.ZERO;
@ApiModelProperty("验退数量")
private BigDecimal tg023=BigDecimal.ZERO;
@ApiModelProperty("破坏数量")
private BigDecimal tg032=BigDecimal.ZERO;
@ApiModelProperty("验收数量")
private BigDecimal tg013;
}
......@@ -40,5 +40,7 @@ public class PurcdDto {
private BigDecimal cd018;
private BigDecimal cd019;
private String cd034;
@ApiModelProperty("批号")
private String udf07;
}
......@@ -3,6 +3,7 @@ package com.topsunit.scanservice.ximai.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import java.math.BigDecimal;
/**
......@@ -53,4 +54,6 @@ public class PurthCreateDto {
@ApiModelProperty("")
private Boolean islot = false;
@ApiModelProperty("批号")
private String cd017;
}
......@@ -25,6 +25,8 @@ public class StockAllocateParams {
String warehouse;
@ApiModelProperty("储位")
String location;
@ApiModelProperty("批号")
String batchNo;
@ApiModelProperty("调拨数量")
BigDecimal allocateQuantity;
@ApiModelProperty("调入仓库")
......
......@@ -35,5 +35,7 @@ public class StockSaleOutParams {
String warehouse;
@ApiModelProperty("储位")
String location;
@ApiModelProperty("批号")
String batchNo;
}
}
......@@ -25,6 +25,8 @@ public class StockTakingParams {
String warehouse;
@ApiModelProperty("储位")
String location;
@ApiModelProperty("批号")
String batchNo;
@ApiModelProperty("库存数量")
BigDecimal stockQuantity;
@ApiModelProperty("盘点数量")
......
......@@ -19,6 +19,8 @@ public class StockTransactionParams {
String warehouse;
@ApiModelProperty("储位")
String location;
@ApiModelProperty("批号")
String batchNo;
@ApiModelProperty("操作数量")
BigDecimal quantity;
@ApiModelProperty("调入仓库")
......
......@@ -49,7 +49,7 @@ public class Purcd extends EntityBase {
private String cd015;
@ApiModelProperty("到货仓")
private String cd016;
@Column
@ApiModelProperty("批号")
private String cd017;
@Column
private BigDecimal cd018;
......
......@@ -93,6 +93,9 @@ public class CopthService {
copth.setTh014(copto.getTo004());
copth.setTh015(copto.getTo005());
copth.setTh016(copto.getTo006());
if(StringUtils.isNotBlank(s.getBatchNo())){
copth.setTh017(s.getBatchNo());
}
copth.setTh045(copto.getTo001());
copth.setTh046(copto.getTo002());
copth.setTh047(copto.getTo003());
......
......@@ -11,6 +11,7 @@ import com.topsunit.scanservice.ximai.entity.Invmb;
import com.topsunit.scanservice.ximai.entity.Invmc;
import com.topsunit.scanservice.ximai.entity.Invml;
import com.topsunit.scanservice.ximai.utils.MessageUtils;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -73,6 +74,7 @@ public class InvmcService {
return invmlMapper.toInvmlDto(list);
}
@ApiOperation("查询库存")
public List<InvmlDto> getInvmlList2(InvmlCriteria criteria) {
invmbDao.findById(criteria.getMl001()).orElseThrow(()->new TopsunitException(MessageUtils.getMessage("未找到物料:")+criteria.getMl001()));
......
......@@ -139,6 +139,7 @@ public class InvtaService {
invtb.setTb012(detail.getWarehouse());
invtb.setTb019(currDate);
invtb.setTb029(detail.getLocation());
invtb.setTb014(detail.getBatchNo());
//判断调拨库位是否与当前一致
if(StringUtils.isNotEmpty(detail.getAllocateWarehouse()) &&
StringUtils.isNotEmpty(detail.getAllocateLocation())){
......
......@@ -66,6 +66,11 @@ public class MoctaService {
});
}
public Optional<MoctaDto> get(MoctaIdCriteria criteria) {
return moctaDao.findById(moctaMapper.toMoctaId(criteria))
.map(moctaMapper::toMoctaDto);
}
public MoctaDocDto getForDoc2(MoctaIdCriteria criteria) {
MoctaDocDto dto = moctaDao.findById(moctaMapper.toMoctaId(criteria))
.map(moctaMapper::toMoctaDocDto).orElse(new MoctaDocDto());
......
package com.topsunit.scanservice.ximai.service;
import com.topsunit.scanservice.ximai.common.Constants;
import com.topsunit.scanservice.ximai.common.DateUtil;
import com.topsunit.scanservice.ximai.common.StringUtil;
import com.topsunit.scanservice.ximai.common.TopsunitException;
......@@ -253,7 +254,7 @@ public class MoctcService {
// throw new TopsunitException(MessageUtils.getMessage("批管理品号{0}必须录入批号。", mocteCreateParams.getTb003()));
// }
// });
invmlDao.findFirstByMl001AndMl002AndMl003AndMl004(mocteCreateParams.getTb003(), mocteCreateParams.getTe008(), mocteCreateParams.getTe025(), "********************")
invmlDao.findFirstByMl001AndMl002AndMl003AndMl004(mocteCreateParams.getTb003(), mocteCreateParams.getTe008(), mocteCreateParams.getTe025(), Constants.BATCH_DEF)
.filter(i -> i.getMl005().compareTo(mocteCreateParams.getQuantity()) >= 0)
.orElseThrow(() -> new TopsunitException(MessageUtils.getMessage("品号{0}库存不足。", mocteCreateParams.getTb003().trim())));
......
......@@ -88,7 +88,7 @@ public class MoctfService {
storageDetailRecord.setWorkOrderNo(detail.getWorkOrderNo());
storageDetailRecord.setBoxCode(detail.getBoxCode());
storageDetailRecord.setLabelNo(detail.getLabelNo());
StorageDetailRecordResult result = mesStorageDetailRecordService.create(storageDetailRecord);
if(result.getCode()==200) {
log.info("保存入库明细记录成功:工单单别={}, 工单单号={}, 箱码={}, 小标签号={}",
......@@ -97,7 +97,7 @@ public class MoctfService {
throw new TopsunitException(result.getMsg());
}
} catch (Exception e) {
log.error("保存入库明细记录失败:工单单别={}, 工单单号={}, 箱码={}, 小标签号={}, 错误信息={}",
log.error("保存入库明细记录失败:工单单别={}, 工单单号={}, 箱码={}, 小标签号={}, 错误信息={}",
detail.getWorkOrderType(), detail.getWorkOrderNo(), detail.getBoxCode(), detail.getLabelNo(), e.getMessage(), e);
// 不抛出异常,仅记录日志,避免影响主流程
}
......@@ -131,11 +131,13 @@ public class MoctfService {
moctg.setTg007(invmb.getMb004());
moctg.setTg013(create.getTg011());
moctg.setTg037(invmb.getMb004());
moctg.setTg010(invmb.getMb017());
moctg.setTg010(create.getTg010());
moctg.setTg017(create.getBatchNo());
if(StringUtils.isBlank(create.getBatchNo())){
throw new TopsunitException(MessageUtils.getMessage("批管理品号{0}必须录入批号。", moctg.getTg005()));
}
ta083.set(mocta.getTa083());
//查询物料默认仓库
Invmc invmc = invmcDao.findById(new InvmcId(invmb.getMb001(), invmb.getMb017())).orElseThrow(()->new TopsunitException(MessageUtils.getMessage("未找到对应物料默认库:{0},{1}", invmb.getMb001(), invmb.getMb017())));
moctg.setTg036(invmc.getMc015());
moctg.setTg036(create.getTg036());
moctg.setTg030(currStr);
moctg.setTg038(moctg.getTg011());
moctgDao.save(moctg);
......@@ -154,12 +156,12 @@ public class MoctfService {
storageDetailRecord.setWorkOrderNo(detail.getWorkOrderNo());
storageDetailRecord.setBoxCode(detail.getBoxCode());
storageDetailRecord.setLabelNo(detail.getLabelNo());
StorageDetailRecordResult result = mesStorageDetailRecordService.create(storageDetailRecord);
log.info("保存入库明细记录成功:工单单别={}, 工单单号={}, 箱码={}, 小标签号={}",
log.info("保存入库明细记录成功:工单单别={}, 工单单号={}, 箱码={}, 小标签号={}",
detail.getWorkOrderType(), detail.getWorkOrderNo(), detail.getBoxCode(), detail.getLabelNo());
} catch (Exception e) {
log.error("保存入库明细记录失败:工单单别={}, 工单单号={}, 箱码={}, 小标签号={}, 错误信息={}",
log.error("保存入库明细记录失败:工单单别={}, 工单单号={}, 箱码={}, 小标签号={}, 错误信息={}",
detail.getWorkOrderType(), detail.getWorkOrderNo(), detail.getBoxCode(), detail.getLabelNo(), e.getMessage(), e);
// 不抛出异常,仅记录日志,避免影响主流程
}
......
......@@ -12,12 +12,14 @@ import com.topsunit.scanservice.ximai.security.CurrentActor;
import com.topsunit.scanservice.ximai.utils.MessageUtils;
import com.topsunit.scanservice.ximai.webapi.PrintApi;
import com.topsunit.scanservice.ximai.webapi.dto.PrintField;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
......@@ -183,6 +185,7 @@ public class PurccService {
objectMap.add(PrintField.of("CD006", j.getCd006().trim()));
objectMap.add(PrintField.of("UDF01", j.getUdf01().trim()));
objectMap.add(PrintField.of("UDF02", j.getUdf02().trim()));
objectMap.add(PrintField.of("CD017", j.getCd017().trim()));//批号
objectMap.add(PrintField.of("CC010", optionalPurcc
.map(Purcc::getCc010)
.map(DateUtil::stringToLocalDate)
......@@ -224,6 +227,7 @@ public class PurccService {
return byMc001.stream().findFirst();
}
@ApiOperation("")
@Transactional
public void create(StockArrivalParams stockArrivalParams){
if(CollectionUtil.isEmpty(stockArrivalParams.getDetails())){
......@@ -271,6 +275,12 @@ public class PurccService {
purcd.setCd013(detail.getArrivalQuantity());
purcd.setCd015(purtd.getTd009());
purcd.setCd016(purtd.getTd007());
//按批管理
if("Y".equalsIgnoreCase(invmb.getMb022())){
purcd.setCd017(buildBatch(detail));//生成到货批次号
}else{
purcd.setCd017(Constants.BATCH_DEF);//生成到货批次号
}
purcd.setCd021(invmb.getMb004());
purcdDao.save(purcd);
sumQuantity = sumQuantity.add(detail.getArrivalQuantity());
......@@ -299,4 +309,11 @@ public class PurccService {
})
.orElse(prefix + "001");
}
//生成批次号:产品+客户+日期yyyyMMdd
private String buildBatch(StockArrivalParams.StockArrivalDetail detail){
String rst = detail.getMaterialNo()+detail.getSupplierNo();
rst+= cn.hutool.core.date.DateUtil.format(LocalDateTime.now(), "yyyyMMdd");
return rst;
}
}
package com.topsunit.scanservice.ximai.service;
import com.topsunit.scanservice.ximai.common.DateUtil;
import com.topsunit.scanservice.ximai.common.OrdinalHelper;
import com.topsunit.scanservice.ximai.common.StringUtil;
import com.topsunit.scanservice.ximai.common.TopsunitException;
import com.topsunit.scanservice.ximai.common.*;
import com.topsunit.scanservice.ximai.dao.*;
import com.topsunit.scanservice.ximai.dto.PurtgCreateCriteria;
import com.topsunit.scanservice.ximai.dto.PurtgCreateDto;
......@@ -217,7 +214,11 @@ public class PurtgService {
purth.setTh007(localPurcd.getCd018()); // 进货数量
purth.setTh008(localPurcd.getCd007()); // 单位
purth.setTh009(purthCreateParams.getTh009()); // 仓库
purth.setTh010("********************"); // 批号
if(StringUtil.isNullOrEmpty(localPurcd.getCd017())){
purth.setTh010(Constants.BATCH_DEF); // 批号
}else{
purth.setTh010(localPurcd.getCd017());
}
purth.setTh011(localPurcd.getCd010()); // 采购单别
purth.setTh012(localPurcd.getCd011()); // 采购单号
purth.setTh013(localPurcd.getCd012()); // 采购序号
......
package com.topsunit.scanservice.ximai.service;
import com.topsunit.scanservice.ximai.common.Constants;
import com.topsunit.scanservice.ximai.common.DateUtil;
import com.topsunit.scanservice.ximai.common.TopsunitException;
import com.topsunit.scanservice.ximai.dao.*;
......@@ -145,7 +146,7 @@ public class SfctbService {
// tc029
// tc030
// tc031
sfctc.setTc032("********************"); // 批号
sfctc.setTc032(Constants.BATCH_DEF); // 批号
// tc033
// tc034
sfctc.setTc035("N"); // 急料
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment