rev:增加规格统计分页,修改排产顺序,设备最后规格记录;

This commit is contained in:
2023-12-19 16:38:02 +08:00
parent 1735f6e48c
commit 41040484b5
16 changed files with 1087 additions and 944 deletions

View File

@@ -17,8 +17,7 @@ public enum WorkerOrderEnum {
AUTO_COMPLETE("自动完成", "5"), AUTO_COMPLETE("自动完成", "5"),
COMPLETE("完成", "6"), COMPLETE("完成", "6"),
FORCE_COMPLETE("强制完成", "7"), FORCE_COMPLETE("强制完成", "7"),
CANCEL("取消", "8"), CANCEL("取消", "8")
; ;

View File

@@ -390,7 +390,7 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService{
} }
/** /**
* 完工操作 * 完工
* 设备状态枚举1-关机、2-开机、3-生产中、4-待机、5-故障 * 设备状态枚举1-关机、2-开机、3-生产中、4-待机、5-故障
* *
* @author gbx * @author gbx

View File

@@ -79,6 +79,7 @@
"success" ELSE "info" "success" ELSE "info"
END AS type, END AS type,
d.device_code, d.device_code,
d.aps_device_code,
w.device_code FIRST, w.device_code FIRST,
w.device_code SECOND, w.device_code SECOND,
CASE CASE
@@ -109,7 +110,8 @@
QUERY QUERY
SELECT SELECT
workorder.device_code, workorder.device_code,
mater.material_spec mater.material_spec,
aps_workorder_no
FROM FROM
pdm_produce_workorder workorder pdm_produce_workorder workorder
LEFT JOIN md_me_materialbase mater ON workorder.material_id = mater.material_id LEFT JOIN md_me_materialbase mater ON workorder.material_id = mater.material_id
@@ -124,8 +126,6 @@
ENDOPTION ENDOPTION
GROUP BY GROUP BY
workorder.device_code,workorder.material_id workorder.device_code,workorder.material_id
ORDER BY
aps_workorder_no
ENDSELECT ENDSELECT
ENDQUERY ENDQUERY
ENDIF ENDIF

View File

@@ -28,10 +28,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -42,125 +39,135 @@ import java.util.stream.Collectors;
@Api(tags = "生产设备管理") @Api(tags = "生产设备管理")
@RequestMapping("/api/device") @RequestMapping("/api/device")
@Slf4j @Slf4j
public class PdmBiDeviceController{ public class PdmBiDeviceController {
@Autowired @Autowired
private DeviceService deviceService; private DeviceService deviceService;
@Autowired @Autowired
private IPdmBiDeviceService iDeviceService; private IPdmBiDeviceService iDeviceService;
@Autowired @Autowired
private IPdmBiWorkprocedureService pdmBiWorkprocedureService; private IPdmBiWorkprocedureService pdmBiWorkprocedureService;
@GetMapping @GetMapping
@Log("查询生产设备") @Log("查询生产设备")
//("查询生产设备") //("查询生产设备")
@SaIgnore @SaIgnore
public ResponseEntity<Object> query(DeviceQuery query, PageQuery page) { public ResponseEntity<Object> query(DeviceQuery query, PageQuery page) {
Page<PdmBiDevice> result = iDeviceService.page(page.build(PdmBiDevice.class), query.build()); Page<PdmBiDevice> result = iDeviceService.page(page.build(PdmBiDevice.class), query.build());
return new ResponseEntity<>(TableDataInfo.build(result), HttpStatus.OK); return new ResponseEntity<>(TableDataInfo.build(result), HttpStatus.OK);
} }
@PostMapping("/list") @PostMapping("/list")
@Log("查询生产设备列表") @Log("查询生产设备列表")
//("查询生产设备列表") //("查询生产设备列表")
@SaIgnore @SaIgnore
public ResponseEntity<Object> queryList(@RequestBody DeviceQuery query) { public ResponseEntity<Object> queryList(@RequestBody DeviceQuery query) {
List<Map<String,Object>> list = iDeviceService.listMaps(query.build().select("device_code", "device_name")); List<Map<String, Object>> list = iDeviceService.listMaps(query.build().select("device_code", "device_name"));
return new ResponseEntity<>(TableDataInfo.build(list), HttpStatus.OK); return new ResponseEntity<>(TableDataInfo.build(list), HttpStatus.OK);
} }
@PostMapping @PostMapping
@Log("新增生产设备") @Log("新增生产设备")
//("新增生产设备") //("新增生产设备")
//@PreAuthorize("@el.check('device:add')") //@PreAuthorize("@el.check('device:add')")
public ResponseEntity<Object> create(@RequestBody JSONObject form) { public ResponseEntity<Object> create(@RequestBody JSONObject form) {
PdmBiDevice device = form.toJavaObject(PdmBiDevice.class); PdmBiDevice device = form.toJavaObject(PdmBiDevice.class);
device.setCreate_id(SecurityUtils.getCurrentUserId()); device.setCreate_id(SecurityUtils.getCurrentUserId());
device.setCreate_name(SecurityUtils.getCurrentNickName()); device.setCreate_name(SecurityUtils.getCurrentNickName());
device.setCreate_time(DateUtil.now()); device.setCreate_time(DateUtil.now());
iDeviceService.save(device); iDeviceService.save(device);
return new ResponseEntity<>(HttpStatus.CREATED); return new ResponseEntity<>(HttpStatus.CREATED);
} }
@PutMapping @PutMapping
@Log("修改生产设备") @Log("修改生产设备")
//("修改生产设备") //("修改生产设备")
//@PreAuthorize("@el.check('device:edit')") //@PreAuthorize("@el.check('device:edit')")
public ResponseEntity<Object> update(@Validated @RequestBody JSONObject form) { public ResponseEntity<Object> update(@Validated @RequestBody JSONObject form) {
PdmBiDevice device = form.toJavaObject(PdmBiDevice.class); PdmBiDevice device = form.toJavaObject(PdmBiDevice.class);
device.setUpdate_id(SecurityUtils.getCurrentUserId()); device.setUpdate_id(SecurityUtils.getCurrentUserId());
device.setUpdate_name(SecurityUtils.getCurrentNickName()); device.setUpdate_name(SecurityUtils.getCurrentNickName());
device.setUpdate_time(DateUtil.now()); device.setUpdate_time(DateUtil.now());
iDeviceService.updateById(device); iDeviceService.updateById(device);
return new ResponseEntity<>(HttpStatus.NO_CONTENT); return new ResponseEntity<>(HttpStatus.NO_CONTENT);
} }
@Log("删除生产设备") @Log("删除生产设备")
//("删除生产设备") //("删除生产设备")
//@PreAuthorize("@el.check('device:del')") //@PreAuthorize("@el.check('device:del')")
@DeleteMapping @DeleteMapping
public ResponseEntity<Object> delete(@RequestBody String[] ids) { public ResponseEntity<Object> delete(@RequestBody String[] ids) {
deviceService.deleteAll(ids); deviceService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
} }
@GetMapping("/getWorkprocedure") @GetMapping("/getWorkprocedure")
@Log("工序下拉") @Log("工序下拉")
public ResponseEntity<Object> getWorkprocedure() { public ResponseEntity<Object> getWorkprocedure() {
return new ResponseEntity<>(pdmBiWorkprocedureService.list(new QueryWrapper<PdmBiWorkprocedure>().eq("is_used", true)), HttpStatus.OK); return new ResponseEntity<>(pdmBiWorkprocedureService.list(new QueryWrapper<PdmBiWorkprocedure>().eq("is_used", true)), HttpStatus.OK);
} }
@GetMapping("/getDeviceList") @GetMapping("/getDeviceList")
@Log("设备下拉框") @Log("设备下拉框")
//("设备下拉框") //("设备下拉框")
//@PreAuthorize("@el.check('device:list')") //@PreAuthorize("@el.check('device:list')")
public ResponseEntity<Object> getDeviceList() { public ResponseEntity<Object> getDeviceList() {
return new ResponseEntity<>(deviceService.getDeviceList(), HttpStatus.OK); return new ResponseEntity<>(deviceService.getDeviceList(), HttpStatus.OK);
} }
@PostMapping("/query") @PostMapping("/query")
@Log("根据选项卡下标获取设备信息") @Log("根据选项卡下标获取设备信息")
//("根据选项卡下标获取设备信息") //("根据选项卡下标获取设备信息")
public ResponseEntity<Object> query(@RequestBody String card_index) { public ResponseEntity<Object> query(@RequestBody String card_index) {
//工单排产调整通过工序选项卡下标获取设备信息 //工单排产调整通过工序选项卡下标获取设备信息
WorkOrderImportEnum workOrderImportEnum = WorkOrderImportEnum.getIdByIndex(Integer.parseInt(card_index)); WorkOrderImportEnum workOrderImportEnum = WorkOrderImportEnum.getIdByIndex(Integer.parseInt(card_index));
Map param = new HashMap(); Map param = new HashMap();
param.put("flag", "2"); param.put("flag", "2");
param.put("workprocedure_id", workOrderImportEnum.getId()); param.put("workprocedure_id", workOrderImportEnum.getId());
JSONArray array = WQL.getWO("QUERY_DEVICE").addParamMap(param).process().getResultJSONArray(0); JSONArray array = WQL.getWO("QUERY_DEVICE").addParamMap(param).process().getResultJSONArray(0);
// 收集需要查询的参数 // 收集需要查询的参数
List<String> deviceCodes = new ArrayList<>(); List<String> deviceCodes = new ArrayList<>();
List<JSONObject> deviceList = new ArrayList<>(); List<JSONObject> deviceList = new ArrayList<>();
array.stream().map(obj -> (JSONObject) obj).filter(obj -> obj.get("first") != null).forEach(obj -> array.stream().map(obj -> (JSONObject) obj).filter(obj -> obj.get("first") != null).forEach(obj ->
{ {
deviceCodes.add(obj.getString("first")); deviceCodes.add(obj.getString("first"));
deviceList.add(obj); deviceList.add(obj);
}); });
if(deviceList.size() > 0) { if (deviceList.size() > 0) {
String joinedDeviceCodes = deviceCodes.stream().filter(s -> !s.trim().isEmpty()).map(s -> "'" + s + "'").collect(Collectors.joining(",")); String joinedDeviceCodes = deviceCodes.stream().filter(s -> !s.trim().isEmpty()).map(s -> "'" + s + "'").collect(Collectors.joining(","));
param.put("flag", "3"); param.put("flag", "3");
param.put("device_code", joinedDeviceCodes); param.put("device_code", joinedDeviceCodes);
JSONArray specInfoMap = WQL.getWO("QUERY_DEVICE").addParamMap(param).process().getResultJSONArray(0); JSONArray specInfoMap = WQL.getWO("QUERY_DEVICE").addParamMap(param).process().getResultJSONArray(0);
Map<String,List<JSONObject>> groupedByDeviceCode = specInfoMap.stream().map(obj -> (JSONObject) obj).collect(Collectors.groupingBy(specInfo -> specInfo.getString("device_code"))); Map<String, List<JSONObject>> groupedByDeviceCode = specInfoMap.stream().map(obj -> (JSONObject) obj).collect(Collectors.groupingBy(specInfo -> specInfo.getString("device_code")));
groupedByDeviceCode.forEach((deviceCode, group) -> groupedByDeviceCode.forEach((deviceCode, group) ->
{ {
for(JSONObject device : deviceList) { for (JSONObject device : deviceList) {
if(StringUtils.isNotBlank(device.getString("first"))) { //设备有分派工单第一个工单的规格和第二个工单的规格
if(device.getString("first").equals(deviceCode)) { if (StringUtils.isNotBlank(device.getString("first"))) {
device.put("type","success"); if (device.getString("first").equals(deviceCode)) {
device.put("first", group.get(0).getString("material_spec")); device.put("type", "success");
if(group.size() > 1) { List<Map> groups = group.stream()
device.put("second", group.get(1).getString("material_spec")); .filter(r -> StringUtils.isNotBlank(r.getString("material_spec")))
} .sorted(Comparator.comparingInt(r -> Integer.parseInt(r.getString("aps_workorder_no"))))
} .collect(Collectors.toList());
if(device.getString("second").equals(device.getString("device_code"))) if (groups.size() > 0) {
{ device.put("first", groups.get(0).get("material_spec"));
device.put("second",""); if (groups.size() > 1) {
} device.put("second", groups.get(1).get("material_spec"));
} }
}
}
if (device.getString("second").equals(device.getString("device_code"))) {
device.put("second", "");
}
} }
}); else{
} //设备无分派工单,显示最后一次生产的规格
return new ResponseEntity<>(deviceList, HttpStatus.OK); device.put("first", device.get("aps_device_code"));
} }
}
});
}
return new ResponseEntity<>(deviceList, HttpStatus.OK);
}
} }

View File

@@ -233,13 +233,32 @@ public class PdmProduceWorkorderController{
return new ResponseEntity<>(TableDataInfo.build(iPdmProduceWorkorderService.queryAdjustWorkOrder(query)), HttpStatus.OK); return new ResponseEntity<>(TableDataInfo.build(iPdmProduceWorkorderService.queryAdjustWorkOrder(query)), HttpStatus.OK);
} }
@PostMapping("/queryStatisticsSpec") // @PostMapping("/queryStatisticsSpec1")
@Log("根据规格统计工单信息") // @Log("根据规格统计工单信息")
//("根据规格统计工单信息") // //("根据规格统计工单信息")
public ResponseEntity<Object> queryStatisticsSpec(@RequestBody WorkorderQuery query) { // public ResponseEntity<Object> queryStatisticsSpec1(@RequestBody WorkorderQuery query) {
return new ResponseEntity<>(TableDataInfo.build(iPdmProduceWorkorderService.queryStatisticsSpec(query)), HttpStatus.OK); // return new ResponseEntity<>(TableDataInfo.build(iPdmProduceWorkorderService.queryStatisticsSpec(query)), HttpStatus.OK);
// }
@PostMapping("/specOptionsSelect")
@Log("规格统计规格下拉框")
//("规格统计规格下拉框")
public ResponseEntity<Object> specOptionsSelect() {
return new ResponseEntity<>(TableDataInfo.build(iPdmProduceWorkorderService.specOptionsSelect()), HttpStatus.OK);
} }
@GetMapping("/queryStatisticsSpec")
@Log("根据规格统计工单信息")
public ResponseEntity<Object> queryStatisticsSpec(WorkorderQuery query, PageQuery page) {
return new ResponseEntity<>(iPdmProduceWorkorderService.queryStatisticsSpec(query, page), HttpStatus.OK);
}
@PostMapping("/queryMouldsSpec") @PostMapping("/queryMouldsSpec")
@Log("根据设备统计装车信息") @Log("根据设备统计装车信息")
//("根据设备统计装车信息") //("根据设备统计装车信息")

View File

@@ -204,7 +204,12 @@ public interface IPdmProduceWorkorderService extends IService<PdmProduceWorkorde
List<Map> queryAdjustWorkOrder(WorkorderQuery param); List<Map> queryAdjustWorkOrder(WorkorderQuery param);
List<Map> queryStatisticsSpec(WorkorderQuery param); TableDataInfo queryStatisticsSpec(WorkorderQuery query,PageQuery page);
List<Map> specOptionsSelect();
List<Map<String, Object>> queryMouldsSpec(WorkorderQuery param); List<Map<String, Object>> queryMouldsSpec(WorkorderQuery param);

View File

@@ -70,6 +70,15 @@ public interface PdmProduceWorkorderMapper extends BaseMapper<PdmProduceWorkorde
List<Map> queryDeviceCount(@Param("query") WorkorderQuery query); List<Map> queryDeviceCount(@Param("query") WorkorderQuery query);
/**
* 规格下拉框
*
* @param
* @return
*/
List<Map> specOptionsSelect();
/** /**
* 根据规格统计工单信息 * 根据规格统计工单信息
@@ -79,6 +88,12 @@ public interface PdmProduceWorkorderMapper extends BaseMapper<PdmProduceWorkorde
*/ */
List<Map> queryStatisticsSpec(@Param("query") WorkorderQuery query); List<Map> queryStatisticsSpec(@Param("query") WorkorderQuery query);
/** /**
* 根据设备统计装车信息 * 根据设备统计装车信息
* *

View File

@@ -512,6 +512,23 @@
${query.orderBy} ${query.orderBy}
</select> </select>
<select id="specOptionsSelect" resultType="java.util.Map">
SELECT
mater.material_spec,
mater.material_id
FROM
pdm_produce_workorder workorder
LEFT JOIN md_me_materialbase mater ON workorder.material_id = mater.material_id
WHERE
workorder.is_delete = '0'
AND workorder.aps_work_type != 'S'
AND workorder.workorder_status = '1'
AND mater.material_id IS NOT NULL
GROUP BY
mater.material_spec
</select>
<select id="queryStatisticsSpec" resultType="java.util.Map"> <select id="queryStatisticsSpec" resultType="java.util.Map">
SELECT SELECT
w.workprocedure_name, w.workprocedure_name,
@@ -533,11 +550,12 @@
LEFT JOIN md_me_materialbase mater ON workorder.material_id = mater.material_id LEFT JOIN md_me_materialbase mater ON workorder.material_id = mater.material_id
LEFT JOIN pdm_bi_workprocedure w ON workorder.workprocedure_id = w.workprocedure_id LEFT JOIN pdm_bi_workprocedure w ON workorder.workprocedure_id = w.workprocedure_id
WHERE WHERE
workorder.is_delete = '0' AND workorder.aps_work_type != 'S' workorder.is_delete = '0' AND workorder.aps_work_type != 'S' AND workorder.workorder_status ='1'
<if test="query.material_id != null and query.material_id != ''">
and workorder.material_id =#{query.material_id}
</if>
GROUP BY GROUP BY
workorder.material_id mater.material_spec
ORDER BY
${query.orderBy}
</select> </select>

View File

@@ -23,6 +23,7 @@ public class WorkorderQuery extends BaseQuery<PdmProduceWorkorder> {
private String titleSort; private String titleSort;
private String material; private String material;
private String material_code; private String material_code;
private String material_id;
private String order_status; private String order_status;
private String plan_start_time; private String plan_start_time;
private String plan_end_time; private String plan_end_time;
@@ -37,6 +38,7 @@ public class WorkorderQuery extends BaseQuery<PdmProduceWorkorder> {
private String is_error; private String is_error;
private Integer tabIndex; private Integer tabIndex;
private String orderBy; private String orderBy;
private String orderBys;
@Override @Override

View File

@@ -7,6 +7,7 @@ import cn.hutool.poi.excel.ExcelUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; 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.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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;
@@ -180,12 +181,9 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
entity.setWorkorder_code(CodeUtil.getNewCode("PDM_SHIFTORDER")); entity.setWorkorder_code(CodeUtil.getNewCode("PDM_SHIFTORDER"));
String current_produce_person_id = form.getString("current_produce_person_id"); String current_produce_person_id = form.getString("current_produce_person_id");
entity.setCurrent_produce_person_id(current_produce_person_id); entity.setCurrent_produce_person_id(current_produce_person_id);
if (StringUtils.isEmpty(current_produce_person_id)){ if (StringUtils.isEmpty(current_produce_person_id)) {
entity.setCurrent_produce_person_id(SecurityUtils.getCurrentUserId()); entity.setCurrent_produce_person_id(SecurityUtils.getCurrentUserId());
} }
if (StringUtils.isEmpty(current_produce_person_id)){
entity.setCurrent_produce_person_id(SecurityUtils.getCurrentUserId());
}
entity.setCreate_id(SecurityUtils.getCurrentUserId()); entity.setCreate_id(SecurityUtils.getCurrentUserId());
entity.setCreate_name(SecurityUtils.getCurrentNickName()); entity.setCreate_name(SecurityUtils.getCurrentNickName());
entity.setCreate_time(DateUtil.now()); entity.setCreate_time(DateUtil.now());
@@ -239,8 +237,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
List<PdmProduceWorkorder> list = this.list(new QueryWrapper<PdmProduceWorkorder>().nested(i -> i.isNull("workorder_code").or().eq("workorder_code", "0").or().eq("workorder_code", "").or().eq("material_id", "0").or().eq("workprocedure_id", "0").or().eq("create_type", "3")).in("workorder_id", ids)); List<PdmProduceWorkorder> list = this.list(new QueryWrapper<PdmProduceWorkorder>().nested(i -> i.isNull("workorder_code").or().eq("workorder_code", "0").or().eq("workorder_code", "").or().eq("material_id", "0").or().eq("workprocedure_id", "0").or().eq("create_type", "3")).in("workorder_id", ids));
//aps排产完成的工单生成工单编号再下发 //aps排产完成的工单生成工单编号再下发
if (list.size() > 0) { if (list.size() > 0) {
list.forEach(r -> list.forEach(r -> {
{
UpdateWrapper<PdmProduceWorkorder> updateWrapper = new UpdateWrapper<PdmProduceWorkorder>(); UpdateWrapper<PdmProduceWorkorder> updateWrapper = new UpdateWrapper<PdmProduceWorkorder>();
updateWrapper.eq("workorder_id", r.getWorkorder_id()); updateWrapper.eq("workorder_id", r.getWorkorder_id());
//updateWrapper.set("workorder_code", CodeUtil.getNewCode("PDM_SHIFTORDER")); //updateWrapper.set("workorder_code", CodeUtil.getNewCode("PDM_SHIFTORDER"));
@@ -279,8 +276,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
} }
//根据设备号和工序分组,进行下发顺序校验 //根据设备号和工序分组,进行下发顺序校验
Map<String, List<PdmProduceWorkorder>> groupedWorkorders = workorders.stream().collect(Collectors.groupingBy(workorder -> workorder.getWorkprocedure_id() + "-" + workorder.getDevice_code())); Map<String, List<PdmProduceWorkorder>> groupedWorkorders = workorders.stream().collect(Collectors.groupingBy(workorder -> workorder.getWorkprocedure_id() + "-" + workorder.getDevice_code()));
groupedWorkorders.forEach((workprocedureId, workorderList) -> groupedWorkorders.forEach((workprocedureId, workorderList) -> {
{
if (!workorderList.isEmpty() && workprocedureId.contains("-")) { if (!workorderList.isEmpty() && workprocedureId.contains("-")) {
//4.批量下发,校验工单顺序是否相邻或相等,校验批量工单中的每个工单的设备,是否存在已下发的工单,如果存在,不允许继续下发 //4.批量下发,校验工单顺序是否相邻或相等,校验批量工单中的每个工单的设备,是否存在已下发的工单,如果存在,不允许继续下发
compareWorkorderAdjoin(workorderList); compareWorkorderAdjoin(workorderList);
@@ -360,10 +356,10 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
if (StringUtils.isEmpty(pdmProduceWorkorder.getWorkorder_code()) || "0".equals(pdmProduceWorkorder.getWorkorder_code())) { if (StringUtils.isEmpty(pdmProduceWorkorder.getWorkorder_code()) || "0".equals(pdmProduceWorkorder.getWorkorder_code())) {
this.update(new UpdateWrapper<PdmProduceWorkorder>().eq("workorder_id", pdmProduceWorkorder.getWorkorder_id()).set("workorder_code", CodeUtil.getNewCode("PDM_SHIFTORDER"))); this.update(new UpdateWrapper<PdmProduceWorkorder>().eq("workorder_id", pdmProduceWorkorder.getWorkorder_id()).set("workorder_code", CodeUtil.getNewCode("PDM_SHIFTORDER")));
} }
BigDecimal report_qty = pdmProduceWorkorder.getReport_qty(); BigDecimal report_qty = pdmProduceWorkorder.getReport_qty();
if (report_qty == null){ if (report_qty == null) {
report_qty = new BigDecimal(0); report_qty = new BigDecimal(0);
} }
// try { // try {
// //根据计划实际生产时间获取计算对应APS实际生产时间 // //根据计划实际生产时间获取计算对应APS实际生产时间
// Date interval2End = getDateEndFromInterval(pdmProduceWorkorder.getRealproducestart_date(), pdmProduceWorkorder.getPlanproduceend_date(), pdmProduceWorkorder.getAps_realproducestart_date()); // Date interval2End = getDateEndFromInterval(pdmProduceWorkorder.getRealproducestart_date(), pdmProduceWorkorder.getPlanproduceend_date(), pdmProduceWorkorder.getAps_realproducestart_date());
@@ -385,10 +381,11 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
pdmProduceWorkorder.setUpdate_id(SecurityUtils.getCurrentUserId()); pdmProduceWorkorder.setUpdate_id(SecurityUtils.getCurrentUserId());
pdmProduceWorkorder.setUpdate_name(SecurityUtils.getCurrentNickName()); pdmProduceWorkorder.setUpdate_name(SecurityUtils.getCurrentNickName());
this.updateById(pdmProduceWorkorder); this.updateById(pdmProduceWorkorder);
//更新刻字数量 //更新刻字数量
//todo 测试是否累加还是直接更新报工数量 //todo 测试是否累加还是直接更新报工数量
updateLetteringQty(pdmProduceWorkorder); updateLetteringQty(pdmProduceWorkorder);
//工单排产页面标记最后一个生产规格
updateDeviceMaterial(pdmProduceWorkorder);
JSONArray array = new JSONArray(); JSONArray array = new JSONArray();
JSONObject map = new JSONObject(); JSONObject map = new JSONObject();
map.put("workorder_id", workorder_id); map.put("workorder_id", workorder_id);
@@ -403,6 +400,18 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
//this.recordWorkOrder(OptionRecord.OptionEnum.UPDATE, workorder_id); //this.recordWorkOrder(OptionRecord.OptionEnum.UPDATE, workorder_id);
} }
/**
* 工单排产页面标记最后一个生产规格
*/
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
public void updateDeviceMaterial(PdmProduceWorkorder workorder) {
MdMeMaterialbase materialbase = materialbaseService.getOne(new LambdaUpdateWrapper<MdMeMaterialbase>().eq(MdMeMaterialbase::getMaterial_id, workorder.getMaterial_id()));
if (materialbase != null) {
deviceService.update(new UpdateWrapper<PdmBiDevice>().eq("device_code", workorder.getDevice_code()).set("aps_device_code", StringUtils.isBlank(materialbase.getMaterial_spec()) ? "" : materialbase.getMaterial_spec()));
}
}
/** /**
* 工单报工 * 工单报工
*/ */
@@ -443,6 +452,8 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
// } catch (ParseException e) { // } catch (ParseException e) {
// throw new BadRequestException(e.getMessage()); // throw new BadRequestException(e.getMessage());
// } // }
//工单排产页面标记最后一个生产规格
updateDeviceMaterial(workorder);
} else { } else {
//工单暂停 //工单暂停
workorder.setWorkorder_status(WorkerOrderEnum.STOP.getCode()); workorder.setWorkorder_status(WorkerOrderEnum.STOP.getCode());
@@ -550,125 +561,120 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
} }
} }
private void 推弯(InputStream inputStream) { private void 推弯(InputStream inputStream) {
ExcelReader excelReader = ExcelUtil.getReader(inputStream, "推弯计划表"); ExcelReader excelReader = ExcelUtil.getReader(inputStream, "推弯计划表");
List<List<Object>> read = excelReader.read(); List<List<Object>> read = excelReader.read();
// 循环获取的数据 // 循环获取的数据
List<PdmProduceWorkorder> data = new ArrayList<>(); List<PdmProduceWorkorder> data = new ArrayList<>();
Map<String,String> errorMap = new HashMap(); Map<String, String> errorMap = new HashMap();
List<String> workprodures = new ArrayList<>(); List<String> workprodures = new ArrayList<>();
List<String> materialSpecs = new ArrayList<>(); List<String> materialSpecs = new ArrayList<>();
List<String> persons = new ArrayList<>(); List<String> persons = new ArrayList<>();
row: row:
for(int i = 0; i < read.size(); i++) { for (int i = 0; i < read.size(); i++) {
List<Object> list = read.get(i); List<Object> list = read.get(i);
if(ObjectUtil.isEmpty(list)) { if (ObjectUtil.isEmpty(list)) {
continue; continue;
} }
PdmProduceWorkorder workorder = new PdmProduceWorkorder(); PdmProduceWorkorder workorder = new PdmProduceWorkorder();
packageForm(workorder); packageForm(workorder);
for(int j = 0; j < list.size(); j++) { for (int j = 0; j < list.size(); j++) {
String col = String.valueOf(list.get(j)); String col = String.valueOf(list.get(j));
解析cell: 解析cell:
{ //如果是第一行 为生产日期 { //如果是第一行 为生产日期
if(i == 0 && j == 0) { if (i == 0 && j == 0) {
continue row; continue row;
} }
//如果第一列包含规格二字 则为表头 结束内循环列 //如果第一列包含规格二字 则为表头 结束内循环列
if(j == 0 && col.contains("班次")) { if (j == 0 && col.contains("班次")) {
continue row; continue row;
} }
if(j == 0) { if (j == 0) {
//物料 //物料
workorder.setShift_type_scode("晚班".equals(col) ? "2" : "1"); workorder.setShift_type_scode("晚班".equals(col) ? "2" : "1");
} }
if(j == 1) { if (j == 1) {
if("1".equals(workorder.getShift_type_scode())) { if ("1".equals(workorder.getShift_type_scode())) {
workorder.setPlanproduceend_date(col.substring(0, col.indexOf(" ")) + " 18:30:00"); workorder.setPlanproduceend_date(col.substring(0, col.indexOf(" ")) + " 18:30:00");
workorder.setPlanproducestart_date(col.substring(0, col.indexOf(" ")) + " 07:30:00"); workorder.setPlanproducestart_date(col.substring(0, col.indexOf(" ")) + " 07:30:00");
} } else {
else{ workorder.setPlanproducestart_date(col.substring(0, col.indexOf(" ")) + " 18:30:00");
workorder.setPlanproducestart_date(col.substring(0, col.indexOf(" ")) + " 18:30:00"); workorder.setPlanproduceend_date(col.substring(0, col.indexOf(" ")) + " 07:30:00");
workorder.setPlanproduceend_date(col.substring(0, col.indexOf(" ")) + " 07:30:00"); }
} }
} if (j == 2) {
if(j == 2) { //物料
//物料 materialSpecs.add(col);
materialSpecs.add(col); workorder.setMaterial_id(col);
workorder.setMaterial_id(col); }
} if (j == 3) {
if(j == 3) { workprodures.add(col);
workprodures.add(col); workorder.setWorkprocedure_id(col);
workorder.setWorkprocedure_id(col); }
} if (j == 4) {
if(j == 4) { //设备 A1_TW_
//设备 A1_TW_ String s = col.replaceAll("-", "_");
String s = col.replaceAll("-", "_"); if (StringUtils.isNotEmpty(s)) {
if (StringUtils.isNotEmpty(s)){ workorder.setDevice_code("A1_TW_" + s);
workorder.setDevice_code("A1_TW_" + s); }
} }
} if (j == 7) {
if(j == 7) { //单重
//单重 BigDecimal bigDecimal = BigDecimal.valueOf(Double.parseDouble(col) * 1000);
BigDecimal bigDecimal = BigDecimal.valueOf(Double.parseDouble(col) * 1000);
// workorder.setMaterial_weight(bigDecimal.setScale(3, RoundingMode.HALF_UP)); // workorder.setMaterial_weight(bigDecimal.setScale(3, RoundingMode.HALF_UP));
}
if(j == 8) {
persons.add(col);
workorder.setCurrent_produce_person_id(col);
}
if(j == 9) {
workorder.setPlan_qty(new BigDecimal(Long.parseLong(col)));
}
if(j == 13) {
workorder.setIs_needmove("".equals(col));
}
if(j == 14) {
workorder.setRemark(col);
}
} }
} if (j == 8) {
if(CollectionUtils.isEmpty(errorMap)) { persons.add(col);
data.add(workorder); workorder.setCurrent_produce_person_id(col);
}
}
List<MdMeMaterialbase> tmp_material_specs = materialbaseService.list(new QueryWrapper<MdMeMaterialbase>().in("material_spec", materialSpecs));
List<SysUser> tmp_sysUsers = userService.list(new QueryWrapper<SysUser>().in("person_name", persons));
List<PdmBiWorkprocedure> tmp_workprocedure_names = workprocedureService.list(new QueryWrapper<PdmBiWorkprocedure>().in("workprocedure_name", workprodures));
Map<String,PdmBiWorkprocedure> collect = tmp_workprocedure_names.stream().collect(HashMap::new, (k, v) -> k.put(v.getWorkprocedure_name(), v), HashMap::putAll);
Map<String,SysUser> users = tmp_sysUsers.stream().collect(HashMap::new, (k, v) -> k.put(v.getPerson_name(), v), HashMap::putAll);
Map<String,List<MdMeMaterialbase>> materialspecs = tmp_material_specs.stream().collect(Collectors.groupingBy(MdMeMaterialbase::getMaterial_spec));
for(int i = 0; i < data.size(); i++) {
PdmProduceWorkorder workorder = data.get(i);
SysUser sysUser = users.get(workorder.getCurrent_produce_person_id());
if(sysUser == null) {
//errorMap.put("第" + (i + 1) + "行:", "账号:" + workorder.getCurrent_produce_person_id() + "不存在");
workorder.setCurrent_produce_person_id(null);
}
else{
workorder.setCurrent_produce_person_id(sysUser.getUser_id());
}
PdmBiWorkprocedure workprocedure = collect.get(workorder.getWorkprocedure_id());
if(workprocedure == null) {
errorMap.put("" + (i + 1) + "行:", "工序名称:" + workorder.getWorkprocedure_id() + "不存在");
}
else{
workorder.setWorkprocedure_id(workprocedure.getWorkprocedure_id());
}
List<MdMeMaterialbase> mdMeMaterialbases = materialspecs.get(workorder.getMaterial_id());
if(!CollectionUtils.isEmpty(mdMeMaterialbases)) {
if(mdMeMaterialbases.size() == 1) {
workorder.setMaterial_id(mdMeMaterialbases.get(0).getMaterial_id());
} }
else{ if (j == 9) {
Optional<MdMeMaterialbase> first = mdMeMaterialbases.stream().filter(mdMeMaterialbase -> mdMeMaterialbase.getMaterial_code().contains("S") && Pattern.matches("^[0-9]*$", mdMeMaterialbase.getMaterial_name().substring(mdMeMaterialbase.getMaterial_name().length() - 1))).findFirst(); workorder.setPlan_qty(new BigDecimal(Long.parseLong(col)));
if(first.isPresent()) {
workorder.setMaterial_id(first.get().getMaterial_id());
}
else{
errorMap.put("" + (i + 1) + "行:", "物料规格:" + workorder.getMaterial_id() + "不存在");
}
} }
if (j == 13) {
workorder.setIs_needmove("".equals(col));
}
if (j == 14) {
workorder.setRemark(col);
}
}
}
if (CollectionUtils.isEmpty(errorMap)) {
data.add(workorder);
}
}
List<MdMeMaterialbase> tmp_material_specs = materialbaseService.list(new QueryWrapper<MdMeMaterialbase>().in("material_spec", materialSpecs));
List<SysUser> tmp_sysUsers = userService.list(new QueryWrapper<SysUser>().in("person_name", persons));
List<PdmBiWorkprocedure> tmp_workprocedure_names = workprocedureService.list(new QueryWrapper<PdmBiWorkprocedure>().in("workprocedure_name", workprodures));
Map<String, PdmBiWorkprocedure> collect = tmp_workprocedure_names.stream().collect(HashMap::new, (k, v) -> k.put(v.getWorkprocedure_name(), v), HashMap::putAll);
Map<String, SysUser> users = tmp_sysUsers.stream().collect(HashMap::new, (k, v) -> k.put(v.getPerson_name(), v), HashMap::putAll);
Map<String, List<MdMeMaterialbase>> materialspecs = tmp_material_specs.stream().collect(Collectors.groupingBy(MdMeMaterialbase::getMaterial_spec));
for (int i = 0; i < data.size(); i++) {
PdmProduceWorkorder workorder = data.get(i);
SysUser sysUser = users.get(workorder.getCurrent_produce_person_id());
if (sysUser == null) {
//errorMap.put("第" + (i + 1) + "行:", "账号:" + workorder.getCurrent_produce_person_id() + "不存在");
workorder.setCurrent_produce_person_id(null);
} else {
workorder.setCurrent_produce_person_id(sysUser.getUser_id());
}
PdmBiWorkprocedure workprocedure = collect.get(workorder.getWorkprocedure_id());
if (workprocedure == null) {
errorMap.put("" + (i + 1) + "行:", "工序名称:" + workorder.getWorkprocedure_id() + "不存在");
} else {
workorder.setWorkprocedure_id(workprocedure.getWorkprocedure_id());
}
List<MdMeMaterialbase> mdMeMaterialbases = materialspecs.get(workorder.getMaterial_id());
if (!CollectionUtils.isEmpty(mdMeMaterialbases)) {
if (mdMeMaterialbases.size() == 1) {
workorder.setMaterial_id(mdMeMaterialbases.get(0).getMaterial_id());
} else {
Optional<MdMeMaterialbase> first = mdMeMaterialbases.stream().filter(mdMeMaterialbase -> mdMeMaterialbase.getMaterial_code().contains("S") && Pattern.matches("^[0-9]*$", mdMeMaterialbase.getMaterial_name().substring(mdMeMaterialbase.getMaterial_name().length() - 1))).findFirst();
if (first.isPresent()) {
workorder.setMaterial_id(first.get().getMaterial_id());
} else {
errorMap.put("" + (i + 1) + "行:", "物料规格:" + workorder.getMaterial_id() + "不存在");
}
}
} else { } else {
errorMap.put("" + (i + 1) + "行:", "物料规格:" + workorder.getMaterial_id() + "不存在"); errorMap.put("" + (i + 1) + "行:", "物料规格:" + workorder.getMaterial_id() + "不存在");
@@ -681,170 +687,158 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
} }
} }
private void 综合(InputStream inputStream) { private void 综合(InputStream inputStream) {
ExcelReader excelReader = ExcelUtil.getReader(inputStream, 0); ExcelReader excelReader = ExcelUtil.getReader(inputStream, 0);
List<List<Object>> read = excelReader.read(); List<List<Object>> read = excelReader.read();
// 循环获取的数据 // 循环获取的数据
List<PdmProduceWorkorder> data = new ArrayList<>(); List<PdmProduceWorkorder> data = new ArrayList<>();
Map<String,String> errorMap = new HashMap(); Map<String, String> errorMap = new HashMap();
List<String> workprodures = new ArrayList<>(); List<String> workprodures = new ArrayList<>();
List<String> materialSpecs = new ArrayList<>(); List<String> materialSpecs = new ArrayList<>();
List<String> persons = new ArrayList<>(); List<String> persons = new ArrayList<>();
row: row:
for(int i = 0; i < read.size(); i++) { for (int i = 0; i < read.size(); i++) {
List<Object> list = read.get(i); List<Object> list = read.get(i);
if(ObjectUtil.isEmpty(list)) { if (ObjectUtil.isEmpty(list)) {
continue; continue;
} }
PdmProduceWorkorder workorder = new PdmProduceWorkorder(); PdmProduceWorkorder workorder = new PdmProduceWorkorder();
packageForm(workorder); packageForm(workorder);
for(int j = 0; j < list.size(); j++) { for (int j = 0; j < list.size(); j++) {
String col = String.valueOf(list.get(j)); String col = String.valueOf(list.get(j));
解析cell: 解析cell:
{ //如果是第一行 为生产日期 { //如果是第一行 为生产日期
if(i == 0 && j == 0) { if (i == 0 && j == 0) {
continue row; continue row;
} }
//如果第一列包含规格二字 则为表头 结束内循环列 //如果第一列包含规格二字 则为表头 结束内循环列
if(j == 0 && col.contains("班次")) { if (j == 0 && col.contains("班次")) {
continue row; continue row;
} }
if(j == 0) { if (j == 0) {
workorder.setShift_type_scode("晚班".equals(col) ? "2" : "1"); workorder.setShift_type_scode("晚班".equals(col) ? "2" : "1");
} }
if(j == 1) { if (j == 1) {
if("1".equals(workorder.getShift_type_scode())) { if ("1".equals(workorder.getShift_type_scode())) {
workorder.setPlanproduceend_date(col.substring(0, col.indexOf(" ")) + " 18:30:00"); workorder.setPlanproduceend_date(col.substring(0, col.indexOf(" ")) + " 18:30:00");
workorder.setPlanproducestart_date(col.substring(0, col.indexOf(" ")) + " 07:30:00"); workorder.setPlanproducestart_date(col.substring(0, col.indexOf(" ")) + " 07:30:00");
} } else {
else{ workorder.setPlanproducestart_date(col.substring(0, col.indexOf(" ")) + " 18:30:00");
workorder.setPlanproducestart_date(col.substring(0, col.indexOf(" ")) + " 18:30:00"); workorder.setPlanproduceend_date(col.substring(0, col.indexOf(" ")) + " 07:30:00");
workorder.setPlanproduceend_date(col.substring(0, col.indexOf(" ")) + " 07:30:00"); }
} }
} if (j == 2) {
if(j == 2) { //物料
//物料 materialSpecs.add(col);
materialSpecs.add(col); workorder.setMaterial_id(col);
workorder.setMaterial_id(col); }
} if (j == 4) {
if(j == 4) { workprodures.add(col);
workprodures.add(col); workorder.setWorkprocedure_id(col);
workorder.setWorkprocedure_id(col); }
} if (j == 5) {
if(j == 5) { //设备 A1_TW_
//设备 A1_TW_ workorder.setDevice_code(col);
workorder.setDevice_code(col); }
} if (j == 9) {
if(j == 9) { //单重
//单重 BigDecimal bigDecimal = BigDecimal.valueOf(Double.parseDouble("#N/A".equals(col) ? "0.05" : col) * 1000);
BigDecimal bigDecimal = BigDecimal.valueOf(Double.parseDouble("#N/A".equals(col) ? "0.05" : col) * 1000);
// workorder.setMaterial_weight(bigDecimal.setScale(3, RoundingMode.HALF_UP)); // workorder.setMaterial_weight(bigDecimal.setScale(3, RoundingMode.HALF_UP));
}
if(j == 10) {
persons.add(col);
workorder.setCurrent_produce_person_id(col);
}
if(j == 11) {
workorder.setPlan_qty(new BigDecimal(Long.valueOf(col)));
}
if(j == 15) {
workorder.setIs_needmove("".equals(col) ? true : false);
}
if(j == 16) {
workorder.setRemark(col);
}
} }
} if (j == 10) {
if(CollectionUtils.isEmpty(errorMap)) { persons.add(col);
data.add(workorder); workorder.setCurrent_produce_person_id(col);
}
}
List<MdMeMaterialbase> tmp_material_specs = materialbaseService.list(new QueryWrapper<MdMeMaterialbase>().in("material_spec", materialSpecs));
List<SysUser> tmp_sysUsers = userService.list(new QueryWrapper<SysUser>().in("person_name", persons));
List<PdmBiWorkprocedure> tmp_workprocedure_names = workprocedureService.list(new QueryWrapper<PdmBiWorkprocedure>().in("workprocedure_name", workprodures));
Map<String,PdmBiWorkprocedure> collect = tmp_workprocedure_names.stream().collect(HashMap::new, (k, v) -> k.put(v.getWorkprocedure_name(), v), HashMap::putAll);
Map<String,SysUser> users = tmp_sysUsers.stream().collect(HashMap::new, (k, v) -> k.put(v.getPerson_name(), v), HashMap::putAll);
Map<String,List<MdMeMaterialbase>> materialspecs = tmp_material_specs.stream().collect(Collectors.groupingBy(MdMeMaterialbase::getMaterial_spec));
for(int i = 0; i < data.size(); i++) {
PdmProduceWorkorder workorder = data.get(i);
SysUser sysUser = users.get(workorder.getCurrent_produce_person_id());
if(sysUser == null) {
//errorMap.put("第" + (i + 1) + "行:", "账号:" + workorder.getCurrent_produce_person_id() + "不存在");
workorder.setCurrent_produce_person_id(null);
}
else{
workorder.setCurrent_produce_person_id(sysUser.getUser_id());
}
PdmBiWorkprocedure workprocedure = collect.get(workorder.getWorkprocedure_id());
if(workprocedure == null) {
errorMap.put("" + (i + 1) + "行:", "工序名称:" + workorder.getWorkprocedure_id() + "不存在");
}
else{
workorder.setWorkprocedure_id(workprocedure.getWorkprocedure_id());
}
List<MdMeMaterialbase> mdMeMaterialbases = materialspecs.get(workorder.getMaterial_id());
if(!CollectionUtils.isEmpty(mdMeMaterialbases)) {
if(mdMeMaterialbases.size() == 1) {
workorder.setMaterial_id(mdMeMaterialbases.get(0).getMaterial_id());
} }
else{ if (j == 11) {
Optional<MdMeMaterialbase> first = mdMeMaterialbases.stream().filter(mdMeMaterialbase -> mdMeMaterialbase.getMaterial_code().contains("S") && Pattern.matches("^[0-9]*$", mdMeMaterialbase.getMaterial_name().substring(mdMeMaterialbase.getMaterial_name().length() - 1))).findFirst(); workorder.setPlan_qty(new BigDecimal(Long.valueOf(col)));
if(first.isPresent()) {
workorder.setMaterial_id(first.get().getMaterial_id());
}
else{
errorMap.put("" + (i + 1) + "行:", "物料规格:" + workorder.getMaterial_id() + "不存在");
}
} }
} if (j == 15) {
else{ workorder.setIs_needmove("".equals(col) ? true : false);
errorMap.put("" + (i + 1) + "行:", "物料规格:" + workorder.getMaterial_id() + "不存在"); }
} if (j == 16) {
} workorder.setRemark(col);
if(!CollectionUtils.isEmpty(errorMap)) { }
throw new BadRequestException(JSON.toJSONString(errorMap)); }
} }
else{ if (CollectionUtils.isEmpty(errorMap)) {
List<String> workprocedures = data.stream().map(PdmProduceWorkorder::getWorkprocedure_id).collect(Collectors.toList()); data.add(workorder);
List<PdmBiDevice> list = deviceService.list(new QueryWrapper<PdmBiDevice>().in("workprocedure_id", workprocedures)); }
Map<String,List<PdmBiDevice>> listMap = list.stream().collect(Collectors.groupingBy(PdmBiDevice::getWorkprocedure_id)); }
for(int i = 0; i < data.size(); i++) { List<MdMeMaterialbase> tmp_material_specs = materialbaseService.list(new QueryWrapper<MdMeMaterialbase>().in("material_spec", materialSpecs));
PdmProduceWorkorder item = data.get(i); List<SysUser> tmp_sysUsers = userService.list(new QueryWrapper<SysUser>().in("person_name", persons));
List<PdmBiDevice> devices = listMap.get(item.getWorkprocedure_id()); List<PdmBiWorkprocedure> tmp_workprocedure_names = workprocedureService.list(new QueryWrapper<PdmBiWorkprocedure>().in("workprocedure_name", workprodures));
if (StringUtils.isNotEmpty(item.getDevice_code())){ Map<String, PdmBiWorkprocedure> collect = tmp_workprocedure_names.stream().collect(HashMap::new, (k, v) -> k.put(v.getWorkprocedure_name(), v), HashMap::putAll);
if("1535144356586165920".equals(item.getWorkprocedure_id())) { Map<String, SysUser> users = tmp_sysUsers.stream().collect(HashMap::new, (k, v) -> k.put(v.getPerson_name(), v), HashMap::putAll);
item.setDevice_code("A1_DC_" + item.getDevice_code().replaceAll("-", "_")); Map<String, List<MdMeMaterialbase>> materialspecs = tmp_material_specs.stream().collect(Collectors.groupingBy(MdMeMaterialbase::getMaterial_spec));
for (int i = 0; i < data.size(); i++) {
PdmProduceWorkorder workorder = data.get(i);
SysUser sysUser = users.get(workorder.getCurrent_produce_person_id());
if (sysUser == null) {
//errorMap.put("第" + (i + 1) + "行:", "账号:" + workorder.getCurrent_produce_person_id() + "不存在");
workorder.setCurrent_produce_person_id(null);
} else {
workorder.setCurrent_produce_person_id(sysUser.getUser_id());
}
PdmBiWorkprocedure workprocedure = collect.get(workorder.getWorkprocedure_id());
if (workprocedure == null) {
errorMap.put("" + (i + 1) + "行:", "工序名称:" + workorder.getWorkprocedure_id() + "不存在");
} else {
workorder.setWorkprocedure_id(workprocedure.getWorkprocedure_id());
}
List<MdMeMaterialbase> mdMeMaterialbases = materialspecs.get(workorder.getMaterial_id());
if (!CollectionUtils.isEmpty(mdMeMaterialbases)) {
if (mdMeMaterialbases.size() == 1) {
workorder.setMaterial_id(mdMeMaterialbases.get(0).getMaterial_id());
} else {
Optional<MdMeMaterialbase> first = mdMeMaterialbases.stream().filter(mdMeMaterialbase -> mdMeMaterialbase.getMaterial_code().contains("S") && Pattern.matches("^[0-9]*$", mdMeMaterialbase.getMaterial_name().substring(mdMeMaterialbase.getMaterial_name().length() - 1))).findFirst();
if (first.isPresent()) {
workorder.setMaterial_id(first.get().getMaterial_id());
} else {
errorMap.put("" + (i + 1) + "行:", "物料规格:" + workorder.getMaterial_id() + "不存在");
}
}
} else {
errorMap.put("" + (i + 1) + "行:", "物料规格:" + workorder.getMaterial_id() + "不存在");
}
}
if (!CollectionUtils.isEmpty(errorMap)) {
throw new BadRequestException(JSON.toJSONString(errorMap));
} else {
List<String> workprocedures = data.stream().map(PdmProduceWorkorder::getWorkprocedure_id).collect(Collectors.toList());
List<PdmBiDevice> list = deviceService.list(new QueryWrapper<PdmBiDevice>().in("workprocedure_id", workprocedures));
Map<String, List<PdmBiDevice>> listMap = list.stream().collect(Collectors.groupingBy(PdmBiDevice::getWorkprocedure_id));
for (int i = 0; i < data.size(); i++) {
PdmProduceWorkorder item = data.get(i);
List<PdmBiDevice> devices = listMap.get(item.getWorkprocedure_id());
if (StringUtils.isNotEmpty(item.getDevice_code())) {
if ("1535144356586165920".equals(item.getWorkprocedure_id())) {
item.setDevice_code("A1_DC_" + item.getDevice_code().replaceAll("-", "_"));
} else if ("1535143882327724032".equals(item.getWorkprocedure_id())) {
item.setDevice_code("A1_XY_" + item.getDevice_code().replaceAll("-", "_"));
} else {
List<PdmBiDevice> deviceCollect = devices.stream().filter(pdmBiDevice -> {
String device_code = pdmBiDevice.getDevice_code();
int indexOf = device_code.lastIndexOf("_");
String substring = device_code.substring(indexOf + 1);
return Integer.valueOf(substring).equals(Integer.valueOf(item.getDevice_code()));
}).collect(Collectors.toList());
if (CollectionUtils.isEmpty(deviceCollect) || deviceCollect.size() > 1) {
errorMap.put("" + (i + 1) + "行:", "设备名称:" + item.getDevice_code() + "不存在了!!");
} else {
item.setDevice_code(deviceCollect.get(0).getDevice_code());
} }
else if("1535143882327724032".equals(item.getWorkprocedure_id())) {
item.setDevice_code("A1_XY_" + item.getDevice_code().replaceAll("-", "_"));
}
else{
List<PdmBiDevice> deviceCollect = devices.stream().filter(pdmBiDevice ->
{
String device_code = pdmBiDevice.getDevice_code();
int indexOf = device_code.lastIndexOf("_");
String substring = device_code.substring(indexOf + 1);
return Integer.valueOf(substring).equals(Integer.valueOf(item.getDevice_code()));
}).collect(Collectors.toList());
if(CollectionUtils.isEmpty(deviceCollect) || deviceCollect.size() > 1) {
errorMap.put("" + (i + 1) + "行:", "设备名称:" + item.getDevice_code() + "不存在了!!");
}
else{
item.setDevice_code(deviceCollect.get(0).getDevice_code());
}
}
}else {
item.setDevice_code(null);
} }
} } else {
if(!CollectionUtils.isEmpty(errorMap)) { item.setDevice_code(null);
throw new BadRequestException(JSON.toJSONString(errorMap)); }
} }
else{ if (!CollectionUtils.isEmpty(errorMap)) {
this.saveBatch(data); throw new BadRequestException(JSON.toJSONString(errorMap));
} } else {
} this.saveBatch(data);
} }
}
}
private void packageForm(PdmProduceWorkorder workorder) { private void packageForm(PdmProduceWorkorder workorder) {
workorder.setWorkorder_id(IdUtil.getStringId()); workorder.setWorkorder_id(IdUtil.getStringId());
@@ -891,7 +885,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
workOrder.setUpdate_time(new Date()); workOrder.setUpdate_time(new Date());
workOrder.setUpdate_id(SecurityUtils.getCurrentUserId()); workOrder.setUpdate_id(SecurityUtils.getCurrentUserId());
workOrder.setUpdate_name(SecurityUtils.getCurrentNickName()); workOrder.setUpdate_name(SecurityUtils.getCurrentNickName());
workOrder.setAps_realproducestart_date(getDates(workOrder.getPlanproducestart_date(),workOrder.getCreate_type().equals(StatusEnum.APSINTO.getCode())?"yyyy/MM/dd HH:mm:ss":"yyyy-MM-dd HH:mm:ss")); workOrder.setAps_realproducestart_date(getDates(workOrder.getPlanproducestart_date(), workOrder.getCreate_type().equals(StatusEnum.APSINTO.getCode()) ? "yyyy/MM/dd HH:mm:ss" : "yyyy-MM-dd HH:mm:ss"));
workOrder.setRepare_qty(new BigDecimal(0)); workOrder.setRepare_qty(new BigDecimal(0));
workOrder.setReal_qty(null); workOrder.setReal_qty(null);
workOrder.setAps_assign_qty(workOrder.getPlan_qty()); workOrder.setAps_assign_qty(workOrder.getPlan_qty());
@@ -901,15 +895,11 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
if (workOrder.getWorkorder_id().indexOf(":") != workOrder.getWorkorder_id().lastIndexOf(":")) { if (workOrder.getWorkorder_id().indexOf(":") != workOrder.getWorkorder_id().lastIndexOf(":")) {
String workOrderId = workOrder.getWorkorder_id().substring(0, workOrder.getWorkorder_id().indexOf(":", workOrder.getWorkorder_id().indexOf(":") + 1)); String workOrderId = workOrder.getWorkorder_id().substring(0, workOrder.getWorkorder_id().indexOf(":", workOrder.getWorkorder_id().indexOf(":") + 1));
Optional<PdmProduceWorkorder> sonWorkOrder = Optional.ofNullable(getOne(new QueryWrapper<PdmProduceWorkorder>().lambda() Optional<PdmProduceWorkorder> sonWorkOrder = Optional.ofNullable(getOne(new QueryWrapper<PdmProduceWorkorder>().lambda().like(PdmProduceWorkorder::getWorkorder_id, workOrderId).ne(PdmProduceWorkorder::getAps_work_type, "S").orderByAsc(PdmProduceWorkorder::getPlanproducestart_date).last("LIMIT 1")));
.like(PdmProduceWorkorder::getWorkorder_id, workOrderId)
.ne(PdmProduceWorkorder::getAps_work_type,"S")
.orderByAsc(PdmProduceWorkorder::getPlanproducestart_date)
.last("LIMIT 1")));
sonWorkOrder.ifPresent(workOrders -> { sonWorkOrder.ifPresent(workOrders -> {
try { try {
workOrders.setAps_assign_qty(workOrders.getPlan_qty()); workOrders.setAps_assign_qty(workOrders.getPlan_qty());
workOrders.setAps_realproducestart_date(getDates(workOrders.getPlanproducestart_date(),workOrders.getCreate_type().equals(StatusEnum.APSINTO.getCode())?"yyyy/MM/dd HH:mm:ss":"yyyy-MM-dd HH:mm:ss")); workOrders.setAps_realproducestart_date(getDates(workOrders.getPlanproducestart_date(), workOrders.getCreate_type().equals(StatusEnum.APSINTO.getCode()) ? "yyyy/MM/dd HH:mm:ss" : "yyyy-MM-dd HH:mm:ss"));
workOrders.setUpdate_time(new Date()); workOrders.setUpdate_time(new Date());
} catch (ParseException e) { } catch (ParseException e) {
throw new BadRequestException(e.getMessage()); throw new BadRequestException(e.getMessage());
@@ -918,10 +908,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
}); });
//父工单强制指定需生产数量 //父工单强制指定需生产数量
Optional<PdmProduceWorkorder> fatherWorkOrder = Optional.ofNullable(getOne(new QueryWrapper<PdmProduceWorkorder>().lambda() Optional<PdmProduceWorkorder> fatherWorkOrder = Optional.ofNullable(getOne(new QueryWrapper<PdmProduceWorkorder>().lambda().like(PdmProduceWorkorder::getWorkorder_id, workOrderId).eq(PdmProduceWorkorder::getAps_work_type, "S").last("LIMIT 1")));
.like(PdmProduceWorkorder::getWorkorder_id, workOrderId)
.eq(PdmProduceWorkorder::getAps_work_type,"S")
.last("LIMIT 1")));
fatherWorkOrder.ifPresent(workOrders -> { fatherWorkOrder.ifPresent(workOrders -> {
workOrders.setAps_assign_qty(workOrders.getPlan_qty()); workOrders.setAps_assign_qty(workOrders.getPlan_qty());
workOrders.setUpdate_time(new Date()); workOrders.setUpdate_time(new Date());
@@ -965,32 +952,35 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
return workorderrecord; return workorderrecord;
} }
@NotNull @NotNull
private JSONObject packageForm(JSONObject param) { private JSONObject packageForm(JSONObject param) {
PdmProduceWorkorder workOrder = this.getOne(new QueryWrapper<PdmProduceWorkorder>().eq("workorder_id", param.getString("workorder_id"))); PdmProduceWorkorder workOrder = this.getOne(new QueryWrapper<PdmProduceWorkorder>().eq("workorder_id", param.getString("workorder_id")));
JSONObject form = new JSONObject(); JSONObject form = new JSONObject();
MdMeMaterialbase material = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", workOrder.getMaterial_id())); MdMeMaterialbase material = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", workOrder.getMaterial_id()));
PdmBiDevice device = deviceService.getOne(new QueryWrapper<PdmBiDevice>().eq("device_code", workOrder.getDevice_code())); PdmBiDevice device = deviceService.getOne(new QueryWrapper<PdmBiDevice>().eq("device_code", workOrder.getDevice_code()));
form.put("workorder_id", workOrder.getWorkorder_id()); form.put("workorder_id", workOrder.getWorkorder_id());
form.put("workorder_code", workOrder.getWorkorder_code()); form.put("workorder_code", workOrder.getWorkorder_code());
form.put("qty", workOrder.getPlan_qty()); form.put("qty", workOrder.getPlan_qty());
Integer limit_qty = material.getLimit_qty(); if (material == null) {
form.put("outupperlimit_qty", limit_qty); throw new BadRequestException("物料信息不能为空!");
if (limit_qty == null || limit_qty<1){ }
form.put("outupperlimit_qty", device.getOutupperlimit_qty()); Integer limit_qty = material.getLimit_qty();
} form.put("outupperlimit_qty", limit_qty);
form.put("material_id", workOrder.getMaterial_id()); if (limit_qty == null || limit_qty < 1) {
form.put("material_name", material.getMaterial_name()); form.put("outupperlimit_qty", device.getOutupperlimit_qty());
form.put("material_code", material.getMaterial_code()); }
form.put("material_spec", material.getMaterial_spec()); form.put("material_id", workOrder.getMaterial_id());
form.put("device_code", workOrder.getDevice_code()); form.put("material_name", material.getMaterial_name());
form.put("is_needmove", workOrder.getIs_needmove() ? 1 : 0); form.put("material_code", material.getMaterial_code());
form.put("package_ext", workOrder.getPackage_ext()); form.put("material_spec", material.getMaterial_spec());
if(param.containsKey("extra_map")) { form.put("device_code", workOrder.getDevice_code());
form.put("extra_map", param.getJSONObject("extra_map")); form.put("is_needmove", workOrder.getIs_needmove() ? 1 : 0);
} form.put("package_ext", workOrder.getPackage_ext());
return form; if (param.containsKey("extra_map")) {
} form.put("extra_map", param.getJSONObject("extra_map"));
}
return form;
}
@Override @Override
public void unqualReport(JSONObject param) { public void unqualReport(JSONObject param) {
@@ -1013,8 +1003,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
Map<String, List<PdmProduceWorkorderrecord>> collect = workreportRecords.stream().collect(Collectors.groupingBy(PdmProduceWorkorderrecord::getWorkorder_id)); Map<String, List<PdmProduceWorkorderrecord>> collect = workreportRecords.stream().collect(Collectors.groupingBy(PdmProduceWorkorderrecord::getWorkorder_id));
for (Map.Entry<String, List<PdmProduceWorkorderrecord>> entry : collect.entrySet()) { for (Map.Entry<String, List<PdmProduceWorkorderrecord>> entry : collect.entrySet()) {
List<PdmProduceWorkorderrecord> itemRecord = entry.getValue(); List<PdmProduceWorkorderrecord> itemRecord = entry.getValue();
itemRecord.forEach(item -> itemRecord.forEach(item -> {
{
item.setReport_status(ReportEnum.REPORT_STATUS.code("报工审核")); item.setReport_status(ReportEnum.REPORT_STATUS.code("报工审核"));
item.setConfirm_id(SecurityUtils.getCurrentUserId()); item.setConfirm_id(SecurityUtils.getCurrentUserId());
item.setConfirm_name(SecurityUtils.getCurrentNickName()); item.setConfirm_name(SecurityUtils.getCurrentNickName());
@@ -1074,8 +1063,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
} }
@Override @Override
public void download(Map whereJson, HttpServletResponse response) public void download(Map whereJson, HttpServletResponse response) throws IOException {
throws IOException {
HashMap<String, String> map = new HashMap<>(whereJson); HashMap<String, String> map = new HashMap<>(whereJson);
int i = 1; int i = 1;
List<Map<String, Object>> excel_lst = new ArrayList<>(); List<Map<String, Object>> excel_lst = new ArrayList<>();
@@ -1196,8 +1184,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
List<Map> workOrders = pdmProduceWorkorderMapper.queryAdjustWorkOrder(query); List<Map> workOrders = pdmProduceWorkorderMapper.queryAdjustWorkOrder(query);
List<Map> deviceCount = pdmProduceWorkorderMapper.queryDeviceCount(query); List<Map> deviceCount = pdmProduceWorkorderMapper.queryDeviceCount(query);
Map<String, String> deviceCountMap = deviceCount.stream().filter(item -> item.get("sale_id") != null).collect(Collectors.toMap(item -> item.get("sale_id").toString(), item -> item.get("device_count").toString())); Map<String, String> deviceCountMap = deviceCount.stream().filter(item -> item.get("sale_id") != null).collect(Collectors.toMap(item -> item.get("sale_id").toString(), item -> item.get("device_count").toString()));
workOrders.forEach(workOrder -> workOrders.forEach(workOrder -> {
{
if ("999".equals(workOrder.get("NO").toString())) { if ("999".equals(workOrder.get("NO").toString())) {
workOrder.put("num_sort", "999"); workOrder.put("num_sort", "999");
workOrder.put("NO", ""); workOrder.put("NO", "");
@@ -1205,7 +1192,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
String saleId = (String) workOrder.get("sale_id"); String saleId = (String) workOrder.get("sale_id");
if (deviceCountMap.containsKey(saleId)) { if (deviceCountMap.containsKey(saleId)) {
workOrder.put("device_count", deviceCountMap.get(saleId)); workOrder.put("device_count", deviceCountMap.get(saleId));
}else{ } else {
workOrder.put("device_count", "1"); workOrder.put("device_count", "1");
} }
@@ -1217,12 +1204,21 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
} }
@Override @Override
public List<Map> queryStatisticsSpec(WorkorderQuery query) { public List<Map> specOptionsSelect() {
return pdmProduceWorkorderMapper.specOptionsSelect();
}
@Override
public TableDataInfo queryStatisticsSpec(WorkorderQuery query, PageQuery pageQuery) {
Page<Object> page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize()).setOrderBy(pageQuery.getSort());
List<Map> workOrders = pdmProduceWorkorderMapper.queryStatisticsSpec(query); List<Map> workOrders = pdmProduceWorkorderMapper.queryStatisticsSpec(query);
if (!CollectionUtils.isEmpty(workOrders) && StringUtils.isNotBlank(query.getMaterial())) { if (!CollectionUtils.isEmpty(workOrders) && StringUtils.isNotBlank(query.getMaterial())) {
workOrders = workOrders.stream().filter(map -> query.getMaterial().equals(map.get("material_spec"))).collect(Collectors.toList()); workOrders = workOrders.stream().filter(map -> query.getMaterial().equals(map.get("material_spec"))).collect(Collectors.toList());
} }
return workOrders; TableDataInfo build = TableDataInfo.build(workOrders);
build.setTotalElements(page.getTotal());
return build;
} }
@Override @Override
@@ -1248,13 +1244,15 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
public static List<Map<String, Object>> removeAdjacentDuplicates(List<Map> workOrders) { public static List<Map<String, Object>> removeAdjacentDuplicates(List<Map> workOrders) {
List<Map<String, Object>> result = new ArrayList<>(); List<Map<String, Object>> result = new ArrayList<>();
try { try {
workOrders = workOrders.stream() workOrders = workOrders.stream().sorted(Comparator.comparing(m -> m.get("NO").toString())).collect(Collectors.toList());
.sorted(Comparator.comparing(m -> m.get("NO").toString()))
.collect(Collectors.toList());
for (int i = 0; i < workOrders.size(); i++) { for (int i = 0; i < workOrders.size(); i++) {
Map currentOrder = workOrders.get(i); Map currentOrder = workOrders.get(i);
if (i == 0 || !currentOrder.get("material_spec").equals(workOrders.get(i - 1).get("material_spec"))) { if (i == 0) {
result.add(currentOrder); result.add(currentOrder);
} else if (currentOrder.get("material_spec") != null && workOrders.get(i - 1).get("material_spec") != null) {
if (!currentOrder.get("material_spec").equals(workOrders.get(i - 1).get("material_spec"))) {
result.add(currentOrder);
}
} }
} }
if (result.size() > 1) { if (result.size() > 1) {
@@ -1262,8 +1260,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
} else { } else {
return null; return null;
} }
}catch (Exception e) } catch (Exception e) {
{
throw new BadRequestException(e.getMessage()); throw new BadRequestException(e.getMessage());
} }
} }
@@ -1300,6 +1297,10 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
params.put("material_id", materialId); params.put("material_id", materialId);
MpsSaleOrder mpsSaleOrder = mpsSaleOrderServiceImpl.getOne(new LambdaUpdateWrapper<MpsSaleOrder>().eq(MpsSaleOrder::getSale_id, saleId)); MpsSaleOrder mpsSaleOrder = mpsSaleOrderServiceImpl.getOne(new LambdaUpdateWrapper<MpsSaleOrder>().eq(MpsSaleOrder::getSale_id, saleId));
if (mpsSaleOrder != null) { if (mpsSaleOrder != null) {
MdMeMaterialbase material = materialbaseService.getOne(new LambdaUpdateWrapper<MdMeMaterialbase>().eq(MdMeMaterialbase::getMaterial_id, materialId));
if (material.getNet_weight() == null) {
throw new BadRequestException("该物料规格无单重信息");
}
// 1. 订单正在生产的工单计划数量总和 // 1. 订单正在生产的工单计划数量总和
BigDecimal saleOrderWorkingQty = this.list(new LambdaUpdateWrapper<PdmProduceWorkorder>().eq(PdmProduceWorkorder::getSale_id, saleCode).eq(PdmProduceWorkorder::getWorkorder_status, WorkerOrderEnum.PRODUCTING.getCode())).stream().map(PdmProduceWorkorder::getPlan_qty).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal saleOrderWorkingQty = this.list(new LambdaUpdateWrapper<PdmProduceWorkorder>().eq(PdmProduceWorkorder::getSale_id, saleCode).eq(PdmProduceWorkorder::getWorkorder_status, WorkerOrderEnum.PRODUCTING.getCode())).stream().map(PdmProduceWorkorder::getPlan_qty).reduce(BigDecimal.ZERO, BigDecimal::add);
// 2. 半成品库存数量冻结数 = 当前物料对应未开工的刻字工单计划数量总和(未开工包括创建,下发,暂停) // 2. 半成品库存数量冻结数 = 当前物料对应未开工的刻字工单计划数量总和(未开工包括创建,下发,暂停)
@@ -1307,10 +1308,6 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
// 3. 半成品库存现存数量 = 当前物料对应半成品库库存总数(重量需转换成数量) // 3. 半成品库存现存数量 = 当前物料对应半成品库库存总数(重量需转换成数量)
List<Map> bcpInfo = iStIvtStructivtBcpService.getPdaBcpIvt(params); List<Map> bcpInfo = iStIvtStructivtBcpService.getPdaBcpIvt(params);
BigDecimal totalCanUseQty = bcpInfo.stream().map(item -> new BigDecimal(item.get("canuse_qty").toString())).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal totalCanUseQty = bcpInfo.stream().map(item -> new BigDecimal(item.get("canuse_qty").toString())).reduce(BigDecimal.ZERO, BigDecimal::add);
MdMeMaterialbase material = materialbaseService.getOne(new LambdaUpdateWrapper<MdMeMaterialbase>().eq(MdMeMaterialbase::getMaterial_id, materialId));
if (material.getNet_weight() == null) {
throw new BadRequestException("该物料规格无单重信息");
}
//半成品库存重量转换半成品数量 //半成品库存重量转换半成品数量
BigDecimal totalBcpQty = totalCanUseQty.divide(material.getNet_weight(), 2, RoundingMode.HALF_UP); BigDecimal totalBcpQty = totalCanUseQty.divide(material.getNet_weight(), 2, RoundingMode.HALF_UP);
// 4. 订单待刻字数量=订单计划数量-已刻字数量-订单正在生产的工单计划数量总和 // 4. 订单待刻字数量=订单计划数量-已刻字数量-订单正在生产的工单计划数量总和

View File

@@ -0,0 +1,4 @@
ALTER TABLE pdm_produce_workorder
MODIFY COLUMN aps_workorder_no INT DEFAULT 999;
UPDATE pdm_produce_workorder
SET aps_workorder_no = 999;

View File

@@ -0,0 +1,114 @@
<template>
<el-dialog
v-el-drag-dialog
:close-on-click-modal="false"
:visible.sync="querySpecVisible"
class="edit-form"
width="75%"
>
<div style="display: flex; flex-direction: column;">
<el-card class="box-card" shadow="never">
<el-form :inline="true" size="mini">
<el-form-item label="规格:">
<el-select
v-model="query.material_id"
class="filter-item"
clearable
filterable
placeholder="选择规格"
size="small"
style="width: 220px"
@change="materialSelectSpec(query.material_id)"
>
<el-option
v-for="item in selectSpecOptions"
:key="item.material_id"
:label="item.material_spec"
:value="item.material_id"
/>
</el-select>
</el-form-item>
</el-form>
</el-card>
<div class="table-container" style="width: 100%">
<el-table :data="crud.data">
<el-table-column label="工序" prop="workprocedure_name"></el-table-column>
<el-table-column label="规格" prop="material_spec"></el-table-column>
<el-table-column label="计划开机数" prop="device_count"></el-table-column>
<el-table-column label="开始生产时间" prop="start_time"></el-table-column>
<el-table-column label="订单交期" prop="plandeliver_date"></el-table-column>
<el-table-column label="工单号" prop="workorder_no"></el-table-column>
<el-table-column label="工单数" prop="workorder_count"></el-table-column>
<el-table-column label="生产总数" prop="plan_qty"></el-table-column>
</el-table>
<pagination/>
</div>
<div style="margin-bottom: 40px;"></div>
</div>
</el-dialog>
</template>
<script>
import CRUD, { header, presenter } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import pagination from '@crud/Pagination'
import crudProduceshiftorder from '@/views/wms/product_manage/workorder/produceshiftorder'
export default {
name: 'SpecStatisticDialog',
components: { rrOperation, pagination },
cruds() {
return CRUD({
title: '规格统计',
url: 'api/produceWorkorder/queryStatisticsSpec',
sort: 'start_time',
crudMethod: { ...crudProduceshiftorder },
optShow: {}
})
},
mixins: [presenter(), header()],
data() {
return {
selectSpecOptions: [],
material_spec: null,
querySpecVisible: false
}
},
created() {
this.getSpecOptions()
},
methods: {
async materialSelectSpec(material_id) {
try {
debugger
console.log(material_id)
this.crud.toQuery()
} catch (err) {
console.log(err)
}
},
getSpecOptions() {
debugger
// 查询规格统计下拉框
crudProduceshiftorder.specOptionsSelect().then(res => {
this.selectSpecOptions = res.content
})
},
async openQuerySpec() {
try {
this.crud.toQuery()
this.querySpecVisible = true
} catch (err) {
console.log(err)
}
}
}
}
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
::v-deep .el-dialog__body {
padding-top: 0px;
}
</style>

View File

@@ -139,14 +139,13 @@
</el-dialog> </el-dialog>
<!-- 规格弹窗 --> <!-- 规格弹窗 -->
<el-dialog <el-dialog
v-loading.fullscreen.lock="fullscreenLoading"
:before-close="handleClose" :before-close="handleClose"
:close-on-click-modal="false" :close-on-click-modal="false"
:visible.sync="editSpecVisible" :visible.sync="editSpecVisible"
width="96%" width="96%"
> >
<div style="display: flex; height:800px;flex-direction: column;"> <div style="display: flex; height:800px;flex-direction: column;">
<div style="display: flex; align-items: center;"> <div style="display: flex; align-items: center;">
<label style="margin-right: 10px;">规格:</label> <label style="margin-right: 10px;">规格:</label>
<el-select <el-select
@@ -299,6 +298,7 @@ export default {
}, },
data() { data() {
return { return {
fullscreenLoading: false,
tabs: [ tabs: [
{ label: '激光下料' }, { label: '激光下料' },
{ label: '旋压下料' }, { label: '旋压下料' },
@@ -405,6 +405,7 @@ export default {
}, },
//规格提交 //规格提交
submitTransfer() { submitTransfer() {
this.fullscreenLoading = true
const transferList = this.$refs.transfer.rightTableData const transferList = this.$refs.transfer.rightTableData
const params = { const params = {
'transferList': transferList, 'transferList': transferList,
@@ -412,22 +413,23 @@ export default {
tabIndex: this.tabIndex tabIndex: this.tabIndex
} }
crudProduceshiftorder.submitAdjustWorkOrder(params).then(res => { crudProduceshiftorder.submitAdjustWorkOrder(params).then(res => {
this.queryDeviceLists(this.tabIndex) this.fullscreenLoading = false
//this.editSpecVisible = false
this.$parent.success() this.$parent.success()
this.openMaterialSpec(this.device_code_select, this.selectedValue, this.sort) this.queryDeviceLists(this.tabIndex)
this.editSpecVisible = false
//this.openMaterialSpec(this.device_code_select, this.selectedValue, this.sort)
}) })
}, },
//点击规格 //点击规格
async openMaterialSpec(deviceCode, selectedValue, sort) { async openMaterialSpec(deviceCode, selectedValue, sort) {
try { try {
debugger
if (selectedValue !== '') { if (selectedValue !== '') {
this.selectedValue = selectedValue this.selectedValue = selectedValue
} }
if (sort !== '') { if (sort !== '') {
this.sort = sort this.sort = sort
} }
this.fullscreenLoading = true
const queryParam = { tabIndex: this.tabIndex } const queryParam = { tabIndex: this.tabIndex }
const res = await crudProduceshiftorder.queryAdjustWorkOrder(queryParam) const res = await crudProduceshiftorder.queryAdjustWorkOrder(queryParam)
const content = res.content const content = res.content
@@ -437,13 +439,12 @@ export default {
} }
return acc return acc
}, []) }, [])
debugger
if (selectedValue !== '' || this.sort !== '') { if (selectedValue !== '' || this.sort !== '') {
if (this.selectedValue !== '') { if (this.selectedValue !== '') {
debugger
this.editSpecVisible = true this.editSpecVisible = true
this.tableData1 = content.filter(item => item.material_spec === this.selectedValue).sort((a, b) => a[this.sort] - b[this.sort]) this.tableData1 = content.filter(item => item.material_spec === this.selectedValue).sort((a, b) => a[this.sort] - b[this.sort])
this.$nextTick(() => { this.$nextTick(() => {
this.fullscreenLoading = false
this.$refs.transfer.leftTableData = content.filter(item => item.material_spec === this.selectedValue).sort((a, b) => a[this.sort] - b[this.sort]) this.$refs.transfer.leftTableData = content.filter(item => item.material_spec === this.selectedValue).sort((a, b) => a[this.sort] - b[this.sort])
this.$refs.transfer.$emit('initData', content.filter(item => item.NO !== 999 && item.device_code === this.device_code_select).sort((a, b) => a[this.sort] - b[this.sort])) this.$refs.transfer.$emit('initData', content.filter(item => item.NO !== 999 && item.device_code === this.device_code_select).sort((a, b) => a[this.sort] - b[this.sort]))
}) })
@@ -455,6 +456,7 @@ export default {
this.editSpecVisible = true this.editSpecVisible = true
this.tableData1 = content.sort((a, b) => a[this.sort] - b[this.sort]) this.tableData1 = content.sort((a, b) => a[this.sort] - b[this.sort])
this.$nextTick(() => { this.$nextTick(() => {
this.fullscreenLoading = false
this.$refs.transfer.leftTableData = content.sort((a, b) => a[this.sort] - b[this.sort]) this.$refs.transfer.leftTableData = content.sort((a, b) => a[this.sort] - b[this.sort])
this.$refs.transfer.$emit('initData', content.filter(item => item.NO !== 999 && item.device_code === this.device_code_select).sort((a, b) => a[this.sort] - b[this.sort])) this.$refs.transfer.$emit('initData', content.filter(item => item.NO !== 999 && item.device_code === this.device_code_select).sort((a, b) => a[this.sort] - b[this.sort]))
}) })
@@ -464,7 +466,7 @@ export default {
this.$refs.transfer.pageSize = 20 this.$refs.transfer.pageSize = 20
this.$refs.transfer.totalSize = this.tableData1.length this.$refs.transfer.totalSize = this.tableData1.length
} catch (err) { } catch (err) {
debugger this.fullscreenLoading = false
console.log(err) console.log(err)
} }
}, },
@@ -568,26 +570,26 @@ export default {
//点击规格统计 //点击规格统计
specStatistic() { specStatistic() {
this.queryMaterialSpec() // this.queryMaterialSpec()
this.querySpecVisible = true this.querySpecVisible = true
}, },
//点击规格统计 //点击规格统计
async queryMaterialSpec() { // async queryMaterialSpec() {
try { // try {
const queryParam = { orderBy: 'start_time' } // const queryParam = { orderBy: 'start_time' }
const res = await crudProduceshiftorder.queryStatisticsSpec(queryParam) // const res = await crudProduceshiftorder.queryStatisticsSpec(queryParam)
const content = res.content // const content = res.content
this.materialSpecData = content // this.materialSpecData = content
this.selectSpecOptions = content.reduce((acc, currentItem) => { // this.selectSpecOptions = content.reduce((acc, currentItem) => {
if (!acc.some(item => item.material_spec === currentItem.material_spec)) { // if (!acc.some(item => item.material_spec === currentItem.material_spec)) {
acc.push(currentItem) // acc.push(currentItem)
} // }
return acc // return acc
}, []) // }, [])
} catch (err) { // } catch (err) {
console.log(err) // console.log(err)
} // }
}, // },
//点击人员 //点击人员
async openPersonButton(deviceCode) { async openPersonButton(deviceCode) {
this.device_code_select = deviceCode this.device_code_select = deviceCode

View File

@@ -172,11 +172,11 @@
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<span <span
:style="{ :style="{
color: row.aps_workorder_no === '999' || row.aps_workorder_no == '0' ? '' : 'orange', color: row.aps_workorder_no === 999 || row.aps_workorder_no == 0 ? '' : 'orange',
fontWeight: row.aps_workorder_no === '999' || row.aps_workorder_no == '0' ? 'normal' : 'bold' fontWeight: row.aps_workorder_no === 999 || row.aps_workorder_no == 0 ? 'normal' : 'bold'
}" }"
> >
{{ row.aps_workorder_no === '999' || row.aps_workorder_no == '0' ? '未调整' : row.aps_workorder_no }} {{ row.aps_workorder_no === 999 || row.aps_workorder_no == 0 ? '未调整' : row.aps_workorder_no }}
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
@@ -276,51 +276,9 @@
</el-table> </el-table>
<!--分页组件--> <!--分页组件-->
<pagination/> <pagination/>
<SpecStatisticDialog ref="SpecStatisticDialog" :dialog-show.sync="querySpecVisible" @closeDialog="resetQuery"/>
<!-- 规格统计 -->
<el-dialog
v-el-drag-dialog
:close-on-click-modal="false"
:visible.sync="querySpecVisible"
class="edit-form"
width="75%"
>
<div style="display: flex; flex-direction: column;">
<el-select
v-model="material_spec"
clearable
filterable
placeholder="选择规格"
remote
style="width: 140px; margin-bottom: 10px;margin-top: 10px;"
@change="materialSelectSpec"
>
<el-option
v-for="item in selectSpecOptions"
:key="item.material_spec"
:label="item.material_spec"
:value="item.material_spec"
/>
</el-select>
<div class="table-container" style="width: 100%">
<el-table :data="materialSpecData">
<el-table-column label="工序" prop="workprocedure_name"></el-table-column>
<el-table-column label="规格" prop="material_spec"></el-table-column>
<el-table-column label="计划开机数" prop="device_count"></el-table-column>
<el-table-column label="开始生产时间" prop="start_time"></el-table-column>
<el-table-column label="订单交期" prop="plandeliver_date"></el-table-column>
<el-table-column label="工单号" prop="workorder_no"></el-table-column>
<el-table-column label="工单数" prop="workorder_count"></el-table-column>
<el-table-column label="生产总数" prop="plan_qty"></el-table-column>
</el-table>
</div>
<div style="margin-bottom: 40px;"></div>
</div>
</el-dialog>
<!-- 排产调整弹窗 --> <!-- 排产调整弹窗 -->
<adjustDialog ref="adjustDialog"/> <adjustDialog ref="adjustDialog"/>
</div> </div>
<MaterDtl <MaterDtl
:dialog-show.sync="materialShow" :dialog-show.sync="materialShow"
@@ -364,6 +322,7 @@ import UploadDialog from '@/views/wms/product_manage/workorder/UploadDialog'
import ReplaceDeviceDialog from '@/views/wms/product_manage/workorder/ReplaceDeviceDialog' import ReplaceDeviceDialog from '@/views/wms/product_manage/workorder/ReplaceDeviceDialog'
import adjustDialog from '@/views/wms/product_manage/workorder/adjustDialog' import adjustDialog from '@/views/wms/product_manage/workorder/adjustDialog'
import SaleOrder from '@/views/wms/pcs/saleorder/index.vue' import SaleOrder from '@/views/wms/pcs/saleorder/index.vue'
import SpecStatisticDialog from '@/views/wms/product_manage/workorder/SpecStatisticDialog.vue'
const defaultForm = { const defaultForm = {
workorder_id: null, workorder_id: null,
@@ -406,6 +365,7 @@ const defaultForm = {
export default { export default {
name: 'AdjustShiftorder', name: 'AdjustShiftorder',
components: { components: {
SpecStatisticDialog,
SaleOrder, SaleOrder,
AddDialog, AddDialog,
pagination, pagination,
@@ -523,11 +483,10 @@ export default {
}, },
//点击规格统计 //点击规格统计
specStatistic() { specStatistic() {
this.queryMaterialSpec() this.$refs.SpecStatisticDialog.openQuerySpec()
this.querySpecVisible = true
}, },
//点击规格统计 //点击规格统计
async queryMaterialSpec() { async queryMaterialSpec1() {
try { try {
const queryParam = { orderBy: 'start_time' } const queryParam = { orderBy: 'start_time' }
const res = await crudProduceshiftorder.queryStatisticsSpec(queryParam) const res = await crudProduceshiftorder.queryStatisticsSpec(queryParam)
@@ -543,16 +502,6 @@ export default {
console.log(err) console.log(err)
} }
}, },
//规格统计下拉框
async materialSelectSpec(selectedValue) {
const queryParam = { material: selectedValue, orderBy: 'start_time' }
try {
const res = await crudProduceshiftorder.queryStatisticsSpec(queryParam)
this.materialSpecData = res.content
} catch (err) {
console.log(err)
}
},
databaseUploadApi() { databaseUploadApi() {
}, },
changeEvent1(device) { changeEvent1(device) {
@@ -783,6 +732,9 @@ export default {
return true return true
} }
}, },
resetQuery() {
this.crud.resetQuery()
},
// 新增编辑给form表单物料相关信息赋值 // 新增编辑给form表单物料相关信息赋值
setMaterValue(row) { setMaterValue(row) {
debugger debugger

File diff suppressed because it is too large Load Diff

View File

@@ -217,11 +217,20 @@ export function getWorkOrderplanQty(data) {
}) })
} }
export function specOptionsSelect(data) {
return request({
url: '/api/produceWorkorder/specOptionsSelect',
method: 'post',
data
})
}
export default { export default {
add, add,
addRows, addRows,
edit, edit,
del, del,
specOptionsSelect,
submits, submits,
report, report,
reportApprove, reportApprove,