add:增加合格证入库功能。

This commit is contained in:
2024-11-27 10:01:26 +08:00
parent db39bffda5
commit 2e5b92f026
11 changed files with 261 additions and 37 deletions

View File

@@ -3,18 +3,14 @@ package org.nl.common.utils;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.T;
import org.nl.common.domain.exception.BadRequestException;
import org.springframework.expression.Expression;
import org.springframework.expression.spel.SpelEvaluationException;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
@@ -79,10 +75,11 @@ public class SpelUtil {
// System.out.println(value);
}
//如果表达式为null,空则返回''
private static Map<String,String> Product_Area_Mapping = MapOf.of(
"","A1"
,"","A2"
,"","A3");
private static Map<String, String> Product_Area_Mapping = MapOf.of(
"827083", "A1", "827082", "A1", "827081", "A1", "827080", "A1", "1028689", "A1", "1028688", "A1", "827077", "A1", "827076", "A1"
, "827075", "A1", "827074", "A1", "827073"
, "827078", "A2", "827079", "A2"
, "", "A3");
public static Map<String,String> parse(JSONObject sourceData,Map<String,String> fieldSkip){
StandardEvaluationContext context = new StandardEvaluationContext();
context.setVariable("M",sourceData);

View File

@@ -13,10 +13,14 @@ import org.nl.wms.base_manage.bsrealstorattr.service.impl.StIvtBsrealstorattrSer
import org.nl.wms.base_manage.customer.service.impl.BmCustomerServiceImpl;
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.supplier.service.IBmSupplierService;
import org.nl.wms.external_system.erp.dto.ErpQuery;
import org.nl.wms.external_system.erp.dto.ErpSec;
import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping;
import org.nl.wms.system_manage.service.dept.dao.SysDept;
import org.nl.wms.system_manage.service.dept.impl.SysDeptServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -56,28 +60,30 @@ public class SyncErpService {
private BmCustomerServiceImpl bmCustomerServiceImpl;
@Autowired
private StIvtBsrealstorattrServiceImpl stIvtBsrealstorattrServiceImpl;
@Autowired
private BmMeasureUnitServiceImpl bmMeasureUnitServiceImpl;
public List<Object> syncDataTest(SyncFormMapping syncFormMapping) {
List<MdMeMaterialbase> list = mdMeMaterialbaseServiceImpl.list(new LambdaQueryWrapper<MdMeMaterialbase>().lt(MdMeMaterialbase::getMaterial_id, "80000"));
public List<Object> syncUnitData(SyncFormMapping syncFormMapping) {
List<BmMeasureUnit> list = bmMeasureUnitServiceImpl.list();
list.forEach(r -> {
syncDataTest(r.getMaterial_code());
syncUnit(r.getUnit_code());
});
return null;
}
public List<Object> syncDataTest(String fNumber) {
public List<Object> syncUnit(String fNumber) {
List<Object> result = new ArrayList<>();
try {
String sd = String.format("FNumber ='%s'", fNumber);
String filterString = "FNumber = '" + fNumber + "'";
// String filterString = "FCreateOrgId ='750572' AND FNumber = '" + fNumber + "'";
IdentifyInfo identifyInfo = new IdentifyInfo();
BeanUtils.copyProperties(erpSec, identifyInfo);
K3CloudApi cloudApi = new K3CloudApi(identifyInfo);
String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
ErpQuery query = new ErpQuery();
query.setFilterString(sd);
query.setFormId("BD_MATERIAL");
query.setFieldKeys("FMATERIALID,FNumber");
query.setFilterString(filterString);
query.setFormId("BD_UNIT");
query.setFieldKeys("FUNITID,FNumber");
//query.setLimit(10);
String jsonString = JSON.toJSONString(query);
List<List<Object>> lists = cloudApi.executeBillQuery(jsonString);
@@ -91,6 +97,62 @@ public class SyncErpService {
}
ids.add(fid);
}
if (ids.size() > 1) {
List<BmMeasureUnit> sds = bmMeasureUnitServiceImpl.list(new LambdaQueryWrapper<BmMeasureUnit>().eq(BmMeasureUnit::getUnit_code, ids.get(1)));
if (ObjectUtils.isNotEmpty(sds)) {
if (StringUtils.isNotBlank(ids.get(0)) && StringUtils.isNotBlank(ids.get(1))) {
String id = ids.get(0);
String code = ids.get(1);
LambdaUpdateWrapper<BmMeasureUnit> data = new LambdaUpdateWrapper<>();
data.eq(BmMeasureUnit::getUnit_code, code);
data.set(BmMeasureUnit::getUnit_id, id);
bmMeasureUnitServiceImpl.update(data);
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("同步失败:" + ex.getMessage());
}
return result;
}
public List<Object> syncMaterialData(SyncFormMapping syncFormMapping) {
List<MdMeMaterialbase> list = mdMeMaterialbaseServiceImpl.list(new LambdaQueryWrapper<MdMeMaterialbase>().eq(MdMeMaterialbase::getMaterial_id, "0"));
list.forEach(r -> {
syncMaterial(r.getMaterial_code());
});
return null;
}
public List<Object> syncMaterial(String fNumber) {
List<Object> result = new ArrayList<>();
try {
IdentifyInfo identifyInfo = new IdentifyInfo();
BeanUtils.copyProperties(erpSec, identifyInfo);
K3CloudApi cloudApi = new K3CloudApi(identifyInfo);
//String filterString = "FNumber ='" + fNumber + "'";
String filterString = "FUseOrgId='750572' AND FNumber ='" + fNumber + "'";
ErpQuery query = new ErpQuery();
query.setFilterString(filterString);
query.setFormId("BD_MATERIAL");
query.setFieldKeys("FMATERIALID,FNumber");
//query.setLimit(10);
String jsonString = JSON.toJSONString(query);
List<List<Object>> lists = cloudApi.executeBillQuery(jsonString);
log.info("同步ERP结果" + lists.size());
List<String> ids = new ArrayList<>();
if (ObjectUtils.isNotEmpty(lists)) {
List<Object> firstList = lists.get(0);
for (Object r : firstList) {
String fid = r.toString();
if (StringUtils.isEmpty(fid)) {
throw new RuntimeException("单据同步失败,没有找到FID");
}
ids.add(fid);
}
}
if (ids.size() > 1) {
List<MdMeMaterialbase> sds = mdMeMaterialbaseServiceImpl.list(new LambdaQueryWrapper<MdMeMaterialbase>().eq(MdMeMaterialbase::getMaterial_code, ids.get(1)));
if (ObjectUtils.isNotEmpty(sds)) {
@@ -127,9 +189,9 @@ public class SyncErpService {
ErpQuery query = new ErpQuery();
// query.setFilterString(filterString);
//query.setFormId(syncFormMapping.getForm_type());
query.setFormId("BD_MATERIAL");
query.setFieldKeys("FMATERIALID,FNumber");
query.setLimit(10);
query.setFormId("PRD_MO");
query.setFieldKeys("FID");
query.setLimit(2);
String jsonString = JSON.toJSONString(query);
List<List<Object>> lists = cloudApi.executeBillQuery(jsonString);
log.info("同步ERP结果" + lists.size());
@@ -147,7 +209,7 @@ public class SyncErpService {
Map<String, String> error = new HashMap<>();
for (String id : ids) {
param.setId(id);
OperatorResult view = cloudApi.view("BD_MATERIAL", param);
OperatorResult view = cloudApi.view("PRD_MO", param);
RepoStatus status = view.getResult().getResponseStatus();
if (status.isIsSuccess()) {
result.add(view.getResult().getResult());

View File

@@ -131,5 +131,12 @@ public class PdaCommonController {
}
}

View File

@@ -0,0 +1,61 @@
package org.nl.wms.pda_manage.iostorage;
import cn.dev33.satoken.annotation.SaIgnore;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.common.domain.entity.PageQuery;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.RedissonUtils;
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.pda_manage.iostorage.server.dto.PdaFormOutMst;
import org.nl.wms.pda_manage.iostorage.sevice.PdaIOService;
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
import org.nl.wms.pm_manage.form_data.service.dto.FormDataQuery;
import org.nl.wms.pm_manage.form_data.service.dto.PmFormDataDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* <p>
* 手持单据入库
* </p>
*
* @author generator
* @since 2024-03-28
*/
@RestController
@RequestMapping("api/pda/inStorage")
@SaIgnore
public class PdaInController {
@Autowired
private PdaIOService pdaIOService;
@PostMapping("/confirm")
@Log("单据入库组盘确认")
public ResponseEntity<TableDataInfo> confirm(@RequestBody PdaFormOutMst pdaFormOutMst) {
RedissonUtils.lock(() -> {
//pdaIOService.PpdaOrderInStorage(pdaFormOutMst);
}, pdaFormOutMst.getCode(), null);
return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK);
}
@GetMapping("/getCertificateInfo/{id}")
@Log("根据合格证查询物料信息")
public ResponseEntity<Object> getCertificateInfo(@PathVariable String id) {
return new ResponseEntity<>(pdaIOService.getCertificateInfo(id), HttpStatus.OK);
}
}

View File

@@ -8,15 +8,11 @@ import org.nl.common.anno.Log;
import org.nl.common.domain.entity.PageQuery;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.RedisUtils;
import org.nl.common.utils.RedissonUtils;
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.flow_manage.flow.service.execution.IActRuExecutionService;
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.pda_manage.iostorage.server.dto.PdaFormOutMst;
import org.nl.wms.pda_manage.iostorage.sevice.PdaIOService;
import org.nl.wms.pda_manage.palletio.service.dto.LabelValueVo;
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
import org.nl.wms.pm_manage.form_data.service.dto.FormDataQuery;
import org.nl.wms.pm_manage.form_data.service.dto.PmFormDataDto;

View File

@@ -3,19 +3,25 @@ package org.nl.wms.pda_manage.iostorage.sevice;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.kingdee.bos.webapi.entity.IdentifyInfo;
import com.kingdee.bos.webapi.sdk.K3CloudApi;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.*;
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.external_system.erp.dto.ErpQuery;
import org.nl.wms.external_system.erp.dto.ErpSec;
import org.nl.wms.pda_manage.iostorage.server.dto.PdaFormOutDtl;
import org.nl.wms.pda_manage.iostorage.server.dto.PdaFormOutMst;
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
import org.nl.wms.stor_manage.io.service.iostor.IStIvtIostorinvService;
import org.nl.wms.stor_manage.io.service.iostor.dao.StIvtIostorinv;
import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService;
import org.nl.wms.stor_manage.io.service.iostor_dtl.dao.StIvtIostorinvdtl;
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -25,11 +31,12 @@ import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class PdaIOService {
@Autowired
ErpSec erpSec;
@Autowired
IBmFormStrucService iBmFormStrucService;
@Autowired
@@ -37,7 +44,8 @@ public class PdaIOService {
@Autowired
IStIvtIostorinvdtlService iStIvtIostorinvdtlService;
public void PpdaOrderOutStorage(PdaFormOutMst pdaFormOutMst){
public void PpdaOrderOutStorage(PdaFormOutMst pdaFormOutMst) {
PdaIOService ioService = SpringContextHolder.getBean(PdaIOService.class);
//创建单据分配货位
StIvtIostorinv ivtIostorinv = ioService.createPadIvtAndoutDispense(pdaFormOutMst);
@@ -45,14 +53,15 @@ public class PdaIOService {
//生成流程
this.pdaTaskOpen(byId);
}
@Transactional
public StIvtIostorinv createPadIvtAndoutDispense(PdaFormOutMst pdaFormOutMst){
public StIvtIostorinv createPadIvtAndoutDispense(PdaFormOutMst pdaFormOutMst) {
// || StringUtils.isEmpty(pdaFormOutMst.getStor_code())
if (pdaFormOutMst == null || !pdaFormOutMst.getHasChildren()){
if (pdaFormOutMst == null || !pdaFormOutMst.getHasChildren()) {
throw new BadRequestException("出库申请失败:请求参数异常");
}
List<PdaFormOutDtl> dtls = pdaFormOutMst.getChildren();
if (CollectionUtils.isEmpty(dtls)){
if (CollectionUtils.isEmpty(dtls)) {
throw new BadRequestException("出库申请失败:出库明细不能为空");
}
BmFormStruc formType = iBmFormStrucService.getFormType(pdaFormOutMst.getForm_type());
@@ -102,7 +111,53 @@ public class PdaIOService {
}
return mst;
}
private void pdaTaskOpen(StIvtIostorinv mst){
private void pdaTaskOpen(StIvtIostorinv mst) {
iStIvtIostorinvService.taskOpen((JSONObject) JSONObject.toJSON(mst));
}
public PmFormData getCertificateInfo(String id) {
PmFormData result = new PmFormData();
try {
if (id.contains("OP")) {
getOpBills(id, result);
} else {
}
} catch (Exception e) {
throw new BadRequestException("未查询到对应合格证信息!");
}
return result;
}
private void getOpBills(String id, PmFormData result) throws Exception {
IdentifyInfo identifyInfo = new IdentifyInfo();
BeanUtils.copyProperties(erpSec, identifyInfo);
K3CloudApi cloudApi = new K3CloudApi(identifyInfo);
String filterString = "FBillNo = '" + id + "'";
ErpQuery query = new ErpQuery();
query.setFilterString(filterString);
query.setFormId("SFC_OperationPlanning");
query.setFieldKeys("FBillNo,FProOrgId,FProductId,FProductName,FProSpecification,FMOQty,FMOUnitId,FOwnerId,FLot,FProDepartmentId,FStockInOrgId");
query.setLimit(1);
String jsonString = JSON.toJSONString(query);
List<List<Object>> lists = cloudApi.executeBillQuery(jsonString);
if (ObjectUtils.isNotEmpty(lists)) {
List<Object> dataList = lists.get(0);
if (dataList != null && !dataList.isEmpty()) {
result.setCode(dataList.get(0).toString());
result.setPrdOrgId(dataList.get(1).toString());
result.setMaterial_id(dataList.get(2).toString());
result.setMaterial_name(dataList.get(3).toString());
result.setMaterial_spec(dataList.get(4).toString());
result.setQty(new BigDecimal(dataList.get(5).toString()));
result.setUnit_id(dataList.get(6).toString());
result.setOwnerId(dataList.get(7).toString());
result.setPcsn(dataList.get(8).toString());
result.setProduct_area(dataList.get(9).toString());
result.setStockInOrgId(dataList.get(10).toString());
}
}
}
}

View File

@@ -25,6 +25,8 @@ public interface IPmFormDataService extends IService<PmFormData> {
Integer syncFormData(String type,String dataString);
JSONObject mappingParse(JSONArray mappingJson, BmFormStruc one, JSONObject sourceData);
List<JSONObject> mappingParseList(JSONArray mappingJson, BmFormStruc one, JSONObject sourceData);

View File

@@ -10,6 +10,7 @@ import java.io.Serializable;
import java.util.List;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import jdk.nashorn.internal.ir.annotations.Ignore;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nl.common.enums.StatusEnum;
@@ -142,6 +143,45 @@ public class PmFormData implements Serializable {
*/
private String remark;
/**
* 生产组织
*/
@TableField(exist = false)
private String prdOrgId;
/**
* 货主
*/
@TableField(exist = false)
private String ownerId;
/**
* 物料名称
*/
@TableField(exist = false)
private String material_name;
/**
* 物料规格
*/
@TableField(exist = false)
private String material_spec;
/**
* 生产车间
*/
@TableField(exist = false)
private String product_area;
/**
* 生产车间
*/
@TableField(exist = false)
private String stockInOrgId;
}

View File

@@ -71,6 +71,9 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
this.saveBatch(pmFormDatas);
return pmFormDatas.size();
}
@Override
public List<PmFormData> syncAnalyse(SyncFormMapping formMapping, String sourceString) {
try {
@@ -132,7 +135,7 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
return result;
} catch (Exception ex) {
log.error("ERP单据解析异常" + ex.getMessage());
return null;
throw new BadRequestException(ex.getMessage());
}
}

View File

@@ -1,6 +1,7 @@
package org.nl.wms.stor_manage.pick.controller;
import cn.hutool.core.lang.Assert;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -65,6 +66,10 @@ public class PickingController {
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/savePickTask")
@Log("拣选作业")
public ResponseEntity<Object> savePickTask(@RequestBody JSONArray params) {

View File

@@ -39,10 +39,6 @@ public class SyncErpBillsScheduleService {
private ReentrantLock lock = new ReentrantLock();
@Autowired
ErpSec erpSec;
@Autowired
private ISchBaseTaskService iSchBaseTaskService;
@Autowired
private WmsToAcsService wmsToAcsService;
@Autowired
private SyncFormMappingServiceImpl syncFormMappingServiceImpl;