rev:liantiao1youhua

This commit is contained in:
zhangzq
2024-09-24 17:52:42 +08:00
parent bee9748294
commit 4664761145
11 changed files with 220 additions and 25 deletions

View File

@@ -17,4 +17,15 @@ public class DictConstantPool {
public static final Map<String,String> PRODUCT_OUT_POINT_TP = MapOf.of("A1","1131","A2","2127","A3","3110");
public static Map<String,String> BASE_FORM = MapOf.of(
"biz_id","业务单据单据id"
,"biz_code","业务单据编号"
,"biz_date","业务单据日期"
,"biz_status","业务单据状态"
,"biz_form_type","业务单据类型"
,"material_id","物料id"
,"qty","数量"
,"unit_id","单位"
,"pcsn","批次"
,"vehicle_code","载具");
}

View File

@@ -84,14 +84,20 @@ public class SpelUtil {
Map<String, String> result = new HashMap<>();
for (String field : fieldSkip.keySet()) {
String skip = fieldSkip.get(field);
Expression expression = SpelUtil.SPEL_PARSER.parseExpression(skip);
try {
String value = expression.getValue(context, String.class);
result.put(field,value);
}catch (SpelEvaluationException ex){
throw new BadRequestException("当前业务数据没有映射字段"+field+" 对应的数据"+skip);
if (skip.charAt(0) == '#'){
try {
Expression expression = SpelUtil.SPEL_PARSER.parseExpression(skip);
String value = expression.getValue(context, String.class);
result.put(field,value);
}catch (SpelEvaluationException ex){
ex.printStackTrace();
throw new BadRequestException("当前业务数据没有映射字段"+field+" 对应的数据"+skip);
}
}else {
result.put(field,skip);
}
}
return result;
}

View File

@@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.common.domain.constant.DictConstantPool;
import org.nl.common.domain.entity.PageQuery;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.utils.IdUtil;
@@ -39,16 +40,6 @@ import java.util.stream.Collectors;
@SaIgnore
public class BmFormStrucController {
private static Map<String,String> BASE_FORM = MapOf.of("biz_id","业务单据单据id"
,"biz_code","业务单据编号"
,"biz_date","业务单据日期"
,"biz_status","业务单据状态"
,"biz_form_type","业务单据类型"
,"material_id","物料id"
,"qty","数量"
,"unit_id","单位"
,"pcsn","批次"
,"vehicle_code","载具");
@Autowired
IBmFormStrucService iBmFormStrucService;
@@ -158,7 +149,7 @@ public class BmFormStrucController {
BmFormStruc form_struc = iBmFormStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("form_type", form_type));
HashMap result = MapOf.of("has_child",form_struc.getHas_child(),"form_type", form_struc.getForm_type(), "form_name", form_struc.getForm_name(), "form_desc", form_struc.getForm_desc());
JSONObject form_param = form_struc.getForm_param();
form_param.putAll(BASE_FORM);
form_param.putAll(DictConstantPool.BASE_FORM);
List<Map> items = new ArrayList<>();
for (String key : form_param.keySet()) {
items.add(MapOf.of("lable",form_param.get(key),"value",key));
@@ -170,7 +161,7 @@ public class BmFormStrucController {
throw new BadRequestException("当前表单配置异常:无子表配置信息");
}
JSONObject child_param = child_struc.getForm_param();
child_param.putAll(BASE_FORM);
child_param.putAll(DictConstantPool.BASE_FORM);
for (String key : child_param.keySet()) {
dtl_items.add(MapOf.of("lable",child_param.get(key),"value",key));
}

View File

@@ -23,6 +23,8 @@ public abstract class Decisioner<T,P> implements InitializingBean {
public StStrategyConfig strategyConfig;
@Autowired
private IStStrategyConfigService iStStrategyConfigService;
@Autowired
private SpringContextHolder springContextHolder;
public abstract List<T> handler(List<T> list, P param);

View File

@@ -21,7 +21,7 @@ import java.util.stream.Stream;
* 手动过滤XYZ排信息
* {"y":[1,2,3,104,103,102]}
*/
@Service("passRCL")
//@Service("passRCL")
@Slf4j
public class PassRCLHandler extends Decisioner<StIvtStructattr, JSONObject> {
//现场1/4排深位

View File

@@ -0,0 +1,137 @@
package org.nl.wms.dispatch_manage.task.handler.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.constant.DictConstantPool;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.*;
import org.nl.wms.dispatch_manage.task.handler.AbstractTask;
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.DecisionHandler;
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/*
* @author ZZQ
* @Date 2024/5/6 14:34
* 托盘拣选出库
*/
@Service
@Slf4j
public class PalletOutStorageTask extends AbstractTask {
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private MoveStorageTask moveStorageTask;
@Autowired
private IStIvtStructattrService iStIvtStructattrService;
@Autowired
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
@Override
@Transactional
public JSONObject createTask(JSONObject from) {
String vehicle_code = from.getString("vehicle_code");
String target_point = from.getString("target_point");
//通过全局变量获取目标位置
String product_area = from.getString("product_area");
if (StringUtils.isNotEmpty(product_area)){
String configTarget;
if (vehicle_code.contains("T")){
configTarget = DictConstantPool.PRODUCT_OUT_POINT_TP.get(product_area);
}else {
configTarget = DictConstantPool.PRODUCT_OUT_POINT.get(product_area);
}
if (StringUtils.isEmpty(configTarget)){
throw new BadRequestException("创建任务失败:出库点车间点位对应关系配置异常");
}
target_point=configTarget;
}
if (StringUtils.isEmpty(vehicle_code) ||StringUtils.isEmpty(target_point)){
throw new BadRequestException("创建任务失败:方法请求参数不能为空");
}
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.eq("vehicle_code", vehicle_code)
.ne("task_type",StatusEnum.IOBILL_TYPE_MOVE.code("移库"))
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException("当前载具存在任务:"+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
}
StIvtStructattr struct = iStIvtStructattrService.getOne(new QueryWrapper<StIvtStructattr>().eq("vehicle_code", vehicle_code));
log.info("OutStorgeTask出入分配货位信息:{}",struct.toString());
String end_struct_code = struct.getStruct_code();
SchBaseTask task = new SchBaseTask();
task.setId(IdUtil.getStringId());
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setStatus(StatusEnum.FORM_STATUS.code("生成"));
task.setHandle_class(this.getClass().getName());
task.setAcs_type(StatusEnum.ACS_TYPE.code("立库"));
task.setCreate_time(DateUtil.now());
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setTask_type(from.getString("task_type"));
task.setVehicle_code(vehicle_code);
task.setPoint_code1(end_struct_code);
task.setPoint_code2(target_point);
taskService.save(task);
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
.set(MdPbVehicleMater::getTask_code,task.getTask_code())
.eq(MdPbVehicleMater::getVehicle_code,task.getVehicle_code())
.eq(MdPbVehicleMater::getIs_delete,false));
//TODO:是否下发
Boolean isSend = from.getBoolean("is_send");
if (isSend){
//参数封装调acs接口
}
return (JSONObject)JSON.toJSON(task);
}
@Override
public void updateStatus(JSONObject data) {
this.updateTask(data);
}
@Override
public void finish(JSONObject data) {
data.put("status",StatusEnum.FORM_STATUS.code("完成"));
this.updateTask(data);
SchBaseTask schBaseTask = taskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", data.getString("task_code")));
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.FALSE);
}
@Override
public void cancel(JSONObject data) {
this.updateTask(data);
//更新起点终点状态
}
private static String getZdPoint(int row,String source_code) {
if (row == 2 || row == 3) {
return source_code;
}
int blockRow = row == 1 ? 2 : 3;
String replace = source_code.replaceFirst("L0" + row, "L0%s");
return String.format(replace, blockRow);
}
}

View File

@@ -8,6 +8,7 @@ import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.constant.DictConstantPool;
import org.nl.common.domain.entity.PageQuery;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.utils.*;
@@ -77,8 +78,11 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
throw new BadRequestException("当前表单无配置信息" + formMapping.getForm_type());
}
List<PmFormData> result = new ArrayList<>();
Boolean dtlSplit = formMapping.getDtl_split();
JSONObject sourceData = JSONObject.parseObject(sourceString).getJSONObject("Model");
List<JSONObject> items_arr = mappingParseList(formMapping.getMapping_json(), one, sourceData);
if (!dtlSplit){
List<JSONObject> items_arr = mappingParseList(formMapping.getMapping_json(), one, sourceData);
for (int i = 0; i < items_arr.size(); i++) {
JSONObject itemTarget = items_arr.get(i);
itemTarget.put("id", IdUtil.getStringId());
@@ -88,6 +92,38 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
PmFormData dtl = itemTarget.toJavaObject(PmFormData.class);
result.add(dtl);
}
}else {
JSONObject target = mappingParse(formMapping.getMapping_json(), one, sourceData);
Object items = target.remove("item");
target.put("id",
StringUtils.isEmpty(target.getString("biz_id"))
?IdUtil.getStringId():target.getString("biz_id"));
target.put("code",
StringUtils.isEmpty(target.getString("biz_code"))
?CodeUtil.getNewCode(formMapping.getForm_type()):target.getString("biz_code"));
target.put("create_time", DateUtil.now());
target.put("create_name", SecurityUtils.getCurrentNickName());
PmFormData mst = target.toJavaObject(PmFormData.class);
result.add(mst);
if (items != null) {
JSONArray items_arr = (JSONArray) items;
for (int i = 0; i < items_arr.size(); i++) {
JSONObject itemTarget = items_arr.getJSONObject(i);
itemTarget.put("id",
StringUtils.isEmpty(itemTarget.getString("biz_id"))
?IdUtil.getStringId():itemTarget.getString("biz_id"));
if (StringUtils.isNotEmpty(itemTarget.getString("biz_code"))) {
itemTarget.getString("biz_code");
}
itemTarget.put("create_time", DateUtil.now());
itemTarget.put("create_name", SecurityUtils.getCurrentNickName());
itemTarget.put("parent_id", mst.getId());
PmFormData dtl = itemTarget.toJavaObject(PmFormData.class);
result.add(dtl);
}
}
}
return result;
}
@@ -150,8 +186,15 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
formMap.put(item.getString("value"), item);
}, HashMap::putAll);
//基础字段
Set<String> fields = ListOf.ofSet(formStruc.getBiz_code(), formStruc.getBiz_id(), formStruc.getBiz_code(), formStruc.getBiz_status(), formStruc.getMaterial_id(), formStruc.getPcsn(), formStruc.getVehicle_code(), formStruc.getVehicle_id(),formStruc.getUnit_id(), formStruc.getQty());
JSONObject data = fieldMapping(fields, fieldMapping, sourceData);
JSONObject JFormStruct = (JSONObject)JSONObject.toJSON(formStruc);
HashMap<String, String> bizMap = new HashMap<>();
for (String key : DictConstantPool.BASE_FORM.keySet()) {
String value = JFormStruct.getString(key);
if (StringUtils.isNotEmpty(value)){
bizMap.put(key,value);
}
}
JSONObject data = fieldMapping(bizMap.keySet(), fieldMapping, sourceData);
data.put("form_type",formStruc.getForm_type());
JSONObject form_param = formStruc.getForm_param();
if (form_param != null) {

View File

@@ -77,6 +77,10 @@ public class SyncFormMapping implements Serializable {
* 修改人
*/
private String update_name;
/**
* 明细拆分
*/
private Boolean dtl_split;
}

View File

@@ -7,8 +7,8 @@ spring:
druid:
db-type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://${DB_HOST:192.168.8.218}:${DB_PORT:3306}/${DB_NAME:wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
# url: jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
# url: jdbc:mysql://${DB_HOST:192.168.8.218}:${DB_PORT:3306}/${DB_NAME:wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
url: jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
username: ${DB_USER:root}
password: ${DB_PWD:123456}

View File

@@ -108,7 +108,7 @@
</logger>
</springProfile>
<springProfile name="prod">
<root level="info">
<root level="ERROR">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="asyncLuceneAppender"/>
</root>

View File

@@ -178,6 +178,7 @@
<el-table-column min-width="120" show-overflow-tooltip prop="material_id" label="物料id" align="center" />
<el-table-column min-width="120" show-overflow-tooltip prop="pcsn" label="批次" align="center" />
<el-table-column min-width="120" show-overflow-tooltip prop="qty" label="数量" align="center" />
<el-table-column min-width="120" show-overflow-tooltip prop="unit_id" label="单位" align="center" />
<el-table-column min-width="120" show-overflow-tooltip prop="vehicle_code" label="载具" align="center" />
<el-table-column min-width="120" show-overflow-tooltip prop="status" label="单据状态" align="center" />
<el-table-column v-for="(item, index) in viewMstCols" :key="item.value" min-width="120" show-overflow-tooltip :label="item.lable">