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

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

View File

@@ -29,6 +29,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@@ -50,6 +51,11 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
public IPage<PdmBdWorkorder> queryAll(PdmBdWorkorderQuery query, PageQuery page){ public IPage<PdmBdWorkorder> queryAll(PdmBdWorkorderQuery query, PageQuery page){
IPage<PdmBdWorkorder> pages = new Page<>(page.getPage() + 1, page.getSize()); IPage<PdmBdWorkorder> pages = new Page<>(page.getPage() + 1, page.getSize());
pages = pdmBdWorkorderMapper.selectPageLeftJoin(pages, query); 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; return pages;
} }
@@ -58,7 +64,6 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
String currentUserId = SecurityUtils.getCurrentUserId(); String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName(); String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now(); String now = DateUtil.now();
// 点位编码和点位名称为父点位 // 点位编码和点位名称为父点位
entity.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextIdStr()); entity.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextIdStr());
entity.setWorkorder_code(CodeUtil.getNewCode("PDM_SHIFTORDER")); entity.setWorkorder_code(CodeUtil.getNewCode("PDM_SHIFTORDER"));
@@ -68,6 +73,11 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
entity.setUpdate_id(currentUserId); entity.setUpdate_id(currentUserId);
entity.setUpdate_name(nickName); entity.setUpdate_name(nickName);
entity.setUpdate_time(now); 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); pdmBdWorkorderMapper.insert(entity);
} }
@@ -84,7 +94,11 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
entity.setUpdate_id(currentUserId); entity.setUpdate_id(currentUserId);
entity.setUpdate_name(nickName); entity.setUpdate_name(nickName);
entity.setUpdate_time(now); 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); 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.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException; import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils; 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.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint; import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.point.service.dao.mapper.SchBasePointMapper; 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) { public List<SchBasePoint> getPointList(SchBasePoint region) {
if (ObjectUtil.isEmpty(region)) return this.list(); if (ObjectUtil.isEmpty(region)) return this.list();
return pointMapper.selectList(new LambdaQueryWrapper<SchBasePoint>() 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 @Override

View File

@@ -177,38 +177,52 @@ public class TBXMLTask extends AbstractTask {
// 获取物料 // 获取物料
MdBaseMaterial material = materialService.getById(workorder.getMaterial_id()); MdBaseMaterial material = materialService.getById(workorder.getMaterial_id());
// 获取固化方案 // 获取固化方案
Param curingPlan = paramService.findByCode("CuringPlan"); // Param curingPlan = paramService.findByCode("CuringPlan");
List<SchBasePoint> points = new ArrayList<>(); List<SchBasePoint> points = new ArrayList<>();
if (curingPlan.getValue().equals(GeneralDefinition.NOT_MIXING)) { List<String> ghsList=new ArrayList<>();
// 不可混料-需要根据工单上物料的信息 //固化室逻辑调整,现在去哪个固化室取决于工单,原有限制不变,原有混料规则废弃
// 1 获取含有该物料并且没满的固化室。 if(ObjectUtil.isNotEmpty(workorder.getExt_data())) {
points = tbxMapper.getNotFullByMaterial(nextRegionStr, vehicle_type, workorder.getMaterial_id()); ghsList=Arrays.asList(workorder.getExt_data().split(","));
} 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 没有对应的固化室、没有同工艺号的固化室、没有计划方案对应的固化室,就找新的固化室 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) { if (points.size() == 0) {
points = tbxMapper.getEmptyPoint(nextRegionStr, vehicle_type, workorder.getMaterial_id()); 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) { if (schBasePoint != null) {
schBasePoint.setCan_material_type(workorder.getMaterial_id()); schBasePoint.setCan_material_type(workorder.getMaterial_id());
pointService.updateById(schBasePoint); pointService.updateById(schBasePoint);

View File

@@ -25,7 +25,7 @@ public interface TBXMapper {
* @param materialId 物料标识 * @param materialId 物料标识
* @return 点位数据 * @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> </el-form>
</div> </div>
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'--> <!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" > <crudOperation :permission="permission">
<el-button <el-button
slot="right" slot="right"
class="filter-item" class="filter-item"
@@ -211,14 +211,14 @@
<el-form-item label="设备名称"> <el-form-item label="设备名称">
<el-input v-model="form.point_name" style="width: 240px;" disabled /> <el-input v-model="form.point_name" style="width: 240px;" disabled />
</el-form-item> </el-form-item>
<!-- <el-form-item label="静置时间(分钟)" prop="standing_time">--> <!-- <el-form-item label="静置时间(分钟)" prop="standing_time">-->
<!-- <el-input-number--> <!-- <el-input-number-->
<!-- v-model.number="form.standing_time"--> <!-- v-model.number="form.standing_time"-->
<!-- :min="0"--> <!-- :min="0"-->
<!-- :max="999"--> <!-- :max="999"-->
<!-- style="width: 240px;"--> <!-- style="width: 240px;"-->
<!-- />--> <!-- />-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<el-form-item v-show="crud.status.edit" label="实际数量" prop="real_qty"> <el-form-item v-show="crud.status.edit" label="实际数量" prop="real_qty">
<el-input-number <el-input-number
v-model.number="form.real_qty" v-model.number="form.real_qty"
@@ -260,6 +260,24 @@
/> />
</el-select> </el-select>
</el-form-item> </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-form-item label="是否自动搬运" prop="is_needmove">
<el-radio-group v-model="form.is_needmove" style="width: 240px"> <el-radio-group v-model="form.is_needmove" style="width: 240px">
<el-radio :label="true">是</el-radio> <el-radio :label="true">是</el-radio>
@@ -416,7 +434,8 @@ const defaultForm = {
workshop_code: null, workshop_code: null,
ext_id: null, ext_id: null,
is_delete: false, is_delete: false,
is_urgent: false is_urgent: false,
ghs: null
} }
export default { export default {
name: 'PdmBdWorkorder', name: 'PdmBdWorkorder',
@@ -453,6 +472,9 @@ export default {
], ],
region_code: [ region_code: [
{ required: true, message: '区域编码不能为空', trigger: 'change' } { required: true, message: '区域编码不能为空', trigger: 'change' }
],
ghs: [
{ required: true, message: '可放固化室不能为空', trigger: 'change' }
] ]
/* workorder_type: [ /* workorder_type: [
{ required: true, message: '工单类型不能为空', trigger: 'blur' } { required: true, message: '工单类型不能为空', trigger: 'blur' }
@@ -465,6 +487,7 @@ export default {
workShopList: [], workShopList: [],
regionList: [], regionList: [],
pointList: [], pointList: [],
ghsList: [],
regionCodeParam: null, regionCodeParam: null,
materialDialog: false, materialDialog: false,
fullscreenLoading: false fullscreenLoading: false
@@ -473,6 +496,7 @@ export default {
created() { created() {
this.getWorkShopList() this.getWorkShopList()
this.getRegionList() this.getRegionList()
this.getGhsList()
}, },
methods: { methods: {
item() { 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() { getMaterial() {
this.materialDialog = true this.materialDialog = true
}, },