add:1.增加CTU线边库手持出库确认;2.ERP单据同步修改已存在未领数量的单据;3.生产入库单自动创建反写生产订单数量自动关单;4.生产领料单自动创建反写用料清单已领数量,未领数量自动关单;
This commit is contained in:
@@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.github.javaparser.utils.Log;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.kingdee.bos.webapi.entity.*;
|
||||
import com.kingdee.bos.webapi.sdk.K3CloudApi;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.github.javaparser.utils.Log;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.process.classprocess.ClassProcess;
|
||||
@@ -18,7 +17,7 @@ import org.springframework.stereotype.Service;
|
||||
/*
|
||||
* @author ZZQ
|
||||
* @Date 2024/5/6 14:34
|
||||
* 回传服务
|
||||
* CTU回传服务
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
@@ -34,15 +33,10 @@ public class CtuProcessHandler implements ClassProcess {
|
||||
*/
|
||||
@Override
|
||||
public JSONObject process(JSONObject from, JSONObject param) {
|
||||
String id = from.getString("id");
|
||||
PmFormData pmFormData = iPmFormDataService.getById(id);
|
||||
JSONObject vehicleMater = from.getJSONObject("vehicleMater");
|
||||
if (vehicleMater == null) {
|
||||
LambdaUpdateWrapper<PmFormData> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(PmFormData::getId, pmFormData.getId());
|
||||
updateWrapper.set(PmFormData::getRemark, "CTU出库用料单号异常:未获取到物料载具信息vehicleMater,from数据为:" + JSON.toJSONString(from));
|
||||
iPmFormDataService.update(updateWrapper);
|
||||
log.error("CTU出库用料单号异常:未获取到物料载具信息vehicleMater,from数据为:" + JSON.toJSONString(from));
|
||||
return from;
|
||||
}
|
||||
JSONObject sourceFormData = from.getJSONObject("source_form_data");
|
||||
if (sourceFormData == null) {
|
||||
@@ -50,25 +44,36 @@ public class CtuProcessHandler implements ClassProcess {
|
||||
.set("prd_ppbom_no", "CTU出库用料单号异常:未获取到源单信息sourceFormData,from数据为:" + JSON.toJSONString(from))
|
||||
.eq("id", vehicleMater.getString("id")));
|
||||
log.error("CTU出库用料单号异常:未获取到源单信息sourceFormData,from数据为:" + JSON.toJSONString(from));
|
||||
}
|
||||
String billCode = sourceFormData.getString("code");
|
||||
if (StringUtils.isBlank(billCode)) {
|
||||
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
|
||||
.set("prd_ppbom_no", "CTU出库用料单号异常:未获取到源单号billCode,from数据为:" + JSON.toJSONString(from))
|
||||
.eq("id", vehicleMater.getString("id")));
|
||||
log.error("CTU出库用料单号异常:未获取到源单号billCode,from数据为:" + JSON.toJSONString(from));
|
||||
return from;
|
||||
}
|
||||
try {
|
||||
//更新物料载具信息的出库单据号
|
||||
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
|
||||
.set("prd_ppbom_no", billCode)
|
||||
.eq("id", vehicleMater.getString("id")));
|
||||
String billCode = sourceFormData.getString("code");
|
||||
String vehicleId = StringUtils.isNotBlank(sourceFormData.getString("vehicle_id")) ? sourceFormData.getString("vehicle_id") : vehicleMater.getString("id");
|
||||
if (StringUtils.isBlank(vehicleId)) {
|
||||
LambdaUpdateWrapper<PmFormData> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(PmFormData::getId, sourceFormData.getString("id"));
|
||||
updateWrapper.set(PmFormData::getRemark, "更新CTU物料载具信息的出库单据号失败,原因为:载具物料表为空,载具id为空,无法更新用料清单号,form数据:" + JSON.toJSONString(from));
|
||||
iPmFormDataService.update(updateWrapper);
|
||||
log.error("更新CTU物料载具信息的出库单据号失败,原因为:载具物料表为空,载具id为空,无法更新用料清单号,form数据:" + JSON.toJSONString(from));
|
||||
} else {
|
||||
if (StringUtils.isNotBlank(billCode)) {
|
||||
//更新物料载具信息的出库单据号
|
||||
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
|
||||
.set("prd_ppbom_no", billCode)
|
||||
.eq("id", vehicleId));
|
||||
} else {
|
||||
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
|
||||
.set("prd_ppbom_no", "CTU出库用料单号异常:未获取到源单号billCode,from数据为:" + JSON.toJSONString(from))
|
||||
.eq("id", vehicleId));
|
||||
log.error("CTU出库用料单号异常:未获取到源单号billCode,from数据为:" + JSON.toJSONString(from));
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
LambdaUpdateWrapper<PmFormData> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(PmFormData::getId, sourceFormData.getString("id"));
|
||||
updateWrapper.set(PmFormData::getRemark, "更新物料载具信息的出库单据号失败,原因为:" + ex.getMessage());
|
||||
updateWrapper.set(PmFormData::getRemark, "更新CTU物料载具信息的出库单据号失败,原因为:" + ex.getMessage());
|
||||
iPmFormDataService.update(updateWrapper);
|
||||
Log.error(ex.getMessage());
|
||||
log.error("更新CTU物料载具信息的出库单据号失败,原因为:" + ex.getMessage() + ",form数据:" + JSON.toJSONString(from));
|
||||
}
|
||||
return from;
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ import javax.annotation.Resource;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/*
|
||||
@@ -95,9 +96,11 @@ public class SyncReceiptProcessHandler implements ClassProcess {
|
||||
if (isSuccess) {
|
||||
updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("完成"));
|
||||
updateWrapper.set(PmFormData::getRemark, "回执单创建成功,回传Erp数据为:" + responseStatus.getJSONArray("SuccessEntitys").toJSONString());
|
||||
Log.error("回传Erp数据为:" + json + ",传输数据为:");
|
||||
} else {
|
||||
updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("暂停"));
|
||||
updateWrapper.set(PmFormData::getRemark,"回执单创建失败,原因为:"+errorMessages + ",回传Erp数据为:" + json);
|
||||
updateWrapper.set(PmFormData::getRemark, "回执单创建失败,原因为:" + errorMessages + ",回传Erp数据为:" + json);
|
||||
Log.error("回传Erp数据为:" + json + ",传输数据为:");
|
||||
}
|
||||
iPmFormDataService.update(updateWrapper);
|
||||
} catch (Exception ex) {
|
||||
@@ -116,11 +119,9 @@ public class SyncReceiptProcessHandler implements ClassProcess {
|
||||
return;
|
||||
}
|
||||
JSONArray fEntityArray = formData.getJSONObject("Model").getJSONArray("FEntity");
|
||||
//判断生产入库的手工录入与MRP生成方式需回传不同的源单信息
|
||||
if ("RECEIPT_PRD".equals(formType)) {
|
||||
for (int i = 0; i < fEntityArray.size(); i++) {
|
||||
JSONObject fEntity = fEntityArray.getJSONObject(i);
|
||||
//查询工序汇报单
|
||||
ErpQuery reportQuery = new ErpQuery();
|
||||
reportQuery.setFilterString("FMoNumber ='" + fEntity.getString("FMoBillNo") + "'");
|
||||
reportQuery.setOrderString("FId desc");
|
||||
@@ -130,36 +131,63 @@ public class SyncReceiptProcessHandler implements ClassProcess {
|
||||
throw new BadRequestException("该生产订单未找到对应生产汇报单");
|
||||
}
|
||||
JSONArray optRptEntry = jsonArray.getJSONObject(0).getJSONArray("OptRptEntry");
|
||||
if (fEntity.containsKey("FSrcEntryId")) {
|
||||
//增加源单分录id
|
||||
fEntity.put("FSrcEntryId", optRptEntry.getJSONObject(0).getString("SrcEntryId"));
|
||||
fEntity.put("FSrcEntrySeq", optRptEntry.getJSONObject(0).getString("SrcEntrySeq"));
|
||||
fEntity.put("FSrcBillType", "SFC_OperationReport");
|
||||
}
|
||||
Map<String, Object> linkedMap = new LinkedHashMap<>();
|
||||
//移除重构源单Id
|
||||
fEntity.remove("FSrcEntryId");
|
||||
for (String key : fEntity.keySet()) {
|
||||
linkedMap.put(key, fEntity.get(key));
|
||||
}
|
||||
//明细字段顺序排列
|
||||
Map<String, Object> tempMap = new LinkedHashMap<>();
|
||||
for (Map.Entry<String, Object> entry : linkedMap.entrySet()) {
|
||||
tempMap.put(entry.getKey(), entry.getValue());
|
||||
if ("FMoEntryId".equals(entry.getKey())) {
|
||||
//源单编号为工序汇报单号
|
||||
if ("FMoEntrySeq".equals(entry.getKey())) {
|
||||
tempMap.put("FSrcBillNo", jsonArray.getJSONObject(0).getString("BillNo"));
|
||||
tempMap.put("FSrcEntryId", optRptEntry.getJSONObject(0).getString("Id"));
|
||||
tempMap.put("FSrcEntrySeq", optRptEntry.getJSONObject(0).getString("Seq"));
|
||||
tempMap.put("FSrcBillType", "SFC_OperationReport");
|
||||
}
|
||||
}
|
||||
JSONArray fEntityLinkArray = new JSONArray();
|
||||
JSONObject fEntityLink = new JSONObject();
|
||||
fEntityLink.put("FEntity_Link_FRuleId", "SFC_OPTRPT2INSTOCK");
|
||||
fEntityLink.put("FEntity_Link_FSBillId", jsonArray.getJSONObject(0).getString("Id"));
|
||||
fEntityLink.put("FEntity_Link_FSId", optRptEntry.getJSONObject(0).getString("Id"));
|
||||
fEntityLink.put("FEntity_Link_FSTableName", "T_SFC_OPTRPTENTRY");
|
||||
fEntityLink.put("FEntity_Link_FBasePrdRealQtyOld", fEntity.getString("FMustQty"));
|
||||
fEntityLink.put("FEntity_Link_FBasePrdRealQty", fEntity.getString("FMustQty"));
|
||||
fEntityLinkArray.add(fEntityLink);
|
||||
tempMap.put("FEntity_Link", fEntityLinkArray);
|
||||
fEntity.clear();
|
||||
fEntity.putAll(tempMap);
|
||||
|
||||
}
|
||||
}
|
||||
//判断生产领料单的批次与辅助单位
|
||||
if ("RECEIPT_PickMtrl".equals(formType)) {
|
||||
for (int i = 0; i < fEntityArray.size(); i++) {
|
||||
JSONObject fEntity = fEntityArray.getJSONObject(i);
|
||||
List<MdMeMaterialbase> materialList = iMdMeMaterialbaseService.list(new LambdaQueryWrapper<MdMeMaterialbase>().eq(MdMeMaterialbase::getMaterial_code,JSON.parseObject(fEntity.getString("FMaterialId")).getString("FNumber")));
|
||||
ErpQuery prdQuery = new ErpQuery();
|
||||
prdQuery.setFilterString("FBillNo ='" + fEntity.getString("FPPBomBillNo") + "'");
|
||||
prdQuery.setOrderString("FId desc");
|
||||
prdQuery.setFormId("PRD_PPBOM");
|
||||
JSONArray jsonArray = erpServiceUtils.queryBills(prdQuery);
|
||||
if (CollectionUtils.isEmpty(jsonArray)) {
|
||||
throw new BadRequestException("该领料出库单未找到对应用生产用料清单");
|
||||
}
|
||||
JSONArray prdEntry = jsonArray.getJSONObject(0).getJSONArray("PPBomEntry");
|
||||
JSONObject entity;
|
||||
Optional<JSONObject> filterJsonObject = prdEntry.stream()
|
||||
.map(obj -> (JSONObject) obj)
|
||||
.filter(r -> fEntity.getString("FPPBomEntryId").equals(r.getString("Id")))
|
||||
.findFirst();
|
||||
if (filterJsonObject.isPresent()) {
|
||||
entity = filterJsonObject.get();
|
||||
} else {
|
||||
throw new BadRequestException("该领料出库单的对应用生产用料清单未找到对应的物料明细");
|
||||
}
|
||||
List<MdMeMaterialbase> materialList = iMdMeMaterialbaseService.list(new LambdaQueryWrapper<MdMeMaterialbase>().eq(MdMeMaterialbase::getMaterial_code, JSON.parseObject(fEntity.getString("FMaterialId")).getString("FNumber")));
|
||||
if (ObjectUtil.isEmpty(materialList)) {
|
||||
throw new BadRequestException("回传失败:查询物料信息,物料编码不存在:"+JSON.parseObject(fEntity.getString("FMaterialId")).getString("FNumber"));
|
||||
throw new BadRequestException("回传失败:查询物料信息,物料编码不存在:" + JSON.parseObject(fEntity.getString("FMaterialId")).getString("FNumber"));
|
||||
}
|
||||
MdMeMaterialbase materialInfo = materialList.get(0);
|
||||
//没有启用批次号
|
||||
@@ -181,12 +209,26 @@ public class SyncReceiptProcessHandler implements ClassProcess {
|
||||
fUnit.put("FNumber", materialInfo.getAssist_unit_id());
|
||||
tempMap.put("FSecUnitId", fUnit);
|
||||
}
|
||||
// if ("FStockId".equals(entry.getKey())) {
|
||||
// JSONObject fStockId = new JSONObject();
|
||||
// fStockId.put("FNumber", "25");
|
||||
// tempMap.put("FStockId", fStockId);
|
||||
// }
|
||||
if ("FActualQty".equals(entry.getKey())) {
|
||||
tempMap.put("FSrcBillType", "PRD_PPBOM");
|
||||
tempMap.put("FSrcBillNo", jsonArray.getJSONObject(0).getString("BillNo"));
|
||||
tempMap.put("FEntrySrcEnteryId", entity.getString("Id"));
|
||||
tempMap.put("FEntrySrcEntrySeq", entity.getString("Seq"));
|
||||
}
|
||||
}
|
||||
JSONArray fEntityLinkArray = new JSONArray();
|
||||
JSONObject fEntityLink = new JSONObject();
|
||||
fEntityLink.put("FEntity_Link_FFlowLineId", 0);
|
||||
fEntityLink.put("FEntity_Link_FBaseActualQty", fEntity.getString("FActualQty"));
|
||||
fEntityLink.put("FEntity_Link_FSId",entity.getString("Id"));
|
||||
fEntityLink.put("FEntity_Link_FBaseActualQtyOld", fEntity.getString("FActualQty"));
|
||||
fEntityLink.put("FEntity_Link_FRuleId", "PRD_PPBOM2PICKMTRL_NORMAL");
|
||||
fEntityLink.put("FEntity_Link_FSTableId", 0);
|
||||
fEntityLink.put("FEntity_Link_FFlowId","");
|
||||
fEntityLink.put("FEntity_Link_FSBillId", jsonArray.getJSONObject(0).getString("Id"));
|
||||
fEntityLink.put("FEntity_Link_FSTableName", "T_PRD_PPBOMENTRY");
|
||||
fEntityLinkArray.add(fEntityLink);
|
||||
tempMap.put("FEntity_Link", fEntityLinkArray);
|
||||
fEntity.clear();
|
||||
fEntity.putAll(tempMap);
|
||||
}
|
||||
|
||||
@@ -86,5 +86,9 @@ public class MdGruopDick implements Serializable {
|
||||
private JSONObject form_data = new JSONObject();
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 物料编码
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String material_code;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
<result property="id" column="id"/>
|
||||
<result property="code" column="code"/>
|
||||
<result property="vehicle_code" column="vehicle_code"/>
|
||||
<result property="material_code" column="material_code"/>
|
||||
<result property="status" column="status"/>
|
||||
<result property="remark" column="remark"/>
|
||||
<result property="source_form_type" column="source_form_type"/>
|
||||
@@ -19,27 +20,30 @@
|
||||
|
||||
<select id="query" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
*
|
||||
m.material_code,
|
||||
d.*
|
||||
FROM
|
||||
md_group_dick
|
||||
md_group_dick d
|
||||
left join md_pb_vehiclemater v on d.id = v.group_id
|
||||
left join md_me_materialbase m on v.material_id = m.material_id
|
||||
<where>
|
||||
<if test="query.material_code != null and query.material_code != ''">
|
||||
and material_code LIKE '%${query.material_code}%'
|
||||
and m.material_code LIKE '%${query.material_code}%'
|
||||
</if>
|
||||
<if test="query.vehicle_code != null and query.vehicle_code != ''">
|
||||
and vehicle_code LIKE '%${query.vehicle_code}%'
|
||||
and d.vehicle_code LIKE '%${query.vehicle_code}%'
|
||||
</if>
|
||||
<if test="query.pcsn != null and query.pcsn != ''">
|
||||
and pcsn = #{query.pcsn}
|
||||
and d.pcsn = #{query.pcsn}
|
||||
</if>
|
||||
|
||||
<if test="query.status != null and query.status != ''">
|
||||
and status = #{query.status}
|
||||
and d.status = #{query.status}
|
||||
</if>
|
||||
<if test="query.form_query != null and query.form_query.size() > 0">
|
||||
<foreach collection="query.form_query" item="value" index="key" >
|
||||
<foreach collection="query.form_query" item="value" index="key">
|
||||
<if test="value != null and value != ''">
|
||||
and JSON_CONTAINS(form_data, '{"${key}":"${value}"}')
|
||||
and JSON_CONTAINS(d.form_data, '{"${key}":"${value}"}')
|
||||
</if>
|
||||
</foreach>
|
||||
</if>
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.github.pagehelper.Page;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.kingdee.bos.webapi.sdk.K3CloudApi;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.domain.constant.DictConstantPool;
|
||||
@@ -89,29 +90,37 @@ public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGru
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void groupDick(JSONObject forms) {
|
||||
List<Map> tableData = (List)forms.remove("item");
|
||||
if (CollectionUtils.isEmpty(forms)){
|
||||
List<Map> tableData = (List) forms.remove("item");
|
||||
if (CollectionUtils.isEmpty(forms)) {
|
||||
throw new BadRequestException("组盘失败:入库明细数据不能为空");
|
||||
}
|
||||
JSONObject item0 = new JSONObject(tableData.get(0));
|
||||
String vehicle0 = item0.getString("vehicle_code");
|
||||
BmVehicleInfo vehicleInfo = iBmVehicleInfoService.vehileInfo(vehicle0);
|
||||
if(vehicleInfo==null){
|
||||
throw new BadRequestException("组盘失败:载具"+vehicle0+"信息不存在请在载具信息中维护");
|
||||
if (vehicleInfo == null) {
|
||||
throw new BadRequestException("组盘失败:载具" + vehicle0 + "信息不存在请在载具信息中维护");
|
||||
}
|
||||
Integer h = vehicleInfo.getH();
|
||||
RedissonUtils.lock(()->{
|
||||
RedissonUtils.lock(() -> {
|
||||
//组盘前库存校验
|
||||
QueryWrapper<StIvtStructattr> ivtList = new QueryWrapper<StIvtStructattr>()
|
||||
.eq("vehicle_code", vehicleInfo.getVehicle_code());
|
||||
List<StIvtStructattr> existList = iStIvtStructattrService.list(ivtList);
|
||||
if (ObjectUtils.isNotEmpty(existList)) {
|
||||
throw new BadRequestException(String.format("组盘失败:当前载具号在立库的库位中未出库:%s中,请核查库存记录!", existList.get(0).getStruct_code()));
|
||||
}
|
||||
//组盘前符合条件库位数量校验
|
||||
QueryWrapper<StIvtStructattr> query = new QueryWrapper<StIvtStructattr>()
|
||||
.eq("is_used", true)
|
||||
.eq("lock_type", StatusEnum.LOCK.code("无锁"))
|
||||
.eq("stor_code", forms.getString("stor_code"))
|
||||
.isNull("vehicle_code");
|
||||
if (h!=null){
|
||||
query.ge("h",h);
|
||||
if (h != null) {
|
||||
query.ge("h", h);
|
||||
}
|
||||
int structCount = iStIvtStructattrService.count(query);
|
||||
if (structCount< DictConstantPool.STRUCT_COUNT){
|
||||
throw new BadRequestException("入库失败:当前仓库可用库位小于"+DictConstantPool.STRUCT_COUNT);
|
||||
if (structCount < DictConstantPool.STRUCT_COUNT) {
|
||||
throw new BadRequestException("入库失败:当前仓库可用库位小于" + DictConstantPool.STRUCT_COUNT);
|
||||
}
|
||||
}, StatusEnum.STRATEGY_TYPE.code("入库")+forms.getString("stor_code"),5);
|
||||
|
||||
@@ -218,6 +227,19 @@ public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGru
|
||||
@Transactional
|
||||
public void delete(String[] ids) {
|
||||
if (ids != null && ids.length > 0) {
|
||||
if (ids.length > 1) {
|
||||
throw new BadRequestException("删除失败:请选择一条数据");
|
||||
}
|
||||
List<MdGruopDick> groupDick = this.list(new QueryWrapper<MdGruopDick>().eq("id", ids[0]));
|
||||
RedissonUtils.lock(() -> {
|
||||
//已产生入库任务或已入库不能删除
|
||||
QueryWrapper<StIvtStructattr> query = new QueryWrapper<StIvtStructattr>()
|
||||
.eq("vehicle_code", groupDick.get(0).getVehicle_code());
|
||||
List<StIvtStructattr> list = iStIvtStructattrService.list(query);
|
||||
if (ObjectUtils.isNotEmpty(list)) {
|
||||
throw new BadRequestException("删除失败:当前料箱号已入库,库存位置为:" + list.get(0).getStruct_code() + ",无法删除!");
|
||||
}
|
||||
}, StatusEnum.STRATEGY_TYPE.code("出库") + groupDick.get(0).getVehicle_code(), 5);
|
||||
this.removeByIds(Arrays.asList(ids));
|
||||
List<MdPbVehicleMater> vehicleMaterList = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>().select("id").in("group_id", ids));
|
||||
if (ObjectUtil.isNotEmpty(vehicleMaterList)) {
|
||||
|
||||
@@ -55,7 +55,7 @@ public class GroupOrderController {
|
||||
|
||||
@PostMapping("in")
|
||||
@SaIgnore
|
||||
@Log("手持组盘操作")
|
||||
@Log("手持合格证组盘操作")
|
||||
public ResponseEntity<Object> inStorage(@RequestBody MaterGroupDto form) {
|
||||
Assert.noNullElements(new Object[]{form,form.getItem(),form.getStor_code()},"请求参数不能为空");
|
||||
for (MaterItem item : form.getItem()) {
|
||||
|
||||
@@ -6,6 +6,7 @@ import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.anno.Log;
|
||||
@@ -24,6 +25,7 @@ import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
@@ -32,6 +34,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -58,6 +61,7 @@ public class IOStorageController {
|
||||
@PostMapping("out")
|
||||
@SaIgnore
|
||||
@Log("手持出库出库确认")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseEntity<Object> outStorage(@RequestBody JSONObject form) {
|
||||
String vehicle_code = form.getString("vehicle_code");
|
||||
List<MdPbVehicleMater> ones = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
|
||||
@@ -68,16 +72,31 @@ public class IOStorageController {
|
||||
RedissonUtils.lock(() -> {
|
||||
QueryWrapper<StIvtStructattr> query = new QueryWrapper<StIvtStructattr>()
|
||||
.eq("is_used", true)
|
||||
.eq("lock_type", StatusEnum.LOCK.code("无锁"))
|
||||
.eq("vehicle_code", vehicle_code);
|
||||
List<StIvtStructattr> list = iStIvtStructattrService.list(query);
|
||||
//todo 二楼出库调通后注释
|
||||
long storageCount = list.stream().filter(r -> r.getStor_code().equals(StatusEnum.STOCK_INFO.code("FStockPallet")) ||
|
||||
r.getStor_code().equals(StatusEnum.STOCK_INFO.code("料箱库")) ||
|
||||
r.getStor_code().equals(StatusEnum.STOCK_INFO.code("虚拟库"))).count();
|
||||
if (storageCount > 0) {
|
||||
throw new BadRequestException(String.format("出库确认失败:当前载具号在立库的库位中未出库:%s中,请核查库存记录!", list.get(0).getStruct_code()));
|
||||
if (ObjectUtils.isNotEmpty(list)) {
|
||||
List<StIvtStructattr> ivtList = list.stream().filter(r -> r.getStor_code().equals(StatusEnum.STOCK_INFO.code("二楼ctu缓存库")) ||
|
||||
r.getStor_code().equals(StatusEnum.STOCK_INFO.code("二楼货架缓存库"))).collect(Collectors.toList());
|
||||
if (ObjectUtils.isNotEmpty(ivtList)) {
|
||||
//CTU线边库已出库,未确认,清除CTU库库存与组盘记录
|
||||
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
|
||||
.set("is_delete", true)
|
||||
.set("qty", "0")
|
||||
.set("update_time", DateUtil.now())
|
||||
.set("update_name", SecurityUtils.getCurrentNickName())
|
||||
.eq("vehicle_code", vehicle_code)
|
||||
.eq("is_delete", false));
|
||||
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
|
||||
.set("lock_type", StatusEnum.LOCK.code("无锁"))
|
||||
.set("vehicle_code",null)
|
||||
.set("update_time", DateUtil.now())
|
||||
.set("update_name", SecurityUtils.getCurrentNickName())
|
||||
.eq("struct_code", ivtList.get(0).getStruct_code()));
|
||||
} else {
|
||||
throw new BadRequestException(String.format("出库确认失败:当前载具号在立库的库位中未出库:%s中,请核查库存记录!", list.get(0).getStruct_code()));
|
||||
}
|
||||
}
|
||||
|
||||
}, StatusEnum.STRATEGY_TYPE.code("出库") + vehicle_code, 5);
|
||||
//流程校验
|
||||
for (MdPbVehicleMater one : ones) {
|
||||
|
||||
@@ -12,7 +12,6 @@ import com.kingdee.bos.webapi.sdk.K3CloudApi;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.checkerframework.checker.units.qual.A;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.*;
|
||||
@@ -22,8 +21,6 @@ import org.nl.wms.base_manage.material.service.dao.MdMeMaterialbase;
|
||||
import org.nl.wms.base_manage.material.service.impl.MdMeMaterialbaseServiceImpl;
|
||||
import org.nl.wms.base_manage.measure.service.dao.BmMeasureUnit;
|
||||
import org.nl.wms.base_manage.measure.service.impl.BmMeasureUnitServiceImpl;
|
||||
import org.nl.wms.base_manage.sect.service.IStIvtSectattrService;
|
||||
import org.nl.wms.base_manage.sect.service.dao.StIvtSectattr;
|
||||
import org.nl.wms.config_manage.form_struc.service.IBmFormStrucService;
|
||||
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
|
||||
import org.nl.wms.dispatch_manage.point.service.ISchBasePointService;
|
||||
@@ -61,7 +58,10 @@ import org.springframework.util.Assert;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@@ -250,6 +250,9 @@ public class PdaIOService {
|
||||
if (ObjectUtils.isEmpty(pointList)) {
|
||||
throw new BadRequestException("输入的站点编号有误或被禁用,请检查!");
|
||||
}
|
||||
if (pointList.get(0).getLock_type().equals(StatusEnum.LOCK.code("无锁")) && "0".equals(pointList.get(0).getPoint_type())) {
|
||||
throw new BadRequestException("小车搬运任务未完成,请稍后再扫码确认!");
|
||||
}
|
||||
if (StringUtils.isNotBlank(pointList.get(0).getVehicle_code())) {
|
||||
List<StIvtStructattr> stIvtStructattrList = iStIvtStructattrService.list(new LambdaQueryWrapper<StIvtStructattr>()
|
||||
.eq(StIvtStructattr::getSect_code, pointList.get(0).getVehicle_code())
|
||||
@@ -259,7 +262,7 @@ public class PdaIOService {
|
||||
.collect(Collectors.toList());
|
||||
//清除载具物料组盘信息
|
||||
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
|
||||
.set("frozen_qty",0)
|
||||
.set("frozen_qty", 0)
|
||||
.set("qty",0)
|
||||
.set("is_delete",true)
|
||||
.set("remark","该料箱的物料已从产线取走")
|
||||
|
||||
@@ -86,7 +86,7 @@ public class PmFormDataController {
|
||||
|
||||
|
||||
@PostMapping ("/syncFeedBack")
|
||||
@Log("手动同步单据")
|
||||
@Log("手动回执单同步")
|
||||
public ResponseEntity<Object> syncFeedBack(@RequestBody JSONObject fromData) {
|
||||
return new ResponseEntity<>(iPmFormDataService.syncFeedBack(fromData),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@@ -109,7 +109,7 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
|
||||
|
||||
|
||||
/**
|
||||
* 手动同步单据
|
||||
* 手动推送回执单据
|
||||
*/
|
||||
@Override
|
||||
public String syncFeedBack(JSONObject jsonData) {
|
||||
|
||||
@@ -6,16 +6,14 @@ import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.kingdee.bos.webapi.entity.*;
|
||||
import com.kingdee.bos.webapi.sdk.K3CloudApi;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.utils.BaseCode;
|
||||
import org.nl.common.utils.ErpServiceUtils;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.common.utils.*;
|
||||
import org.nl.config.lucene.LuceneAppender;
|
||||
import org.nl.wms.base_manage.material.service.IMdMeMaterialbaseService;
|
||||
import org.nl.wms.base_manage.material.service.dao.MdMeMaterialbase;
|
||||
@@ -26,6 +24,7 @@ import org.nl.wms.external_system.erp.dto.ErpSec;
|
||||
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
|
||||
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
|
||||
import org.nl.wms.pm_manage.form_data.service.dao.mapper.PmFormDataMapper;
|
||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||
import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping;
|
||||
import org.nl.wms.sync_manage.service.form_mapping.impl.SyncFormMappingServiceImpl;
|
||||
import org.slf4j.MDC;
|
||||
@@ -35,6 +34,7 @@ import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
@@ -275,7 +275,7 @@ public class SyncErpBillsScheduleService {
|
||||
.filter(rt -> new HashSet<>(Arrays.asList("1233925", "1233926")).contains(rt.getForm_data().getString(stockId)))
|
||||
.collect(Collectors.toList());
|
||||
if (ObjectUtils.isNotEmpty(filteredDetails)) {
|
||||
mainBill.addAll(filteredDetails);
|
||||
mainBill.addAll(detailWithStock);
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
@@ -295,15 +295,35 @@ public class SyncErpBillsScheduleService {
|
||||
}
|
||||
}
|
||||
for (PmFormData f : mainBill) {
|
||||
if (exitFormDataList.contains(f.getId() + "$" + f.getForm_type())) {
|
||||
continue 外部;
|
||||
//存在ID,主单据不新增不修改,修改未出库单据的明细
|
||||
String id = f.getId() + "$" + f.getForm_type();
|
||||
if (exitFormDataList.contains(id)) {
|
||||
//单据明细
|
||||
if (StringUtils.isBlank(f.getCode())) {
|
||||
PmFormData existDtlData = formDataService.getOne(new QueryWrapper<PmFormData>().eq("id",id).select("qty"));
|
||||
//同步修改未出库单据
|
||||
if (existDtlData.getQty().compareTo(BigDecimal.ZERO) > 0||f.getPlan_qty().compareTo(f.getAssign_qty()) > 0) {
|
||||
formDataService.update(new LambdaUpdateWrapper<PmFormData>()
|
||||
.set(PmFormData::getMaterial_id, f.getMaterial_id())
|
||||
.set(PmFormData::getQty, f.getQty())
|
||||
.set(PmFormData::getAssign_qty, f.getAssign_qty())
|
||||
.set(PmFormData::getUnit_id, f.getUnit_id())
|
||||
.set(PmFormData::getForm_data, JSON.toJSONString(f.getForm_data()))
|
||||
.set(PmFormData::getPlan_qty, f.getPlan_qty())
|
||||
.set(PmFormData::getBar_code, f.getBar_code())
|
||||
.set(PmFormData::getUpdate_name, DateUtil.now())
|
||||
.set(PmFormData::getUpdate_name, SecurityUtils.getCurrentNickName())
|
||||
.eq(PmFormData::getId, id));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//单据明细
|
||||
if (StringUtils.isBlank(f.getCode())) {
|
||||
f.setParent_id(mainId + "$" + formType);
|
||||
}
|
||||
f.setId(id);
|
||||
formDataService.save(f);
|
||||
}
|
||||
//单据明细
|
||||
if (StringUtils.isBlank(f.getCode())) {
|
||||
f.setParent_id(mainId + "$" + formType);
|
||||
}
|
||||
f.setId(f.getId() + "$" + f.getForm_type());
|
||||
formDataService.save(f);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
errorMsg.put("result第"+i+1+"条解析异常:",e.getMessage());
|
||||
|
||||
Reference in New Issue
Block a user