opt:子卷装箱测试

This commit is contained in:
2024-05-14 22:49:10 +08:00
parent 324d05fd5e
commit 68b6ddb793
7 changed files with 100 additions and 56 deletions

View File

@@ -5,18 +5,27 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation;
import org.nl.b_lms.pdm.subpackagerelation.dao.mapper.PdmBiSubpackagerelationMapper; import org.nl.b_lms.pdm.subpackagerelation.dao.mapper.PdmBiSubpackagerelationMapper;
import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
import org.nl.b_lms.sch.tasks.first_floor_area.ZxqTask;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService;
import org.nl.common.enums.PackageInfoIvtEnum;
import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.SecurityUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.modules.common.exception.BadRequestException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.common.domain.query.PageQuery; import org.nl.common.domain.query.PageQuery;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
@@ -34,10 +43,15 @@ import java.util.stream.Collectors;
public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpackagerelationMapper, PdmBiSubpackagerelation> implements IpdmBiSubpackagerelationService { public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpackagerelationMapper, PdmBiSubpackagerelation> implements IpdmBiSubpackagerelationService {
@Resource
private ZxqTask zxqTask;
@Resource
private OutBoxManageService outBoxManageService;
@Resource @Resource
private PdmBiSubpackagerelationMapper pdmBiSubpackagerelationMapper; private PdmBiSubpackagerelationMapper pdmBiSubpackagerelationMapper;
/** /**
* 查询数据分页 * 查询数据分页
* *
@@ -156,7 +170,9 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
* @param whereJson 分配信息 * @param whereJson 分配信息
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void updateEntityList(JSONObject whereJson) { public void updateEntityList(JSONObject whereJson) {
List<PdmBiSubpackagerelation> packagerelationList= JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class);
List<String> entityList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class).stream() List<String> entityList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class).stream()
.map(PdmBiSubpackagerelation::getWorkorder_id) .map(PdmBiSubpackagerelation::getWorkorder_id)
.map(String::valueOf) .map(String::valueOf)
@@ -172,11 +188,71 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
.map(Integer::parseInt) .map(Integer::parseInt)
.max(Integer::compareTo) .max(Integer::compareTo)
.orElse(0) + 1; .orElse(0) + 1;
UpdateWrapper<PdmBiSubpackagerelation> updateWrapper = new UpdateWrapper<>(); try {
updateWrapper.set("box_type", whereJson.getString("checked")); // code终点,material_code木箱规格,num: 子卷数
updateWrapper.set("box_group", maxBoxGroup); UpdateWrapper<PdmBiSubpackagerelation> updateWrapper = new UpdateWrapper<>();
updateWrapper.in("workorder_id", entityList); String boxType = whereJson.getString("checked");
pdmBiSubpackagerelationMapper.update(null, updateWrapper); updateWrapper.set("box_type", boxType);
updateWrapper.set("box_group", maxBoxGroup);
updateWrapper.in("workorder_id", entityList);
pdmBiSubpackagerelationMapper.update(null, updateWrapper);
//下发空木箱出库任务
JSONObject boxInfo = new JSONObject();
//todo 测试暂时默认ZXQ_1_1
boxInfo.put("device_code", "ZXQ_1_1");
boxInfo.put("material_code", boxType);
boxInfo.put("num", entityList.size());
// String boxSn = outBoxManageService.outBox(boxInfo);
String boxSn = "111";
if (StringUtils.isBlank(boxSn)) {
throw new BadRequestException("满轴缓存位 -> 待检区,木箱码不能为空!");
}
//更新子卷包装关系更新木箱号
UpdateWrapper<PdmBiSubpackagerelation> updateWrapper1 = new UpdateWrapper<>();
updateWrapper1.set("package_box_sn", boxSn);
updateWrapper1.in("workorder_id", entityList);
pdmBiSubpackagerelationMapper.update(null, updateWrapper1);
//创建子卷搬运到装箱区任务
// List<BstIvtPackageinfoivt> zxqPointList = packageinfoivtService
// .list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
// .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("装箱区"))
// .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
// .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空"))
// .orderByAsc(BstIvtPackageinfoivt::getSort_seq));
// //装箱区有点位,就下发
// if (CollectionUtils.isNotEmpty(zxqPointList)) {
//下发装箱区->装箱对接位桁架任务
JSONObject jo = new JSONObject();
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区"));
//todo 测试,装箱点位-1-1
jo.put("point_code1", "ZXQ_1_2");
//todo 测试装箱对接位01
jo.put("point_code2", "ZXQ_1_1");
jo.put("vehicle_code", packagerelationList.get(0).getContainer_name());
jo.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
jo.put("is_send", "1");
//todo 测试,扩展参数
JSONObject param = new JSONObject();
//木箱最大数量
param.put("maxNo", "1");
//木箱放入子卷数量
param.put("boxNo", "1");
//是否最后子卷
param.put("lastOne", "1");
//子卷号
param.put("barcode", packagerelationList.get(0).getContainer_name());
//子卷长度
param.put("len", packagerelationList.get(0).getLength());
//托盘类型 1小托盘 2大托盘
param.put("containerType", "2");
jo.put("request_param", param.toString());
zxqTask.createTask(jo);
// } else {
// throw new BadRequestException("装箱区暂无空余库位!");
// }
} catch (Exception e) {
throw new BadRequestException(e.getMessage());
}
} }

View File

@@ -52,7 +52,7 @@ public class TwoInBoxTrussTask extends AbstractAcsTask {
.class_type(json.getString("task_type")) .class_type(json.getString("task_type"))
.dtl_type(String.valueOf(dtl_type)) .dtl_type(String.valueOf(dtl_type))
.interaction_json(json.getJSONObject("request_param")) .interaction_json(json.getJSONObject("request_param"))
.remark(json.getString("rem ark")) .remark(json.getString("remark"))
.build(); .build();
resultList.add(dto); resultList.add(dto);
} }

View File

@@ -110,25 +110,7 @@ public class DjqTask extends AbstractAcsTask {
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1()));
//更新库存记录 //更新库存记录
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2())); packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2()));
//PC子卷装箱界面确认包装关系根据子卷号查询包装关系获取木箱规格
String vehicleCode = schBaseTask.getVehicle_code(); String vehicleCode = schBaseTask.getVehicle_code();
PdmBiSubpackagerelation pdmBiSubpackagerelation = pdmBiSubpackagerelationService
.getOne(new LambdaUpdateWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getContainer_name, vehicleCode), false);
if (pdmBiSubpackagerelation != null) {
//如果子卷数大于0与木箱规格不为空,代表已确定子卷包装关系,则查询木箱号并木箱出库
if (pdmBiSubpackagerelation.getQuanlity_in_box().compareTo(BigDecimal.ZERO) > 0 && StringUtils.isNotBlank(pdmBiSubpackagerelation.getBox_type())) {
//device_code终点,material_code木箱规格,num: 子卷数
JSONObject boxInfo = new JSONObject();
boxInfo.put("device_code", schBaseTask.getPoint_code2());
boxInfo.put("material_code", pdmBiSubpackagerelation.getBox_type());
boxInfo.put("num", pdmBiSubpackagerelation.getQuanlity_in_box());
outBoxManageService.outBox(boxInfo);
//todo 4.根据子卷包装关系查询木箱号,调刘先源的空木箱出库服务创建出库任务
String boxSn = "MX240115000152";
//更新子卷包装关系更新木箱号
pdmBiSubpackagerelationService.update(pdmBiSubpackagerelation, new UpdateWrapper<PdmBiSubpackagerelation>().set("package_box_sn", boxSn));
}
}
//5.查询是否有未下发的输送线->满轴位任务,有就下发 //5.查询是否有未下发的输送线->满轴位任务,有就下发
List<SchBaseTask> notIssueTaskList = taskService.list(new LambdaUpdateWrapper<SchBaseTask>() List<SchBaseTask> notIssueTaskList = taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
//确定起点 //确定起点
@@ -141,24 +123,6 @@ public class DjqTask extends AbstractAcsTask {
jo.put("is_send", true); jo.put("is_send", true);
mzhcwTask.createTask(jo); mzhcwTask.createTask(jo);
} }
//6.创建子卷搬运到装箱区任务
List<BstIvtPackageinfoivt> zxqPointList = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("装箱区"))
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
.eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code(""))
.orderByAsc(BstIvtPackageinfoivt::getSort_seq));
//装箱区有点位,就下发
if (CollectionUtils.isNotEmpty(zxqPointList)) {
JSONObject jo = new JSONObject();
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区"));
jo.put("point_code1", schBaseTask.getPoint_code2());
jo.put("point_code2", zxqPointList.get(0).getPoint_code());
jo.put("vehicle_code", vehicleCode);
zxqTask.createTask(jo);
} else {
throw new BadRequestException("装箱区暂无空余库位!");
}
} }
// 取消 // 取消
if (status.equals(IOSEnum.IS_NOTANDYES.code(""))) { if (status.equals(IOSEnum.IS_NOTANDYES.code(""))) {

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -46,8 +47,10 @@ public class ZxqTask extends AbstractAcsTask {
@Resource @Resource
private ZxDjwTask zxDjwTask; private ZxDjwTask zxDjwTask;
@Resource
private DjqTask djqTask;
@Resource @Resource
private IschBaseTaskService taskService; private IschBaseTaskService taskService;
@Resource @Resource
@@ -68,7 +71,7 @@ public class ZxqTask extends AbstractAcsTask {
); );
taskList.forEach(r -> { taskList.forEach(r -> {
AcsTaskDto dto = AcsTaskDto.builder() AcsTaskDto dto = AcsTaskDto.builder()
.ext_task_id(r.getTask_id().toString()) .ext_task_id(r.getTask_id())
.task_code(r.getTask_code()) .task_code(r.getTask_code())
.task_type(r.getAcs_task_type()) .task_type(r.getAcs_task_type())
.start_device_code(r.getPoint_code1()) .start_device_code(r.getPoint_code1())
@@ -79,10 +82,10 @@ public class ZxqTask extends AbstractAcsTask {
.priority(r.getPriority()) .priority(r.getPriority())
.remark(r.getRemark()) .remark(r.getRemark())
.product_area(r.getProduct_area()) .product_area(r.getProduct_area())
.interaction_json(JSON.parseObject(r.getRequest_param()))
.agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼叉车系统")) .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼叉车系统"))
//.truss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务")) //.truss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务"))
//.dtl_type(r.getDtl_type()) //.dtl_type(r.getDtl_type())
//.params(r.getParams())
.build(); .build();
resultList.add(dto); resultList.add(dto);
}); });
@@ -187,6 +190,7 @@ public class ZxqTask extends AbstractAcsTask {
.create_name(SecurityUtils.getCurrentUsername()) .create_name(SecurityUtils.getCurrentUsername())
.create_time(DateUtil.now()) .create_time(DateUtil.now())
.is_send(isSend ? "1" : "0") .is_send(isSend ? "1" : "0")
.request_param(form.getString("request_param"))
.acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type"))
.task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status"))
.product_area(StrUtil.isEmpty(form.getString("product_area")) ? "A1" : form.getString("product_area")) .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "A1" : form.getString("product_area"))

View File

@@ -37,10 +37,10 @@ public class AppUpdateController {
@SaIgnore @SaIgnore
public ResponseEntity<Object> appUpdate() { public ResponseEntity<Object> appUpdate() {
JSONObject obj = new JSONObject(); JSONObject obj = new JSONObject();
// obj.put("versionName","1.0.1"); // obj.put("versionName","1.0.1");
String app_rul = iSysParamService.findByCode("APP_URL").getValue(); String app_rul = iSysParamService.findByCode("APP_URL").getValue();
String app_version = iSysParamService.findByCode("APP_VERSION").getValue(); String app_version = iSysParamService.findByCode("APP_VERSION").getValue();
// obj.put("url","http://172.17.2.163:8080/apk/app.apk"); // obj.put("url","http://172.17.2.163:8080/apk/app.apk");
obj.put("url", app_rul); obj.put("url", app_rul);
obj.put("versionName", app_version); obj.put("versionName", app_version);
return new ResponseEntity<>(obj, HttpStatus.OK); return new ResponseEntity<>(obj, HttpStatus.OK);

View File

@@ -199,6 +199,7 @@ export default {
}, },
methods: { methods: {
handleSearch() { handleSearch() {
debugger
this.multipleSelection = this.multipleSelection.filter(i => { return this.$refs.dis_table.selection.includes(i) }) this.multipleSelection = this.multipleSelection.filter(i => { return this.$refs.dis_table.selection.includes(i) })
this.currentSelection = [...this.$refs.dis_table.selection] this.currentSelection = [...this.$refs.dis_table.selection]
}, },
@@ -231,7 +232,6 @@ export default {
table2.clearSelection() table2.clearSelection()
const selectedRows = this.multipleSelection const selectedRows = this.multipleSelection
selectedRows.forEach(row => { selectedRows.forEach(row => {
debugger
table2.toggleRowSelection(row) table2.toggleRowSelection(row)
}) })
// this.$refs.dis_table.clearSelection() // this.$refs.dis_table.clearSelection()
@@ -270,7 +270,6 @@ export default {
}, },
getMultipleSelection(multipleSelection) { getMultipleSelection(multipleSelection) {
return multipleSelection.reduce((acc, item) => { return multipleSelection.reduce((acc, item) => {
debugger
const existingItem = acc.find(existing => existing.container_name === item.container_name) const existingItem = acc.find(existing => existing.container_name === item.container_name)
if (!existingItem) { if (!existingItem) {
acc.push(item) acc.push(item)
@@ -296,7 +295,6 @@ export default {
}, },
// 表格1的行点击事件 // 表格1的行点击事件
handleRowClick(scope) { handleRowClick(scope) {
debugger
const table2 = this.$refs.dis_table const table2 = this.$refs.dis_table
const table2Data = Array.from(this.openParam) const table2Data = Array.from(this.openParam)
const groupValue = scope.box_group === 0 ? scope.container_name : scope.box_group const groupValue = scope.box_group === 0 ? scope.container_name : scope.box_group
@@ -330,6 +328,7 @@ export default {
tableChanged(row) { tableChanged(row) {
this.form.tableMater = this.currentSelection this.form.tableMater = this.currentSelection
this.form.checked = row.material_code this.form.checked = row.material_code
debugger
this.form.sale_order_name = this.sale_order_name this.form.sale_order_name = this.sale_order_name
crudPackagerelation.updateEntityList(this.form).then(res => { crudPackagerelation.updateEntityList(this.form).then(res => {
crudSubpackagerelation.queryContainerization({ 'sale_order_name': this.sale_order_name }).then(res => { crudSubpackagerelation.queryContainerization({ 'sale_order_name': this.sale_order_name }).then(res => {
@@ -342,9 +341,7 @@ export default {
}) })
}, },
divStruct() { divStruct() {
debugger
if (this.currentSelection.length > 0 && this.$refs.dis_table.selection.length > 0) { if (this.currentSelection.length > 0 && this.$refs.dis_table.selection.length > 0) {
debugger
this.structShow = true this.structShow = true
this.$refs.child.getMsg(false) this.$refs.child.getMsg(false)
} else { } else {

View File

@@ -125,7 +125,7 @@
<!--分页组件--> <!--分页组件-->
<pagination /> <pagination />
</div> </div>
<DivDialog :dialog-show.sync="divShow" :open-param="openParam" :sale_order_name="sale_order_name" @childEvent="handleChildEvent" @AddChanged="querytable" /> <DivDialog :dialog-show.sync="divShow" :open-param="openParam" :sale_order_name="this.sale_order_name" @childEvent="handleChildEvent" @AddChanged="querytable" />
</div> </div>
</template> </template>
@@ -146,7 +146,7 @@ const defaultForm = {
quanlity_in_box: null, quanlity_in_box: null,
box_weight: null, box_weight: null,
quality_guaran_period: null, quality_guaran_period: null,
sale_order_name: null, sale_order_names: null,
customer_name: null, customer_name: null,
customer_description: null, customer_description: null,
product_name: null, product_name: null,
@@ -225,13 +225,16 @@ export default {
}, },
// 双击 // 双击
divOpen(row) { divOpen(row) {
debugger
this.sale_order_name = row.sale_order_name this.sale_order_name = row.sale_order_name
crudSubpackagerelation.queryContainerization({ 'sale_order_name': row.sale_order_name }).then(res => { crudSubpackagerelation.queryContainerization({ 'sale_order_name': row.sale_order_name }).then(res => {
debugger
this.openParam = res.content this.openParam = res.content
this.divShow = true this.divShow = true
}) })
}, },
divOpen1() { divOpen1() {
debugger
this.sale_order_name = this.currentRow.sale_order_name this.sale_order_name = this.currentRow.sale_order_name
crudSubpackagerelation.queryContainerization({ 'sale_order_name': this.currentRow.sale_order_name }).then(res => { crudSubpackagerelation.queryContainerization({ 'sale_order_name': this.currentRow.sale_order_name }).then(res => {
this.openParam = res.content this.openParam = res.content