工单修改,新建工单时增加可以多选择所需存放的固化室

This commit is contained in:
psh
2024-07-02 17:48:18 +08:00
parent f5525f2129
commit 128dad4aa5
6 changed files with 113 additions and 41 deletions

View File

@@ -10,6 +10,7 @@ import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
* @description /
@@ -91,6 +92,12 @@ public class PdmBdWorkorder implements Serializable {
@ApiModelProperty(value = "外部标识")
private String ext_id;
@ApiModelProperty(value = "外部数据")
private String ext_data;
@TableField(exist = false)
private List<String> ghs;
@ApiModelProperty(value = "是否删除")
private Boolean is_delete;

View File

@@ -29,6 +29,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
@@ -50,6 +51,11 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
public IPage<PdmBdWorkorder> queryAll(PdmBdWorkorderQuery query, PageQuery page){
IPage<PdmBdWorkorder> pages = new Page<>(page.getPage() + 1, page.getSize());
pages = pdmBdWorkorderMapper.selectPageLeftJoin(pages, query);
for(PdmBdWorkorder pdmBdWorkorder:pages.getRecords()){
if(ObjectUtil.isNotEmpty(pdmBdWorkorder.getExt_data())) {
pdmBdWorkorder.setGhs(Arrays.asList(pdmBdWorkorder.getExt_data().split(",")));
}
}
return pages;
}
@@ -58,7 +64,6 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
// 点位编码和点位名称为父点位
entity.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextIdStr());
entity.setWorkorder_code(CodeUtil.getNewCode("PDM_SHIFTORDER"));
@@ -68,6 +73,11 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
entity.setUpdate_id(currentUserId);
entity.setUpdate_name(nickName);
entity.setUpdate_time(now);
StringBuilder sb=new StringBuilder();
for(String ghs:entity.getGhs()){
sb.append(ghs).append(',');
}
entity.setExt_data(sb.toString());
pdmBdWorkorderMapper.insert(entity);
}
@@ -84,7 +94,11 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
entity.setUpdate_id(currentUserId);
entity.setUpdate_name(nickName);
entity.setUpdate_time(now);
StringBuilder sb=new StringBuilder();
for(String ghs:entity.getGhs()){
sb.append(ghs).append(',');
}
entity.setExt_data(sb.toString());
pdmBdWorkorderMapper.updateById(entity);
}

View File

@@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.system.service.dict.dao.Dict;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.point.service.dao.mapper.SchBasePointMapper;
@@ -182,7 +183,9 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
public List<SchBasePoint> getPointList(SchBasePoint region) {
if (ObjectUtil.isEmpty(region)) return this.list();
return pointMapper.selectList(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getRegion_code, region.getRegion_code()));
.eq(SchBasePoint::getRegion_code, region.getRegion_code())
.eq(ObjectUtil.isNotEmpty(region.getPoint_type()),SchBasePoint::getPoint_type, region.getPoint_type())
.orderByAsc(SchBasePoint::getPoint_code));
}
@Override

View File

@@ -177,38 +177,52 @@ public class TBXMLTask extends AbstractTask {
// 获取物料
MdBaseMaterial material = materialService.getById(workorder.getMaterial_id());
// 获取固化方案
Param curingPlan = paramService.findByCode("CuringPlan");
// Param curingPlan = paramService.findByCode("CuringPlan");
List<SchBasePoint> points = new ArrayList<>();
if (curingPlan.getValue().equals(GeneralDefinition.NOT_MIXING)) {
// 不可混料-需要根据工单上物料的信息
// 1 获取含有该物料并且没满的固化室。
points = tbxMapper.getNotFullByMaterial(nextRegionStr, vehicle_type, workorder.getMaterial_id());
} else if (curingPlan.getValue().equals(GeneralDefinition.CAN_MIXING)) {
// 可混料, 要与物料工艺号相同
// 1 获取同工艺号的位置
points = tbxMapper.getCanMiningPoint(nextRegionStr, vehicle_type, material.getTechnique_num());
} else {
// 自定义混料
// 获取自定义混料对应的plan_code(计划编码)
Param currentMaterials = paramService.getOne(new LambdaQueryWrapper<Param>().eq(Param::getCode, "CurrentMaterials"));
// 获取plan_code对应的物料数组
List<String> details = solidifyPlanService.details(currentMaterials.getValue());
// 判断是否在自定义配方内
if (details.contains(material.getMaterial_id())) {
// 1 寻找可存放的固化室
points = tbxMapper.getSamePlanPoint(nextRegionStr, details, vehicle_type);
if (points.size() == 0) {
// 2 没找到需要找个相同物料可用的位置
// hint: 获取含有该物料并且没满的固化室。
points = tbxMapper.getNotFullByMaterial(nextRegionStr, vehicle_type, workorder.getMaterial_id());
}
}
List<String> ghsList=new ArrayList<>();
//固化室逻辑调整,现在去哪个固化室取决于工单,原有限制不变,原有混料规则废弃
if(ObjectUtil.isNotEmpty(workorder.getExt_data())) {
ghsList=Arrays.asList(workorder.getExt_data().split(","));
}
// 2 没有对应的固化室、没有同工艺号的固化室、没有计划方案对应的固化室,就找新的固化室
points = tbxMapper.getNotFullByMaterial(nextRegionStr, vehicle_type, workorder.getMaterial_id(),ghsList);
// if (curingPlan.getValue().equals(GeneralDefinition.NOT_MIXING)) {
// // 不可混料-需要根据工单上物料的信息
// // 1 获取含有该物料并且没满的固化室。
// points = tbxMapper.getNotFullByMaterial(nextRegionStr, vehicle_type, workorder.getMaterial_id());
// } else if (curingPlan.getValue().equals(GeneralDefinition.CAN_MIXING)) {
// // 可混料, 要与物料工艺号相同
// // 1 获取同工艺号的位置
// points = tbxMapper.getCanMiningPoint(nextRegionStr, vehicle_type, material.getTechnique_num());
// } else {
// // 自定义混料
// // 获取自定义混料对应的plan_code(计划编码)
// Param currentMaterials = paramService.getOne(new LambdaQueryWrapper<Param>().eq(Param::getCode, "CurrentMaterials"));
// // 获取plan_code对应的物料数组
// List<String> details = solidifyPlanService.details(currentMaterials.getValue());
// // 判断是否在自定义配方内
// if (details.contains(material.getMaterial_id())) {
// // 1 寻找可存放的固化室
// points = tbxMapper.getSamePlanPoint(nextRegionStr, details, vehicle_type);
// if (points.size() == 0) {
// // 2 没找到需要找个相同物料可用的位置
// // hint: 获取含有该物料并且没满的固化室。
// points = tbxMapper.getNotFullByMaterial(nextRegionStr, vehicle_type, workorder.getMaterial_id());
// }
// }
// }
// // 2 没有对应的固化室、没有同工艺号的固化室、没有计划方案对应的固化室,就找新的固化室
if (points.size() == 0) {
points = tbxMapper.getEmptyPoint(nextRegionStr, vehicle_type, workorder.getMaterial_id());
}
SchBasePoint schBasePoint =points.size() > 0 ? points.get(0) : null;
SchBasePoint schBasePoint =new SchBasePoint();
for(SchBasePoint temp:points){
for(String ghs:ghsList) {
if (ghs.equals(temp.getParent_point_code())) {
schBasePoint=temp;
break;
}
}
}
if (schBasePoint != null) {
schBasePoint.setCan_material_type(workorder.getMaterial_id());
pointService.updateById(schBasePoint);

View File

@@ -25,7 +25,7 @@ public interface TBXMapper {
* @param materialId 物料标识
* @return 点位数据
*/
List<SchBasePoint> getNotFullByMaterial(List<String> nextRegionStr, String vehicleType, String materialId);
List<SchBasePoint> getNotFullByMaterial(List<String> nextRegionStr, String vehicleType, String materialId,List<String> ghsList);
/**
* 获取空的固化室

View File

@@ -60,7 +60,7 @@
</el-form>
</div>
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" >
<crudOperation :permission="permission">
<el-button
slot="right"
class="filter-item"
@@ -211,14 +211,14 @@
<el-form-item label="设备名称">
<el-input v-model="form.point_name" style="width: 240px;" disabled />
</el-form-item>
<!-- <el-form-item label="静置时间(分钟)" prop="standing_time">-->
<!-- <el-input-number-->
<!-- v-model.number="form.standing_time"-->
<!-- :min="0"-->
<!-- :max="999"-->
<!-- style="width: 240px;"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="静置时间(分钟)" prop="standing_time">-->
<!-- <el-input-number-->
<!-- v-model.number="form.standing_time"-->
<!-- :min="0"-->
<!-- :max="999"-->
<!-- style="width: 240px;"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item v-show="crud.status.edit" label="实际数量" prop="real_qty">
<el-input-number
v-model.number="form.real_qty"
@@ -260,6 +260,24 @@
/>
</el-select>
</el-form-item>
<el-form-item label="可放固化室" prop="ghs">
<el-select
v-model="form.ghs"
clearable
filterable
multiple
size="mini"
placeholder="请选择"
class="filter-item"
style="width: 240px;"
>
<el-option
v-for="item in ghsList"
:label="item.point_name"
:value="item.point_code"
/>
</el-select>
</el-form-item>
<el-form-item label="是否自动搬运" prop="is_needmove">
<el-radio-group v-model="form.is_needmove" style="width: 240px">
<el-radio :label="true">是</el-radio>
@@ -416,7 +434,8 @@ const defaultForm = {
workshop_code: null,
ext_id: null,
is_delete: false,
is_urgent: false
is_urgent: false,
ghs: null
}
export default {
name: 'PdmBdWorkorder',
@@ -453,6 +472,9 @@ export default {
],
region_code: [
{ required: true, message: '区域编码不能为空', trigger: 'change' }
],
ghs: [
{ required: true, message: '可放固化室不能为空', trigger: 'change' }
]
/* workorder_type: [
{ required: true, message: '工单类型不能为空', trigger: 'blur' }
@@ -465,6 +487,7 @@ export default {
workShopList: [],
regionList: [],
pointList: [],
ghsList: [],
regionCodeParam: null,
materialDialog: false,
fullscreenLoading: false
@@ -473,6 +496,7 @@ export default {
created() {
this.getWorkShopList()
this.getRegionList()
this.getGhsList()
},
methods: {
item() {
@@ -506,6 +530,16 @@ export default {
})
}
},
getGhsList() { // 获取点位列表
const param = {
region_code: 'GH',
point_type: '1'
}
crudSchBasePoint.getPointList(param).then(res => {
this.ghsList = res
this.regionCodeParam = null
})
},
getMaterial() {
this.materialDialog = true
},