add:清洗代码

This commit is contained in:
zhangzhiqiang
2023-07-19 13:42:04 +08:00
parent 2038cf1fe4
commit 98ef6cf4d4
43 changed files with 933 additions and 463 deletions

View File

@@ -0,0 +1,9 @@
package org.nl.common.domain;
import java.io.IOException;
@FunctionalInterface
public
interface ReturnLockProcess<T> {
T process() throws IOException;
}

View File

@@ -58,7 +58,7 @@ public enum AcsTaskEnum {
REQUEST_PLOTTER_CALL_EMP("4","刻字空框请求"),//ok
REQUEST_WARP_CALL_FULL("5","包装缺料请求"),//ok
REQUEST_WARP_SEND_EMP("6","包装送空框请求"),//ok
REQUEST_WASH_LACK("7","清洗机器缺料请求"),//深坑->清洗:相同物料的重量<150公斤
REQUEST_WASH_SEND_MATERIAL("7","储料仓上料"),//深坑->清洗:相同物料的重量<150公斤
REQUEST_WASH_FULL("9","清洗机器满料请求"),//清洗机满料请求//去半成品入库
REQUEST_WASH_EMP("10","清洗机器空框请求"),//清洗机下料位
REQUEST_WASH_FULL_ERROR("11","清洗机-满料异常请求"),//去半成品入库 异常位

View File

@@ -2,6 +2,7 @@ package org.nl.common.utils;
import lombok.SneakyThrows;
import org.nl.common.domain.LockProcess;
import org.nl.common.domain.ReturnLockProcess;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.util.SpringContextHolder;
import org.redisson.api.RLock;
@@ -42,4 +43,28 @@ public class RedissonUtils {
}
}
}
@SneakyThrows
public static<T> T lockAndReturn(ReturnLockProcess<T> process, String key, Integer seconds){
RedissonClient redissonClient = SpringContextHolder.getBean(RedissonClient.class);
RLock lock = redissonClient.getLock(key);
boolean isLock;
if (seconds == null){
isLock = lock.tryLock();
}else {
isLock = lock.tryLock(seconds, TimeUnit.SECONDS);
}
try {
if (isLock){
T result = process.process();
return result;
} else {
throw new BadRequestException("当前业务 key:"+key+"正在执行请稍后再试");
}
}finally {
if (isLock){
lock.unlock();
}
}
}
}

View File

@@ -7,7 +7,7 @@ import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.wms.ext_manage.acs.service.impl.AcsToWmsServiceImpl;
import org.nl.wms.scheduler_manage.service.extendtask.SpeMachinery.SpeEmpTask;
import org.nl.wms.scheduler_manage.service.extendtask.SpeMachinery.SpeFullTask;
import org.nl.wms.scheduler_manage.service.extendtask.WashMachineryTask;
import org.nl.wms.scheduler_manage.service.extendtask.wash.WashMachineryTask;
import org.nl.wms.scheduler_manage.service.extendtask.plotter.PlotterCallEmptyTask;
import org.nl.wms.scheduler_manage.service.extendtask.wash.WashCallEmptyTask;
import org.nl.wms.scheduler_manage.service.extendtask.packageWrap.WrapCallMaterialTask;
@@ -27,7 +27,7 @@ public class ConventConfig implements SmartLifecycle {
public void start() {
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_CALLTYPE_FULL, SpringContextHolder.getBean(SpeFullTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_CALLTYPE_EMP, SpringContextHolder.getBean(SpeEmpTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_LACK, SpringContextHolder.getBean(WashMachineryTask.class));
// AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_SEND_MATERIAL, SpringContextHolder.getBean(WashMachineryTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_PLOTTER_SEND_FULL, SpringContextHolder.getBean(PlotterSendMaterialTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_PLOTTER_CALL_EMP, SpringContextHolder.getBean(PlotterCallEmptyTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WARP_CALL_FULL, SpringContextHolder.getBean(WrapCallMaterialTask.class));

View File

@@ -12,7 +12,7 @@ import org.nl.common.utils.api.ResultCode;
import org.nl.modules.common.exception.BizCoreException;
import org.nl.wms.ext_manage.acs.service.AcsToWmsService;
import org.nl.wms.scheduler_manage.service.extendtask.TaskScheduleService;
import org.nl.wms.scheduler_manage.service.extendtask.WashMachineryTask;
import org.nl.wms.scheduler_manage.service.extendtask.wash.WashMachineryTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -73,11 +73,10 @@ public class AcsToWmsController {
return new ResponseEntity<>(acsToWmsService.orderStatus(param), HttpStatus.OK);
}
@PostMapping("/washOrder")
@PostMapping("/washTask")
@Log("ACS给WMS反馈清洗工单完成")
//("ACS给WMS反馈清洗工单完成")
@SaIgnore
public ResponseEntity<Object> washOrderFinish(@RequestBody JSONObject param) {
public ResponseEntity<Object> washTaskFinish(@RequestBody JSONObject param) {
washMachineryTask.updateTaskStatus( param, param.getString("status"));
return new ResponseEntity<>(HttpStatus.OK);
}

View File

@@ -24,7 +24,7 @@ import org.nl.wms.ext_manage.acs.service.AcsToWmsService;
import org.nl.wms.pda_manage.pda.service.CacheLineHandService;
import org.nl.wms.scheduler_manage.service.extendtask.manage.AbstractAcsTask;
import org.nl.wms.scheduler_manage.service.task.TaskService;
import org.nl.wms.scheduler_manage.service.extendtask.WashMachineryTask;
import org.nl.wms.scheduler_manage.service.extendtask.wash.WashMachineryTask;
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;

View File

@@ -5,9 +5,12 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.LockProcess;
import org.nl.common.domain.ReturnLockProcess;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.RedissonUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
@@ -25,6 +28,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
@@ -79,7 +83,7 @@ public class AgvInstService {
task.put("task_type",AcsTaskEnum.TASK_PRODUCT_WASH.getCode());
task.put("task_name",AcsTaskEnum.TASK_PRODUCT_WASH.getDesc());
// query.put("qty",quantity) 深坑物料需要转重量
collect = deviceService.workproceduceDevicesWeight(query);
collect = RedissonUtils.lockAndReturn((ReturnLockProcess<List<Map<String, String>>>) () -> deviceService.workproceduceDevicesWeight(query), "allocation:A1_SKQX", 2);
}else {
collect = deviceService.workproceduceDevicesQty(query);
}

View File

@@ -59,6 +59,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService{
, "task_group_id", StringUtils.isBlank(task.getString("task_group_id"))? IdUtil.getStringId():task.getString("task_group_id")
, "is_send", task.getBoolean("is_send")?"1":"0"
, "vehicle_code", task.getString("vehicle_code")
, "in_pcsn", task.getString("task_code")
, "agv_system_type", task.getString("agv_system_type")
));
form.add(param);

View File

@@ -271,7 +271,6 @@ public class WmsToSapServiceImpl implements WmsToSapService {
String material_code = row.getString("Matnr").replaceAll("^(0+)", "");
//获取物料对应的物料标识
MdMeMaterialbase mater_jo = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_code", material_code));
deliver_jo.setMaterial_code(material_code);
if (ObjectUtil.isEmpty(mater_jo)) {
deliver_jo.setMaterial_id("");
deliver_jo.setIs_success("0");

View File

@@ -48,7 +48,6 @@ public class PcsDeliveryOrder implements Serializable {
* 物料标识
*/
private String material_id;
private String material_code;
/**
* 状态

View File

@@ -7,6 +7,7 @@
deliveryorder.*,
material.material_code,
material.material_name,
material.material_spec,
unit.unit_name
FROM
PCS_delivery_order deliveryorder
@@ -18,7 +19,7 @@
and deliveryorder.deliver_code like '%${deliver_code}%'
</if>
<if test="status != null and status != ''">
and deliveryorder.sale_code = #{status}
and deliveryorder.status = #{status}
</if>
<if test="product_series != null and product_series != ''">
and material.product_series in ${product_series}

View File

@@ -0,0 +1,253 @@
package org.nl.wms.pda_manage.pda.controller;
/*
* @author ZZQ
* @Date 2023/7/12 21:13
*/
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.RedissonUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.ext_manage.acs.service.WmsToAcsService;
import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService;
import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase;
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
import org.nl.wms.scheduler_manage.service.extendtask.wash.WashMachineryTask;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
import java.util.stream.Collectors;
@RestController
@Api(tags = "成品手持服务")
@RequestMapping("/api/pda/wash")
@Slf4j
@SaIgnore
public class PdaWashController {
private static double LIMIT_WEIGHT = 150000L;
@Autowired
private IMdMeMaterialbaseService materialbaseService;
@Autowired
private IPdmBiDeviceService iDeviceService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private WashMachineryTask washMachineryTask;
@Autowired
private WmsToAcsService wmsToAcsService;
@PostMapping("/specList")
@SaIgnore
public ResponseEntity<Object> queryAll(@RequestBody JSONObject whereJson){
List<Map> specs = new ArrayList<>();
List<PdmBiDevice> list = iDeviceService.list(new QueryWrapper<PdmBiDevice>()
.eq("workprocedure_id", "1535144552481034240")
.eq("is_used", true)
.ne("material_id", "")
.isNotNull("material_id"));
if (!CollectionUtils.isEmpty(list)){
Set materials = list.stream().map(a->a.getMaterial_id()).collect(Collectors.toSet());
List<MdMeMaterialbase> materialbases = materialbaseService.list(new QueryWrapper<MdMeMaterialbase>()
.in("material_id", materials));
for (MdMeMaterialbase materialbase : materialbases) {
Map item = new HashMap<>();
item.put("label",materialbase.getMaterial_spec());
item.put("value",materialbase.getMaterial_id());
specs.add(item);
}
}
return new ResponseEntity<>(TableDataInfo.build(specs),HttpStatus.OK);
}
@PostMapping("/query")
@Log("深坑物料")
@SaIgnore
public ResponseEntity<Object> query(@RequestBody JSONObject query) {
//设备
QueryWrapper<PdmBiDevice> queryWrapper = new QueryWrapper<PdmBiDevice>()
.eq("workprocedure_id", "1535144552481034240")
.eq("is_used", true)
.eq("product_area",query.getString("product_area"));
if (StringUtils.isNotEmpty(query.getString("material_id"))){
queryWrapper.eq("material_id",query.getString("material_id"));
}
if (StringUtils.isNotEmpty(query.getString("device_code"))){
queryWrapper.eq("device_code",query.getString("device_code"));
}
List<Map<String, Object>> list = iDeviceService.listMaps(queryWrapper);
if (!CollectionUtils.isEmpty(list)){
Set materials = list.stream().map(a->a.get("material_id")).collect(Collectors.toSet());
Set devices = list.stream().map(a->a.get("device_code")).collect(Collectors.toSet());
HashMap<String, SchBaseTask> taskMap = taskService.list(new QueryWrapper<SchBaseTask>().in("point_code2", devices)
.eq("task_status", StatusEnum.TASK_RUNNING.getCode()))
.stream().collect(HashMap::new, (k, v) -> k.put(v.getPoint_code2(), v), HashMap::putAll);
Map<String, MdMeMaterialbase> materialMap = materialbaseService.list(new QueryWrapper<MdMeMaterialbase>()
.in("material_id", materials))
.stream().collect(HashMap::new, (k, v) -> k.put(v.getMaterial_id(), v), HashMap::putAll);
for (Map pdmBiDevice : list) {
MdMeMaterialbase materialbase = materialMap.get(pdmBiDevice.get("material_id"));
SchBaseTask baseTask = taskMap.get(pdmBiDevice.get("device_code"));
pdmBiDevice.put("material_name",materialbase!=null?materialbase.getMaterial_name():"");
pdmBiDevice.put("material_code",materialbase!=null?materialbase.getMaterial_code():"");
pdmBiDevice.put("material_spec",materialbase!=null?materialbase.getMaterial_spec():"");
pdmBiDevice.put("task_code",baseTask!=null?baseTask.getTask_code():"");
}
}
return new ResponseEntity<>(TableDataInfo.build(list), HttpStatus.OK);
}
@PostMapping("/submitWash")
@Log("提交清洗")
@SaIgnore
public ResponseEntity<Object> submitWash(@RequestBody String[] devices) {
if (devices.length>0){
List<PdmBiDevice> list = iDeviceService.list(new QueryWrapper<PdmBiDevice>()
.eq("workprocedure_id", "1535144552481034240")
.in("device_code", devices));
Set<String> collect = list.stream().map(PdmBiDevice::getMaterial_id).collect(Collectors.toSet());
if (!CollectionUtils.isEmpty(collect)){
if (collect.size()>1){
throw new BadRequestException("选择的储料仓必须是相同物料");
}
double sum = list.stream().mapToDouble(a->a.getDeviceinstor_weight().doubleValue()).sum();
if (sum>LIMIT_WEIGHT){
throw new BadRequestException("选择的储料仓必物料总重量大于150公斤");
}
//生成生坑清洗爬坡任务
try {
JSONObject param = new JSONObject(MapOf.of("devices", list));
RedissonUtils.lock( () -> washMachineryTask.createTask(param), "allocation:A1_SKQX", null);
}catch (Exception ex){
log.error("清洗上料任务失败:{}",ex);
throw new BadRequestException("任务创建失败:"+ex.getMessage());
}
}
}
return new ResponseEntity<>(HttpStatus.OK);
}
/*-----------------倒料---------------------*/
@PostMapping("/weighing")
@Log("称重")
@SaIgnore
public ResponseEntity<Object> weighing(@RequestBody JSONObject param) {
List<String> devices = (List<String>) param.get("list");
JSONObject req = new JSONObject();
req.put("device_code",devices.get(0));
JSONObject result = wmsToAcsService.request(req, "api/wms/handWeigh");
if (!StrUtil.equals(result.getString("status"), "200")) {
throw new BadRequestException((String)result.get("message"));
}
List<Map> ws = new ArrayList<>();
Map map = new HashMap<>();
map.put("deviceinstor_weight",StringUtils.isEmpty(result.getString("weight"))?"0":result.getString("weight"));
map.put("device_code",devices.get(0));
ws.add(map);
return new ResponseEntity<>(TableDataInfo.build(ws),HttpStatus.OK);
}
@PostMapping("/weighingFinish")
@Log("深坑倒料确认")
@SaIgnore
public ResponseEntity<Object> weighingFinish(@RequestBody JSONObject form) {
List<Map> list = new ArrayList<>();
String device_code = form.getString("device_code");
MdMeMaterialbase one = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>()
.eq("material_code", form.getString("material_code")));
if (one ==null){
throw new BadRequestException("当前物料编码不存在"+form.getString("material_code"));
}
iDeviceService.update(new UpdateWrapper<PdmBiDevice>()
.set("material_id",one.getMaterial_id())
.set("remark","")
.set("deviceinstor_weight",form.getBigDecimal("deviceinstor_weight"))
.eq("device_code",device_code));
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/materialList")
@Log("物料列表")
@SaIgnore
public ResponseEntity<Object> materialList(@RequestBody JSONObject query, PageQuery page) {
List<Map> list = new ArrayList<>();
QueryWrapper<MdMeMaterialbase> queryWrapper = new QueryWrapper<>();
if (StringUtils.isNotEmpty(query.getString("material_code"))){
queryWrapper.eq("material_code",query.getString("material_code"));
}
Page<MdMeMaterialbase> result = materialbaseService.page(page.build(),queryWrapper);
return new ResponseEntity<>(TableDataInfo.build(result),HttpStatus.OK);
}
/*-----------------清洗下料---------------------*/
@PostMapping("/washTasks")
@Log("物料列表")
@SaIgnore
public ResponseEntity<Object> washTasks(@RequestBody JSONObject query) {
List<Map<String, Object>> taskMap = taskService.listMaps(new QueryWrapper<SchBaseTask>()
.eq("task_status", StatusEnum.TASK_FINISH.getCode()).eq("task_step", 2));
if (!CollectionUtils.isEmpty(taskMap)){
Set materials = taskMap.stream().map(a->a.get("material_id")).collect(Collectors.toSet());
Map<String, MdMeMaterialbase> materialMap = materialbaseService.list(new QueryWrapper<MdMeMaterialbase>()
.in("material_id", materials))
.stream().collect(HashMap::new, (k, v) -> k.put(v.getMaterial_id(), v), HashMap::putAll);
for (Map task : taskMap) {
MdMeMaterialbase materialbase = materialMap.get(task.get("material_id"));
task.put("material_name",materialbase!=null?materialbase.getMaterial_name():"");
task.put("material_code",materialbase!=null?materialbase.getMaterial_code():"");
task.put("material_spec",materialbase!=null?materialbase.getMaterial_spec():"");
}
}
return new ResponseEntity<>(TableDataInfo.build(taskMap),HttpStatus.OK);
}
@PostMapping("//washTaskFinish")
@Log("强制完成任务")
@SaIgnore
public ResponseEntity<Object> washTaskFinish(@RequestBody JSONObject query) {
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_step",3)
.eq("task_id",query.getString("task_id")));
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/washVechileInfo")
@Log("物料列表")
@SaIgnore
public ResponseEntity<Object> washVechileInfo(@RequestBody JSONObject query) {
JSONObject req = new JSONObject();
req.put("device_code","A1_CPQXJ_01_X");
JSONObject result = wmsToAcsService.request(req, "api/wms/handWeight");
if (!StrUtil.equals(result.getString("status"), "200")) {
throw new BadRequestException((String)result.get("message"));
}
List<Object> list = new ArrayList<>();
list.add(MapOf.of("weight",result.get("weight"),"vechile_code",result.getString("vechile_code")));
return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.OK);
}
}

View File

@@ -15,6 +15,7 @@ import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.RedissonUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.ext_manage.acs.service.WmsToAcsService;
import org.nl.wms.scheduler_manage.service.extendtask.plotter.PlotterCallEmptyTask;
@@ -25,6 +26,7 @@ import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -51,7 +53,7 @@ public class TmpKZController {
* @param param
* @return
*/
@RequestMapping("deviceinstorQty")
@PostMapping("deviceinstorQty")
@SaIgnore
public ResponseEntity<Object> deviceinstorQty(@RequestBody JSONObject param){
SchBasePoint one = basePointService.getOne(new QueryWrapper<SchBasePoint>()
@@ -70,7 +72,7 @@ public class TmpKZController {
return new ResponseEntity<>( HttpStatus.OK);
}
@RequestMapping("callVechile")
@PostMapping("callVechile")
@SaIgnore
public ResponseEntity<Object> callVechile(@RequestBody JSONObject param){
plotterCallEmptyTask.callEmpVechile(param.getString("device_code"));
@@ -78,7 +80,7 @@ public class TmpKZController {
}
//鞋料
@RequestMapping("kzunload")
@PostMapping("kzunload")
@SaIgnore
public ResponseEntity<Object> kzunload(@RequestBody JSONObject param) {
JSONObject jo = new JSONObject();
@@ -89,45 +91,51 @@ public class TmpKZController {
}
return new ResponseEntity<>( HttpStatus.OK);
}
@RequestMapping("kzresidue")
@PostMapping("kzresidue")
@SaIgnore
public ResponseEntity<Object> kzresidue(@RequestBody JSONObject param){
JSONObject jo = new JSONObject();
jo.put("next_point_code", param.getString("device_code"));
jo.put("start_point_code", "A1_KZ_SL");
jo.put("weight", param.getString("qty"));
JSONObject result = wmsToAcsService.request(jo, "api/wms/putOver");
if (!StrUtil.equals(result.getString("status"), "200")) {
throw new BadRequestException((String)result.get("message"));
}
RedissonUtils.lock(()->{
JSONObject jo = new JSONObject();
jo.put("next_point_code", param.getString("device_code"));
jo.put("start_point_code", "A1_KZ_SL");
jo.put("weight", param.getString("qty"));
JSONObject result = wmsToAcsService.request(jo, "api/wms/putOver");
if (!StrUtil.equals(result.getString("status"), "200")) {
throw new BadRequestException((String)result.get("message"));
}
},"kzresidue",null);
return new ResponseEntity<>( HttpStatus.OK);
}
@RequestMapping("tmpcallVechile")
@PostMapping("tmpcallVechile")
@SaIgnore
public ResponseEntity<Object> tmpcallVechile(@RequestBody JSONObject param){
JSONObject moveTask =taskService.createMoveTask("A1_BCPRKW_SD", "A1_KZ_SL", AcsTaskEnum.TASK_POINT_TO_POINT, AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20);
JSONArray data = new JSONArray();
data.add(moveTask);
Map<String, Object> result = wmsToAcsService.issueTaskToAcs2(data);
if (StrUtil.equals((String)result.get("status"), "400")) {
throw new BadRequestException((String)result.get("message"));
}
moveTask.put("task_status",StatusEnum.TASK_PUBLISH.getCode());
taskService.save(moveTask.toJavaObject(SchBaseTask.class));
RedissonUtils.lock(()->{
JSONObject moveTask =taskService.createMoveTask("A1_BCPRKW_SD", "A1_KZ_SL", AcsTaskEnum.TASK_POINT_TO_POINT, AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20);
JSONArray data = new JSONArray();
data.add(moveTask);
Map<String, Object> result = wmsToAcsService.issueTaskToAcs2(data);
if (StrUtil.equals((String)result.get("status"), "400")) {
throw new BadRequestException((String)result.get("message"));
}
moveTask.put("task_status",StatusEnum.TASK_FINISH.getCode());
taskService.save(moveTask.toJavaObject(SchBaseTask.class));
},"刻字上料呼叫载具",null);
return new ResponseEntity<>( HttpStatus.OK);
}
@RequestMapping("tmpsendVechile")
@PostMapping("tmpsendVechile")
@SaIgnore
public ResponseEntity<Object> tmpsendVechile(@RequestBody JSONObject param){
JSONObject moveTask = taskService.createMoveTask("A1_KZ_SL", "A1_BCPRKW_SD", AcsTaskEnum.TASK_POINT_TO_POINT, AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20);
JSONArray data = new JSONArray();
data.add(moveTask);
Map<String, Object> result = wmsToAcsService.issueTaskToAcs2(data);
if (StrUtil.equals((String)result.get("status"), "400")) {
throw new BadRequestException((String)result.get("message"));
}
moveTask.put("task_status",StatusEnum.TASK_PUBLISH.getCode());
taskService.save(moveTask.toJavaObject(SchBaseTask.class));
RedissonUtils.lock(()->{
JSONObject moveTask = taskService.createMoveTask("A1_KZ_SL", "A1_BCPRKW_SD", AcsTaskEnum.TASK_POINT_TO_POINT, AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20);
JSONArray data = new JSONArray();
data.add(moveTask);
Map<String, Object> result = wmsToAcsService.issueTaskToAcs2(data);
if (StrUtil.equals((String)result.get("status"), "400")) {
throw new BadRequestException((String)result.get("message"));
}
moveTask.put("task_status",StatusEnum.TASK_FINISH.getCode());
taskService.save(moveTask.toJavaObject(SchBaseTask.class));
},"刻字上料送载具",null);
return new ResponseEntity<>( HttpStatus.OK);
}

View File

@@ -3,6 +3,7 @@ package org.nl.wms.product_manage.controller.device;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -15,6 +16,8 @@ import org.nl.common.utils.SecurityUtils;
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
import org.nl.wms.product_manage.service.device.dto.DeviceQuery;
import org.nl.wms.product_manage.service.workprocedure.IPdmBiWorkprocedureService;
import org.nl.wms.product_manage.service.workprocedure.dao.PdmBiWorkprocedure;
import org.nl.wms.product_manage.备份pdm.service.DeviceService;
import org.nl.wms.product_manage.备份pdm.service.dto.DeviceDto;
import org.springframework.beans.factory.annotation.Autowired;
@@ -40,6 +43,9 @@ public class PdmBiDeviceController {
private DeviceService deviceService;
@Autowired
private IPdmBiDeviceService iDeviceService;
@Autowired
private IPdmBiWorkprocedureService pdmBiWorkprocedureService;
@GetMapping
@Log("查询生产设备")
@@ -96,10 +102,8 @@ public class PdmBiDeviceController {
@GetMapping("/getWorkprocedure")
@Log("工序下拉")
//("工序下拉")
//@PreAuthorize("@el.check('device:list')")
public ResponseEntity<Object> getWorkprocedure () {
return new ResponseEntity<>(deviceService.getWorkprocedure(), HttpStatus.OK);
return new ResponseEntity<>(pdmBiWorkprocedureService.list(new QueryWrapper<PdmBiWorkprocedure>().eq("is_used",true)), HttpStatus.OK);
}
@GetMapping("/getDeviceList")

View File

@@ -2,6 +2,7 @@ package org.nl.wms.product_manage.controller.device;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -67,7 +68,7 @@ public class SpecialDeviceController {
@Log("更新物料")
//("更新物料")
@SaIgnore
public ResponseEntity<Object> queryList (@RequestBody JSONObject query){
public ResponseEntity<Object> update (@RequestBody JSONObject query){
String device_code = query.getString("device_code");
if (StringUtils.isNotEmpty(device_code)){
iDeviceService.update(new UpdateWrapper<PdmBiDevice>()
@@ -93,5 +94,15 @@ public class SpecialDeviceController {
}
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
}
@PostMapping("/setUsed")
@Log("设置启停")
@SaIgnore
public ResponseEntity<Object> setUsed (@RequestBody JSONObject query){
Assert.notNull(new Object[]{query,query.getString("device_code"),query.get("is_used")},"请求参数不能为空");
iDeviceService.update(new UpdateWrapper<PdmBiDevice>()
.set("is_used",query.getBoolean("is_used"))
.eq("device_code",query.getString("device_code")));
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -14,8 +14,10 @@ import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.WqlUtil;
import org.nl.wms.product_manage.service.workprocedure.IPdmBiWorkprocedureService;
import org.nl.wms.product_manage.备份pdm.service.DeviceService;
import org.nl.wms.product_manage.备份pdm.service.dto.DeviceDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -33,6 +35,8 @@ import java.util.Map;
@RequiredArgsConstructor
@Slf4j
public class DeviceServiceImpl implements DeviceService {
@Autowired
private IPdmBiWorkprocedureService pdmBiWorkprocedureService;
@Override
public Map<String,Object> queryAll(Map whereJson, Pageable page){

View File

@@ -1,164 +0,0 @@
package org.nl.wms.scheduler_manage.service.extendtask;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import groovy.lang.GroovyShell;
import groovy.lang.Script;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.ConstantParam;
import org.nl.common.enums.StatusEnum;
import org.nl.common.enums.WorkerOrderEnum;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.MapOf;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.ext_manage.acs.service.WmsToAcsService;
import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService;
import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase;
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWashorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWashorder;
import org.nl.wms.scheduler_manage.service.extendtask.manage.AbstractAcsTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* 专机任务
*/
@Slf4j
@Service
public class WashMachineryTask extends AbstractAcsTask {
private static final String SK_WORKPRODURE_ID = "1535144552481034240";
@Autowired
private IPdmProduceWashorderService iPdmProduceWashorderService;
@Autowired
private WmsToAcsService wmsToAcsService;
@Autowired
private IMdMeMaterialbaseService materialbaseService;
@Autowired
private IPdmBiDeviceService deviceService;
FileSystemResourceLoader loader = new FileSystemResourceLoader();
GroovyShell groovyShell = new GroovyShell();
@Override
@Transactional
public void updateTaskStatus(JSONObject param,String status) {
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
Assert.notEmpty(new Object[]{param,param.getString("workorder_id")},"参数不能为空");
String inDevices = param.getString("in_devices");
String workorderId = param.getString("workorder_id");
if (!StringUtils.isBlank(inDevices)){
String sql = Arrays.stream(inDevices.split(",")).collect(Collectors.joining("','"));
//跟新工单:状态为完成;跟新点位 material_id is not null and point_status = '2'
pointTab.update(MapOf.of("material_id","","point_status","1"),"point_code in ('"+sql+"')");
QueryWrapper<PdmProduceWashorder> query = new QueryWrapper<>();
PdmProduceWashorder update = new PdmProduceWashorder();
update.setIs_error(false);
update.setError_info("");
update.setUpdate_time(DateUtil.now());
update.setCreate_name("acs");
update.setStatus(StatusEnum.TASK_FINISH.getCode());
iPdmProduceWashorderService.update(update,new QueryWrapper<PdmProduceWashorder>().eq("workorder_id",workorderId));
}
}
@Override
@SneakyThrows
public String createTask(JSONObject param) {
//清洗机是否有物料重量上线?{"device_code":"A1_CPQXJ_01_S","type":"7"}
PdmProduceWashorder status = iPdmProduceWashorderService.getOne(new QueryWrapper<PdmProduceWashorder>().lt("status", WorkerOrderEnum.COMPLETE.getCode()));
if (status!=null){
return "";
}
//TODO:判断是否人工仓优先:人工仓一台一台爬,机械仓根据物料爬
QueryWrapper<PdmBiDevice> query = new QueryWrapper<PdmBiDevice>()
.gt("deviceinstor_qty", 0)
.eq("is_used", true)
.eq("workprocedure_id", SK_WORKPRODURE_ID)
.isNotNull("material_id")
.orderByDesc("deviceinstor_qty");
List<PdmBiDevice> SKQX = deviceService.list(query);
//查询深坑相同物料类型的点位:深坑单位:重量
if (SKQX.size()>0){
Map<String, List<PdmBiDevice>> collect = SKQX.stream().collect(Collectors.groupingBy(PdmBiDevice::getMaterial_id));
//查询清洗设备最大重量
Resource resource = loader.getResource("classpath:/groovyFile.groovy");
Script script = groovyShell.parse(resource.getFile());
ArrayList<JSONObject> result = (ArrayList)script.invokeMethod("getPoints", new Object[]{SKQX, collect, 9999999d});
//确认acs参数 创建工单下发acs
if (!CollectionUtils.isEmpty(result)){
String material_id = result.get(0).getString("material_id");
MdMeMaterialbase material = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", material_id).eq("is_delete", false));
PdmProduceWashorder washorder = new PdmProduceWashorder();
washorder.setWorkorder_id(IdUtil.getStringId());
washorder.setWorkorder_code(IdUtil.getStringId());
washorder.setDevice_code(param.getString("device_code"));
washorder.setWeight(new BigDecimal(result.stream().mapToDouble(value -> value.getDouble("weight")).sum()));
washorder.setQty(new BigDecimal(result.stream().mapToDouble(value -> value.getDouble("qty")).sum()));
washorder.setMaterial_code(material.getMaterial_code());
washorder.setMaterial_spec(material.getMaterial_spec());
washorder.setMaterial_id(material.getMaterial_id());
washorder.setCreate_time(DateUtil.now());
washorder.setIn_devices(result.stream().map(a->a.getString("device_code")).collect(Collectors.joining(",")));
washorder.setProduct_area("A1");
washorder.setCreate_id("1");
washorder.setCreate_name("acs");
washorder.setStatus(StatusEnum.TASK_CREATE.getCode());
//下发:"人工框:一个一个爬坡:是人工仓优先还是自动仓优先
JSONArray request = new JSONArray();
JSONObject jsonObject = new JSONObject(MapOf.of("workorder_id", washorder.getWorkorder_id()
, "workorder_code", washorder.getWorkorder_code()
, "qty", washorder.getQty()
,"weight",washorder.getWeight()
, "material_code", washorder.getMaterial_code()
, "material_spec", washorder.getMaterial_spec()
, "device_code", washorder.getDevice_code()
, "in_devices", washorder.getIn_devices()
));
request.add(jsonObject);
Map<String, Object> response = wmsToAcsService.order(request);
if (response.get("status").equals(HttpStatus.BAD_REQUEST)){
washorder.setError_info((String) response.get("message"));
washorder.setStatus(StatusEnum.TASK_START_ERROR.getCode());
washorder.setIs_error(true);
}
iPdmProduceWashorderService.save(washorder);
}
}
return null;
}
@Override
public void cancel(String taskId) {
}
@Override
public void pointConfirm(JSONObject param) {
//查询深坑相同物料类型的点位
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
JSONArray points = pointTab.query("material_id is not null and point_status = 1 and is_used = 1 and lock_type = 0 and region_code = '" + ConstantParam.SK_REGION + "'").getResultJSONArray(0);
}
}

View File

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import java.util.ArrayList;
import java.util.List;
@@ -35,7 +36,7 @@ public abstract class AbstractAcsTask {
public void notifyAcs(JSONArray param){};
public List<SchBaseTask> schedulerTask(List<SchBaseTask> tasks){
return tasks;
return new ArrayList<>();
};

View File

@@ -110,7 +110,10 @@ public class WrapCallMaterialTask extends AbstractAcsTask {
Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code")));
//?刻字满料请求:可以存在多个任务?
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.eq("point_code2", param.getString("device_code")).lt("task_status", StatusEnum.TASK_FINISH.getCode())
.nested(i -> i
.eq("point_code1", param.getString("device_code")).or()
.eq("point_code3", param.getString("device_code")))
.lt("task_status", StatusEnum.TASK_FINISH.getCode())
);
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException(String.format("设备%s存在未完成任务"+list.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), param.getString("device_code")));

View File

@@ -105,10 +105,13 @@ public class WrapSendEmptyTask extends AbstractAcsTask {
throw new BadRequestException("起点不能为空!");
}
// 判断当前点是否有未完成的任务
JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + start_point_code + "' " +
"and task_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' " +
"and task_status <> '" + StatusEnum.TASK_CANNEL.getCode() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj)) {
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.nested(i -> i
.eq("point_code1", param.getString("device_code")).or()
.eq("point_code3", param.getString("device_code")))
.lt("task_status", StatusEnum.TASK_FINISH.getCode())
);
if (ObjectUtil.isNotEmpty(list)) {
throw new BadRequestException("当前点位" + start_point_code + "存在未完成的任务");
}
String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + "";

View File

@@ -0,0 +1,178 @@
package org.nl.wms.scheduler_manage.service.extendtask.wash;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import groovy.lang.GroovyShell;
import groovy.lang.Script;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.ConstantParam;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.StatusEnum;
import org.nl.common.enums.WorkerOrderEnum;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.ext_manage.acs.service.WmsToAcsService;
import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService;
import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWashorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWashorder;
import org.nl.wms.scheduler_manage.service.extendtask.manage.AbstractAcsTask;
import org.nl.wms.scheduler_manage.service.extendtask.manage.TaskStatusEnum;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.nl.wms.storage_manage.IOSEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* 专机任务
*/
@Slf4j
@Service
public class WashMachineryTask extends AbstractAcsTask {
private static String SK_WORKPRODURE_ID = "1535144552481034240";
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private WmsToAcsService wmsToAcsService;
@Autowired
private IPdmBiDeviceService deviceService;
@Override
@Transactional
public void updateTaskStatus(JSONObject param,String status) {
QueryWrapper<SchBaseTask> query = new QueryWrapper<>();
if (StringUtils.isNotEmpty(param.getString("in_pcsn"))){
query.eq("task_code",param.getString("in_pcsn"));
}
if (StringUtils.isNotEmpty(param.getString("task_id"))){
query.eq("task_id",param.getString("task_id"));
}
SchBaseTask taskDao = taskService.getOne(query);
// 更新任务状态为完成
if (taskDao.getTask_status().equals(TaskStatusEnum.FINISHED.getCode())||taskDao.getTask_status().equals(TaskStatusEnum.CANCEL.getCode())){
return;
}
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
taskDao.setTask_step(2);
taskDao.setTask_status(TaskStatusEnum.FINISHED.getCode());
taskDao.setUpdate_time(new Date());
taskDao.setFinished_type(AcsTaskEnum.AUTO_TASK_FINISHED_TYPE.getCode());
taskDao.setUpdate_name("acs");
deviceService.update(new UpdateWrapper<PdmBiDevice>()
.set("material_id","")
.set("is_used",true)
.set("deviceinstor_qty",0)
.set("deviceinstor_weight",0)
.set("update_time",DateUtil.now())
.in("device_code",taskDao.getPoint_code1().split(",")));
}
if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
taskDao.setTask_status(TaskStatusEnum.EXECUTING.getCode());
}
if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) {
taskDao.setTask_status(TaskStatusEnum.CANCEL.getCode());
deviceService.update(new UpdateWrapper<PdmBiDevice>()
.set("is_used",true)
.set("update_time",DateUtil.now())
.set("remark","")
.in("device_code",taskDao.getPoint_code1().split(",")));
}
taskService.updateById(taskDao);
}
@Override
@Transactional
public String createTask(JSONObject param) {
//清洗机是否有物料重量上线?{"devices":"string[]","material_id":"7"}
List<PdmBiDevice> devices = (List<PdmBiDevice>) param.get("devices");
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.in("point_code2", devices.stream().map(PdmBiDevice::getDevice_code).collect(Collectors.toList()))
.lt("task_status", StatusEnum.TASK_FINISH.getCode()));
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException("当前点位存在正在执行的任务:"
+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
}
JSONArray data = new JSONArray();
JSONArray items = new JSONArray();
ArrayList<String> start_points = new ArrayList<>();
JSONObject task = new JSONObject();
task.put("task_id", IdUtil.getStringId());
task.put("task_name", AcsTaskEnum.REQUEST_WASH_SEND_MATERIAL.getDesc());
task.put("task_type", AcsTaskEnum.REQUEST_WASH_SEND_MATERIAL.getCode());
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
task.put("task_status", StatusEnum.TASK_PUBLISH.getCode());
task.put("point_code3", "A1_SKQXJ_01_S");//A1_SKQXJ_01_X
task.put("handle_class", this.getClass().getName());
task.put("is_send", "1");
task.put("is_delete", StatusEnum.STATUS_FLASE.getCode());
task.put("create_id", SecurityUtils.getCurrentUserId());
task.put("create_name", SecurityUtils.getCurrentNickName());
task.put("create_time", DateUtil.now());
task.put("is_auto_issue", false);
task.put("priority", "1");
task.put("task_step", 1);
task.put("material_id",devices.get(0).getMaterial_id());
task.put("material_qty",devices.stream().mapToInt(a->a.getDeviceinstor_weight().intValue()).sum());
task.put("point_code1",devices.stream().map(PdmBiDevice::getDevice_code).collect(Collectors.joining(",")));
taskService.save(task.toJavaObject(SchBaseTask.class));
// 下发
JSONObject acsRequest = new JSONObject(MapOf.of("device_code","A1_CPQXJ_01_S","in_pcsn",task.getString("task_code"),"in_devices",task.getString("point_code1")));
JSONObject result = wmsToAcsService.request(acsRequest, "api/wms/cleaningIn");
if (!StrUtil.equals(result.getString("status"), "200")) {
throw new BadRequestException((String)result.get("message"));
}
deviceService.update(new UpdateWrapper<PdmBiDevice>()
.set("is_used",false)
.set("update_time",DateUtil.now())
.set("remark",task.getString("task_id"))
.in("device_code",devices.stream().map(PdmBiDevice::getDevice_code).collect(Collectors.toList())));
return null;
}
@Override
@Transactional
public void cancel(String taskId) {
SchBaseTask taskDao = taskService.getById(taskId);
if (taskDao !=null){
taskDao.setTask_status(TaskStatusEnum.CANCEL.getCode());
deviceService.update(new UpdateWrapper<PdmBiDevice>()
.set("is_used",true)
.eq("device_code",taskDao.getPoint_code1()));
taskService.updateById(taskDao);
}
}
@Override
public void pointConfirm(JSONObject param) {
}
}

View File

@@ -66,7 +66,6 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
String task_id = MapUtil.getStr(map, "task_id");
String method_name = MapUtil.getStr(map, "method_name");
SchBaseTask taskObj = this.getOne(new QueryWrapper<SchBaseTask>().eq("task_id", task_id));
switch (method_name) { // forceFinish, cancel
case "immediateNotifyAcs":
if (Integer.valueOf(taskObj.getTask_status())<Integer.valueOf(TaskStatusEnum.EXECUTING.getCode())){

View File

@@ -1,12 +1,18 @@
package org.nl.wms.storage_manage.productmanage.controller.moreOrLess;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.mps_manage.deliveryorder.service.IPcsDeliveryOrderService;
import org.nl.wms.storage_manage.productmanage.service.moreOrLess.IStIfDeliveryorderCpService;
import org.nl.wms.storage_manage.productmanage.service.moreOrLess.dto.DeliveQuery;
import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +22,9 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
* <p>
* 销售发货单表 前端控制器
@@ -34,11 +43,18 @@ public class StIfDeliveryorderCpController {
@Autowired
private IStIfDeliveryorderCpService iStIfDeliveryorderCpService;
@Autowired
private IPcsDeliveryOrderService pcsDeliveryOrderService;
@GetMapping
@Log("查询生产订单")
//("查询生产订单")
public ResponseEntity<Object> query(DeliveQuery query, PageQuery page){
return new ResponseEntity<>(iStIfDeliveryorderCpService.pageQuery(query,page), HttpStatus.OK);
Page<Object> pageable = PageHelper.startPage(page.getPage() + 1, page.getSize());
List<Map> mst_detail = pcsDeliveryOrderService.queryAll((Map) JSON.toJSON(query));
TableDataInfo<Map> build = TableDataInfo.build(mst_detail);
build.setTotalElements(pageable.getTotal());
return new ResponseEntity<>(build, HttpStatus.OK);
}
}

View File

@@ -97,18 +97,21 @@ public class StIvtIostorinvdtlCpServiceImpl extends ServiceImpl<StIvtIostorinvdt
.eq(MpsSaleOrder::getSale_code, row.getBase_bill_code())
.eq(MpsSaleOrder::getSeq_no, row.getBase_bill_table())
);
if (ObjectUtil.isEmpty(orderDao))
throw new BadRequestException("销售单不存在!");
// if (ObjectUtil.isEmpty(orderDao)) {
// throw new BadRequestException("销售单不存在!");
// }
row.setBase_billdtl_id(orderDao.getSale_id().toString());
row.setBase_bill_code(orderDao.getSale_code());
row.setBase_bill_type(orderDao.getSale_type());
row.setBase_bill_table(orderDao.getSeq_no().toString());
row.setBase_billdtl_id(orderDao==null?"":orderDao.getSale_id().toString());
row.setBase_bill_code(row.getBase_bill_code());
row.setBase_bill_type(orderDao==null?"":orderDao.getSale_type());
row.setBase_bill_table(row.getBase_bill_table());
if (IOSEnum.IO_TYPE.code("入库").equals(mstDao.getIo_type())){
// 入库: 更新销售单状态
orderDao.setStatus(IOSEnum.ORDER_STATUS.code("提交"));
iMpsSaleOrderService.updateById(orderDao);
if (orderDao!=null){
orderDao.setStatus(IOSEnum.ORDER_STATUS.code("提交"));
iMpsSaleOrderService.updateById(orderDao);
}
} else {
// 出库: 更新发货单状态
iStIfDeliveryorderCpService.update(
@@ -130,6 +133,8 @@ public class StIvtIostorinvdtlCpServiceImpl extends ServiceImpl<StIvtIostorinvdt
row.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
row.setReal_qty(row.getPlan_qty());
row.setUnassign_qty(row.getPlan_qty());
row.setQty_unit_id("16");
row.setQty_unit_name("\\");
this.save(row);
total_qty += row.getPlan_qty().doubleValue();
}

View File

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.anno.Log;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
@@ -39,14 +40,20 @@ public class SysDictController {
private final ISysDictService dictService;
@GetMapping
//("查询字典")
public ResponseEntity<Object> query(@RequestParam Map whereJson, PageQuery pageable){
return new ResponseEntity<>(TableDataInfo.build(dictService.queryAll(whereJson,pageable)), HttpStatus.OK);
}
@PostMapping("all")
@SaIgnore
public ResponseEntity<Object> queryAll(@RequestBody JSONObject whereJson){
List<Dict> list = dictService.list(new QueryWrapper<Dict>()
.eq("code", StringUtils.isEmpty(whereJson.getString("code"))?"product_area":whereJson.getString("code"))
.select("code","label","value"));
return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.OK);
}
@Log("新增字典")
@PostMapping
//("新增字典")
public ResponseEntity<Object> create(@RequestBody Dict dict){
dictService.create(dict);
return new ResponseEntity<>(HttpStatus.CREATED);
@@ -54,30 +61,24 @@ public class SysDictController {
@PutMapping
@Log("修改字典")
//("修改字典")
//@SaCheckPermission("@el.check('dict:edit')")
public ResponseEntity<Object> updateDict(@Validated @RequestBody Dict dto){
dictService.updateDict(dto);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@Log("删除字典")
//("删除字典")
@DeleteMapping
// @SaCheckPermission("dict:del")
public ResponseEntity<Object> delete(@RequestBody Set<String> ids){
dictService.deleteBatchByIds(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
@GetMapping("/dictDetail")
//("查询字典详情")
public ResponseEntity<Object> queryDetails(@RequestParam Map criteria, PageQuery pageable){
DictQuery dictQuery = JSONObject.parseObject(JSONObject.toJSONString(criteria), DictQuery.class);
return new ResponseEntity<>(TableDataInfo.build(dictService.queryAllDetail(dictQuery,pageable)),HttpStatus.OK);
}
//("查询多个字典详情")
@GetMapping(value = "/dictDetail/map")
public ResponseEntity<Object> getDictDetailMaps(@RequestParam String dictName){
String[] names = dictName.split("[,]");
@@ -89,9 +90,7 @@ public class SysDictController {
}
@Log("新增字典详情")
//("新增字典详情")
@PostMapping("/dictDetail")
// @SaCheckPermission("dict:add")
public ResponseEntity<Object> createDetail(@RequestBody Dict resources){
dictService.createDetail(resources);
return new ResponseEntity<>(HttpStatus.CREATED);

View File

@@ -131,7 +131,7 @@ generator:
#是否开启 swagger-ui
swagger:
enabled: true
enabled: false
# IP 本地解析
ip:

View File

@@ -2,7 +2,7 @@ spring:
freemarker:
check-template-location: false
profiles:
active: dev
active: dev3
jackson:
time-zone: GMT+8
data:

View File

@@ -19,7 +19,7 @@ https://juejin.cn/post/6844903775631572999
<!--引入默认的一些设置-->
<!-- <include resource="log/AutoCreateInst.xml"/>-->
<appender name="esLogAppender" class="com.internetitem.logback.elasticsearch.ElasticsearchAppender">
<url>http://127.0.0.1:9200/_bulk</url>
<url>http://192.168.46.225:9200/_bulk</url>
<index>${esIndex}</index>
<type>mes_log</type>
<loggerName>es-logger</loggerName> <!-- optional -->

View File

@@ -14,7 +14,17 @@ export function edit(data) {
method: 'post',
data
})
}export function setEmp(data) {
}
export function setUsed(data) {
return request({
url: 'api/specialDevice/setUsed',
method: 'post',
data
})
}
export function setEmp(data) {
return request({
url: 'api/specialDevice/setEmp',
method: 'post',
@@ -22,4 +32,4 @@ export function edit(data) {
})
}
export default { query, setEmp, edit }
export default { query, setEmp, edit, setUsed }

View File

@@ -39,7 +39,7 @@
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<el-form-item >
<el-form-item>
<rrOperation :permission="permission" />
</el-form-item>
</el-form>
@@ -60,7 +60,7 @@
</crudOperation>
<el-dialog
:close-on-click-modal="false"
:visible.sync=pointMVisible
:visible.sync="pointMVisible"
title="点位物料信息"
width="540px"
@close="materiValueCancel()"
@@ -68,8 +68,8 @@
<el-form ref="form" :model="materialForm" :rules="rules" size="mini" label-width="110px">
<el-form-item label="物料编码" prop="material_code">
<template slot-scope="scope">
<el-input v-model="materialForm.material_code" clearable @clear="materialForm.material_code='',materialForm.material_id='',materialForm.material_spec=''" style="width: 370px">
<el-button slot="append" icon="el-icon-plus" @click="queryMater(scope.$index, scope.row)" />
<el-input v-model="materialForm.material_code" clearable style="width: 370px" @clear="materialForm.material_code='',materialForm.material_id='',materialForm.material_spec=''">
<el-button slot="append" icon="el-icon-plus" @click="queryMater(scope.$index, scope.row)" />
</el-input>
</template>
</el-form-item>
@@ -77,10 +77,10 @@
<el-input v-model="materialForm.material_spec" disabled style="width: 370px;" />
</el-form-item>
<el-form-item label="物料数量(个)" prop="deviceinstor_qty">
<el-input-number v-model="materialForm.deviceinstor_qty" clearable style="width: 370px;" />
<el-input-number v-model="materialForm.deviceinstor_qty" clearable style="width: 370px;" />
</el-form-item>
<el-form-item label="物料重量(g)" prop="deviceinstor_weight">
<el-input-number v-model="materialForm.deviceinstor_weight" clearable style="width: 370px;" />
<el-input-number v-model="materialForm.deviceinstor_weight" clearable style="width: 370px;" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@@ -98,20 +98,35 @@
@selection-change="crud.selectionChangeHandler"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="product_area" label="生产车间" width="100px" show-overflow-tooltip />
<el-table-column prop="product_area" label="生产车间" width="100px" show-overflow-tooltip>
<template slot-scope="scope">
{{ dict.label.product_area[scope.row.product_area] }}
</template>
</el-table-column>
<el-table-column prop="device_code" label="设备编码" width="100px" show-overflow-tooltip />
<el-table-column prop="material_id" label="物料id" width="200px" show-overflow-tooltip />
<el-table-column prop="material_code" label="物料编码" width="200px" show-overflow-tooltip />
<el-table-column prop="material_spec" label="物料规格" width="200px" show-overflow-toolti />
<el-table-column prop="deviceinstor_qty" label="物料数量(个)" align="center" width="120px" show-overflow-tooltip />
<el-table-column prop="deviceinstor_weight" label="物料重量(g)" align="center" width="120px" show-overflow-tooltip />
<el-table-column label="是否启用" align="center" prop="is_used">
<template slot-scope="scope">
<el-switch
v-model="scope.row.is_used"
active-color="#409EFF"
inactive-color="#F56C6C"
@change="changeEnabled(scope.row, scope.row.is_used)"
/>
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" width="200px" show-overflow-tooltip />
<el-table-column label="操作" width="150px" align="center" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
slot="left"
@click="toEditMaterial(scope.row)">
type="text"
@click="toEditMaterial(scope.row)"
>
修改
</el-button>
</template>
@@ -138,29 +153,33 @@ import pagination from '@crud/Pagination'
import rrOperation from '@crud/RR.operation'
import MaterDtl from '@/views/wms/pub/MaterDialog'
const defaultForm = { product_area: 'A1', workprocedure_id: '1535144552481034240', device_code: null, material_id: null, material_name: null,material_code: null, material_spec: null, deviceinstor_qty: null, deviceinstor_weight: null, remark: null }
const defaultForm = { product_area: 'A1', workprocedure_id: '1535144552481034240', device_code: null, material_id: null, material_name: null, material_code: null, material_spec: null, deviceinstor_qty: null, deviceinstor_weight: null, remark: null }
export default {
name: 'SKdevice',
components: { crudOperation, pagination, rrOperation, MaterDtl },
components: { crudOperation, pagination, rrOperation, MaterDtl },
dicts: ['product_area'],
cruds() {
return [
CRUD({ title: '深坑设备物料', url: 'api/specialDevice/query', query: { product_area: 'A1', workprocedure_id: '1535144552481034240' }, idField: 'device_code', crudMethod: { ...crudDevice },
optShow: {add: false,
edit: false,
del: false,
download: false,
reset: true}})
optShow: { add: false,
edit: false,
del: false,
download: false,
reset: true }, props: { size: 20 }})
]
},
mixins: [presenter(), header(), form(defaultForm),crud()],
mixins: [presenter(), header(), form(defaultForm), crud()],
data() {
return {
enabledTypeOptions: [
{ key: true, display_name: '启用' },
{ key: false, display_name: '禁用' }
],
materType: '',
materialShow: false,
pointMVisible: false,
materialForm:{},
materialForm: {},
queryTypeOptions: [
{ key: 'name', display_name: '字典名称' },
{ key: 'description', display_name: '描述' }
@@ -198,18 +217,17 @@ export default {
this.materialForm.material_name = row.material_name
this.materialForm.material_spec = row.material_spec // 通过splice 替换数据 触发视图更新
},
materiValueCancel(){
materiValueCancel() {
this.materialForm = {}
this.dialogVisible = false
this.pointMVisible = false
},
materiCancel(){
this.materialForm.material_id = ""
this.materialForm.material_code = ""
this.materialForm.material_name = ""
materiCancel() {
this.materialForm.material_id = ''
this.materialForm.material_code = ''
this.materialForm.material_name = ''
},
pointMateriSubmit(){
console.log(this.materialForm)
pointMateriSubmit() {
crudDevice.edit(this.materialForm).then(res => {
this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.materiValueCancel()
@@ -223,12 +241,28 @@ export default {
this.nowindex = index
this.nowrow = row
},
// 改变状态
changeEnabled(data, val) {
const satus = this.enabledTypeOptions.find(item => { return item.key == data.is_used })
this.$confirm('此操作将 "' + satus.display_name + '" ' + data.device_name + ', 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
crudDevice.setUsed(data).then(res => {
this.crud.notify(satus.display_name + '成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
})
}).catch(() => {
data.is_used = !data.is_used
})
},
updateSKMaterial(row) {
crudDevice.edit(row).then(() => {
this.notify('保存成功', 'success')
}).catch(() => {
})
},
}
}
}
</script>

View File

@@ -162,13 +162,12 @@
<el-table-column prop="task_status_name" label="任务状态" width="120px" :formatter="formatTaskStatusName" />
<el-table-column prop="point_code1" label="起点" :min-width="flexWidth('point_code1',crud.data,'起点')" />
<el-table-column prop="point_code2" label="倒料点" :min-width="flexWidth('point_code2',crud.data,'终点')" />
<el-table-column prop="point_code3" label="终点" :min-width="flexWidth('point_code3',crud.data,'返回点')" />
<el-table-column prop="point_code3" label="终点" :min-width="flexWidth('point_code3',crud.data,'返回点')" />
<el-table-column prop="product_area" label="生产车间" />
<el-table-column prop="point1_region_name" label="起点区域" width="120" />
<el-table-column prop="point2_region_name" label="倒料点区域" min-width="120" show-overflow-tooltip />
<el-table-column prop="point3_region_name" label="终点区域" min-width="120" show-overflow-tooltip />
<el-table-column prop="vehicle_code" label="载具编码1" min-width="100" show-overflow-tooltip />
<el-table-column prop="vehicle_code2" label="载具编码2" min-width="100" show-overflow-tooltip />
<el-table-column prop="vehicle_type" label="载具类型" min-width="100" show-overflow-tooltip>
<template slot-scope="scope">
{{ dict.label.vehicle_type[scope.row.vehicle_type] }}
@@ -190,6 +189,7 @@
<span>{{ parseTime(scope.row.update_time) }}</span>
</template>
</el-table-column>
<el-table-column prop="task_step" label="任务执行步骤" min-width="100" show-overflow-tooltip />
<el-table-column
v-permission="['admin','instruction:edit','instruction:del']"
fixed="right"

View File

@@ -60,7 +60,7 @@
<!--托盘物料-->
<el-dialog
:close-on-click-modal="false"
:visible.sync=dialogVisible
:visible.sync="dialogVisible"
title="载具物料信息"
width="540px"
@close="materiValueCancel()"
@@ -71,8 +71,8 @@
</el-form-item>
<el-form-item label="物料编码" prop="material_code">
<template slot-scope="scope">
<el-input v-model="materialForm.material_code" clearable style="width: 370px">
<el-button slot="append" icon="el-icon-plus" @click="queryMater(scope.$index, scope.row)" />
<el-input v-model="materialForm.material_code" clearable style="width: 370px">
<el-button slot="append" icon="el-icon-plus" @click="queryMater(scope.$index, scope.row)" />
</el-input>
</template>
</el-form-item>
@@ -80,7 +80,7 @@
<el-input v-model="materialForm.material_spec" disabled style="width: 370px;" />
</el-form-item>
<el-form-item label="物料数量" prop="storage_qty">
<el-input v-model="materialForm.storage_qty" clearable style="width: 370px;" />
<el-input v-model="materialForm.storage_qty" clearable style="width: 370px;" />
</el-form-item>
<el-form-item label="物料重量" prop="weight">
<el-input v-model="materialForm.weight" clearable style="width: 370px;" />
@@ -94,7 +94,7 @@
<!--点位物料-->
<el-dialog
:close-on-click-modal="false"
:visible.sync=pointMVisible
:visible.sync="pointMVisible"
title="点位物料信息"
width="540px"
@close="materiValueCancel()"
@@ -105,8 +105,8 @@
</el-form-item>
<el-form-item label="物料编码" prop="material_code">
<template slot-scope="scope">
<el-input v-model="materialForm.material_code" clearable @clear="materialForm.material_code='',materialForm.material_id='',materialForm.material_name='',materialForm.material_spec=''" style="width: 370px">
<el-button slot="append" icon="el-icon-plus" @click="queryMater(scope.$index, scope.row)" />
<el-input v-model="materialForm.material_code" clearable style="width: 370px" @clear="materialForm.material_code='',materialForm.point_status='1',materialForm.material_id='',materialForm.material_name='',materialForm.material_spec=''">
<el-button slot="append" icon="el-icon-plus" @click="queryMater(scope.$index, scope.row)" />
</el-input>
</template>
</el-form-item>
@@ -114,7 +114,7 @@
<el-input v-model="materialForm.material_spec" disabled style="width: 370px;" />
</el-form-item>
<el-form-item label="物料数量" prop="storage_qty">
<el-input v-model="materialForm.qty" clearable style="width: 370px;" />
<el-input v-model="materialForm.qty" clearable style="width: 370px;" />
</el-form-item>
<el-form-item label="锁定类型" prop="lock_type">
<el-select
@@ -162,14 +162,14 @@
@selection-change="crud.selectionChangeHandler"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="point_code" label="点位编码" sortable width="120" show-overflow-tooltip >
<!-- <template slot-scope="scope">-->
<!-- <el-link type="warning" @click="toView(scope.row)">{{ scope.row.point_code }}</el-link>-->
<!-- </template>-->
<el-table-column prop="point_code" label="点位编码" sortable width="120" show-overflow-tooltip>
<!-- <template slot-scope="scope">-->
<!-- <el-link type="warning" @click="toView(scope.row)">{{ scope.row.point_code }}</el-link>-->
<!-- </template>-->
</el-table-column>
<el-table-column prop="point_name" label="点位名称" width="150" sortable show-overflow-tooltip />
<el-table-column prop="region_name" label="区域名称" min-width="120" show-overflow-tooltip />
<el-table-column prop="point_status" label="点位状态" >
<el-table-column prop="point_status" label="点位状态">
<template slot-scope="scope">
{{ scope.row.point_status == '2' ? '有料' : scope.row.point_status == '3'?'空载具':'空位' }}
</template>
@@ -193,9 +193,10 @@
<el-table-column v-permission="[]" label="操作" width="100px" align="center" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
slot="left"
@click="toEditMaterial(scope.row)">
type="text"
@click="toEditMaterial(scope.row)"
>
修改
</el-button>
</template>
@@ -217,7 +218,7 @@
<script>
import crudDevice from '@/views/wms/staging_manage/staging/kzStaging/kzStaging.js'
import CRUD, { crud,presenter, header, form } from '@crud/crud'
import CRUD, { crud, presenter, header, form } from '@crud/crud'
import crudOperation from '@crud/CRUD.operation'
import pagination from '@crud/Pagination'
import rrOperation from '@crud/RR.operation'
@@ -226,31 +227,28 @@ import ViewDialog from '@/views/wms/staging_manage/staging/kzStaging/ViewDialog'
import MaterDtl from '@/views/wms/pub/MaterDialog'
import crudStoragevehicleinfo from '@/views/wms/masterdata_manage/master/storagevehicleinfo/storagevehicleinfo'
const defaultForm = { product_area: 'A1', region_code: 'A1_KZHC', workprocedure_id: '1535144552481034240', device_code: null, material_id: null, material_name: null, material_spec: null, deviceinstor_qty: null, deviceinstor_weight: null, remark: null }
export default {
name: 'SKdevice',
components: { crudOperation, pagination, udOperation, rrOperation, ViewDialog, MaterDtl },
dicts: ['product_area','d_lock_type','point_status'],
dicts: ['product_area', 'd_lock_type', 'point_status'],
cruds() {
return [
CRUD({ title: '刻字缓存区', url: 'api/point/queryVehicle', query: { product_area: 'A1', region_code: 'A1_KZHC' }, idField: 'device_code', crudMethod: { ...crudDevice },optShow: {
add: false,
edit: false,
del: false,
download: false,
reset: true
}})
CRUD({ title: '刻字缓存区', url: 'api/point/queryVehicle', query: { product_area: 'A1', region_code: 'A1_KZHC' }, idField: 'device_code', crudMethod: { ...crudDevice }, optShow: {
add: false,
edit: false,
del: false,
download: false,
reset: true
}, props: { size: 20 }})
]
},
mixins: [presenter(), header(), form(defaultForm),crud()],
mixins: [presenter(), header(), form(defaultForm), crud()],
data() {
return {
materialForm:{},
materType:'',
materialForm: {},
materType: '',
materialShow: false,
dialogVisible: false,
pointMVisible: false,
@@ -285,19 +283,21 @@ export default {
this.materialForm.material_code = row.material_code
this.materialForm.material_name = row.material_name
this.materialForm.material_spec = row.material_spec
if (row.material_spec != null || row.material_spec != '') {
this.materialForm.point_status = '2'
}
},
mclearable(){
mclearable() {
this.materialForm.material_id = ''
this.materialForm.material_code = ''
this.materialForm.material_name = ''
},
materiValueCancel(){
materiValueCancel() {
this.materialForm = {}
this.dialogVisible = false
this.pointMVisible = false
},
materiValueSubmit(){
console.log(this.materialForm)
materiValueSubmit() {
crudStoragevehicleinfo.updateVehicleMaterial(this.materialForm).then(res => {
this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.materiValueCancel()
@@ -306,7 +306,7 @@ export default {
})
},
pointMateriSubmit(){
pointMateriSubmit() {
crudDevice.edit(this.materialForm).then(res => {
this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.materiValueCancel()
@@ -340,7 +340,7 @@ export default {
this.notify('保存成功', 'success')
}).catch(() => {
})
},
}
}
}
</script>

View File

@@ -11,24 +11,37 @@
>
<el-row v-show="crud.status.cu > 0" :gutter="20">
<el-col :span="20" style="border: 1px solid white">
<span/>
<span />
</el-col>
<el-col :span="4">
<span>
<el-button icon="el-icon-check" size="mini" :loading="crud.cu === 2" type="primary"
@click="crud.submitCU">保存</el-button>
<el-button
icon="el-icon-check"
size="mini"
:loading="crud.cu === 2"
type="primary"
@click="crud.submitCU"
>保存</el-button>
<el-button icon="el-icon-close" size="mini" type="info" @click="crud.cancelCU">关闭</el-button>
</span>
</el-col>
</el-row>
<el-form ref="form" style="border: 1px solid #cfe0df;margin-top: 10px;padding-top: 10px;" :inline="true"
:model="form" :rules="rules" size="mini" label-width="85px" label-suffix=":">
<el-input v-show="false" v-model="form.stor_code" placeholder="仓库编码"/>
<el-input v-show="false" v-model="form.stor_name" placeholder="仓库名称"/>
<el-form
ref="form"
style="border: 1px solid #cfe0df;margin-top: 10px;padding-top: 10px;"
:inline="true"
:model="form"
:rules="rules"
size="mini"
label-width="85px"
label-suffix=":"
>
<el-input v-show="false" v-model="form.stor_code" placeholder="仓库编码" />
<el-input v-show="false" v-model="form.stor_name" placeholder="仓库名称" />
<el-form-item label="单据号" prop="bill_code">
<label slot="label">单&nbsp;&nbsp;据&nbsp;号:</label>
<el-input v-model.trim="form.bill_code" disabled placeholder="系统生成" clearable style="width: 210px"/>
<el-input v-model.trim="form.bill_code" disabled placeholder="系统生成" clearable style="width: 210px" />
</el-form-item>
<el-form-item label="仓库" prop="stor_id">
<label slot="label">仓&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;库:</label>
@@ -83,12 +96,17 @@
</el-form-item>
<el-form-item label="明细数" prop="dtl_num">
<label slot="label">明&nbsp;&nbsp;细&nbsp;数:</label>
<el-input v-model.trim="form.dtl_num" size="mini" disabled style="width: 210px"/>
<el-input v-model.trim="form.dtl_num" size="mini" disabled style="width: 210px" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<label slot="label">备&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注:</label>
<el-input v-model.trim="form.remark" style="width: 380px;" rows="2" type="textarea"
:disabled="crud.status.view > 0"/>
<el-input
v-model.trim="form.remark"
style="width: 380px;"
rows="2"
type="textarea"
:disabled="crud.status.view > 0"
/>
</el-form-item>
</el-form>
<div class="crud-opts2">
@@ -96,7 +114,7 @@
<span v-if="crud.status.cu > 0" class="crud-opts-right2">
<!--左侧插槽-->
<slot name="left"/>
<slot name="left" />
<el-button
slot="left"
class="filter-item"
@@ -117,31 +135,36 @@
border
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
>
<el-table-column type="index" label="序号" width="50" align="center"/>
<el-table-column prop="sect_name" label="盘点库区" align="center"/>
<el-table-column prop="struct_name" label="盘点货位" align="center"/>
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" width="120" align="center"/>
<el-table-column prop="material_name" label="物料名称" align="center" min-width="120" show-overflow-tooltip/>
<el-table-column prop="base_qty" label="重量" align="center" :formatter="crud.formatNum0"/>
<el-table-column v-if="crud.status.view > 0" prop="fac_qty" label="盘点重量" align="center" :formatter="crud.formatNum0"/>
<el-table-column prop="qty_unit_name" label="计量单位" align="center"/>
<el-table-column prop="storagevehicle_code" label="载具号" align="center"/>
<el-table-column type="index" label="序号" width="50" align="center" />
<el-table-column prop="sect_name" label="盘点库区" align="center" />
<el-table-column prop="struct_name" label="盘点货位" align="center" />
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" width="120" align="center" />
<el-table-column prop="material_name" label="物料名称" align="center" min-width="120" show-overflow-tooltip />
<el-table-column prop="base_qty" label="重量/数量" align="center" :formatter="crud.formatNum0" />
<el-table-column v-if="crud.status.view > 0" prop="fac_qty" label="盘点结果" align="center" :formatter="crud.formatNum0" />
<el-table-column prop="qty_unit_name" label="计量单位" align="center" />
<el-table-column prop="storagevehicle_code" label="载具号" align="center" />
<el-table-column v-if="crud.status.cu > 0" align="center" label="操作" width="160" fixed="right">
<template scope="scope">
<el-button type="danger" class="filter-item" size="mini" icon="el-icon-delete"
@click.native.prevent="deleteRow(scope.$index, form.tableData)"/>
<el-button
type="danger"
class="filter-item"
size="mini"
icon="el-icon-delete"
@click.native.prevent="deleteRow(scope.$index, form.tableData)"
/>
</template>
</el-table-column>
</el-table>
<AddDtl :dialog-show.sync="dtlShow" @tableChanged="tableChanged"/>
<AddDtl :dialog-show.sync="dtlShow" @tableChanged="tableChanged" />
</el-dialog>
</template>
<script>
import CRUD, {crud, form} from '@crud/crud'
import CRUD, { crud, form } from '@crud/crud'
import AddDtl from '@/views/wms/storage_manage/product/productCheck/StructIvt'
import check from '@/views/wms/storage_manage/product/productCheck/check'
import crudStorattr from "@/views/wms/storage_manage/basedata/basedata";
import crudStorattr from '@/views/wms/storage_manage/basedata/basedata'
const defaultForm = {
check_code: '',
@@ -157,7 +180,7 @@ const defaultForm = {
}
export default {
name: 'AddDialog',
components: {AddDtl},
components: { AddDtl },
mixins: [crud(), form(defaultForm)],
props: {
dialogShow: {
@@ -176,10 +199,10 @@ export default {
storlist: [],
rules: {
stor_id: [
{required: true, message: '仓库不能为空', trigger: 'blur'}
{ required: true, message: '仓库不能为空', trigger: 'blur' }
],
check_type: [
{required: true, message: '业务类型不能为空', trigger: 'blur'}
{ required: true, message: '业务类型不能为空', trigger: 'blur' }
]
}
}
@@ -194,7 +217,7 @@ export default {
methods: {
open() {
// 查询原材料库的仓库
crudStorattr.getStor({'stor_type': '4'}).then(res => {
crudStorattr.getStor({ 'stor_type': '4' }).then(res => {
this.storlist = res.content
})
},
@@ -202,7 +225,7 @@ export default {
this.$emit('AddChanged')
},
[CRUD.HOOK.afterToEdit]() {
check.getCheckDtl({'check_id': this.form.check_id}).then(res => {
check.getCheckDtl({ 'check_id': this.form.check_id }).then(res => {
this.form.tableData = res
// 将明细变成不可编辑
for (let i = 0; i < this.form.tableData.length; i++) {
@@ -213,7 +236,7 @@ export default {
})
},
[CRUD.HOOK.afterToView]() {
check.getCheckDtl({'check_id': this.form.check_id}).then(res => {
check.getCheckDtl({ 'check_id': this.form.check_id }).then(res => {
this.form.tableData = res
// 将明细变成不可编辑
for (let i = 0; i < this.form.tableData.length; i++) {

View File

@@ -73,17 +73,17 @@
<span class="crud-opts-right2">
<!--左侧插槽-->
<slot name="left" />
<!-- <el-button-->
<!-- slot="left"-->
<!-- class="filter-item"-->
<!-- type="primary"-->
<!-- icon="el-icon-plus"-->
<!-- size="mini"-->
<!-- :disabled="add_flag"-->
<!-- @click="sendTask"-->
<!-- >-->
<!-- 下发任务-->
<!-- </el-button>-->
<!-- <el-button-->
<!-- slot="left"-->
<!-- class="filter-item"-->
<!-- type="primary"-->
<!-- icon="el-icon-plus"-->
<!-- size="mini"-->
<!-- :disabled="add_flag"-->
<!-- @click="sendTask"-->
<!-- >-->
<!-- 下发任务-->
<!-- </el-button>-->
<el-button
slot="left"
class="filter-item"
@@ -122,8 +122,8 @@
</template>
</el-table-column>
<el-table-column prop="material_name" label="物料名称" align="center" show-overflow-tooltip />
<el-table-column prop="base_qty" label="重量" :formatter="crud.formatNum0" align="center" />
<el-table-column show-overflow-tooltip prop="fac_qty" label="盘点重量" width="160" align="center">
<el-table-column prop="base_qty" label="重量/数量" :formatter="crud.formatNum0" align="center" />
<el-table-column show-overflow-tooltip prop="fac_qty" label="盘点结果" width="160" align="center">
<template scope="scope">
<el-input-number v-show="isShow(scope.$index, scope.row,2)" v-model="scope.row.fac_qty" :precision="3" :min="0" />
<span v-show="isShow(scope.$index, scope.row,4)">{{ scope.row.fac_qty }}</span>
@@ -155,7 +155,7 @@
<script>
import CRUD, { crud } from '@crud/crud'
import check from '@/views/wms/storage_manage/product/productCheck/check'
import crudStorattr from "@/views/wms/storage_manage/basedata/basedata";
import crudStorattr from '@/views/wms/storage_manage/basedata/basedata'
import MaterDialog from '@/views/wms/pub/MaterDialog'
export default {
@@ -218,7 +218,7 @@ export default {
// 将明细变成不可编辑
for (let i = 0; i < this.tableData.length; i++) {
const row = this.tableData[i]
this.$set(row,'edit',false)
this.$set(row, 'edit', false)
if (row.status > '04') {
row.edit = true
}
@@ -323,7 +323,7 @@ export default {
},
sendTask() {
this.nowrow.is_antu_div = true // 是否自动分配盘点位
check.sendTask(this.nowrow).then( res => {
check.sendTask(this.nowrow).then(res => {
this.crud.notify('任务下发成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
})
},

View File

@@ -81,20 +81,20 @@
:disabled="process1_flag"
@click="openReCheck"
>
拆箱盘点
</el-button>
拆箱盘点
</el-button>
<el-button
slot="left"
class="filter-item"
type="primary"
icon="el-icon-plus"
size="mini"
:disabled="process0_flag"
@click="process0"
>
账务为准
</el-button>
<el-button
slot="left"
class="filter-item"
type="primary"
icon="el-icon-plus"
size="mini"
:disabled="process0_flag"
@click="process0"
>
账务为准
</el-button>
<slot name="left" />
</span>
@@ -117,7 +117,7 @@
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" width="190" align="center" />
<el-table-column prop="material_name" label="物料名称" align="center" show-overflow-tooltip />
<el-table-column prop="base_qty" label="重量/数量" align="center" />
<el-table-column show-overflow-tooltip prop="fac_qty" label="盘点重量/数量" :formatter="crud.formatNum0" width="160" align="center" />
<el-table-column show-overflow-tooltip prop="fac_qty" label="盘点结果/数量" :formatter="crud.formatNum0" width="160" align="center" />
<el-table-column prop="qty_unit_name" label="计量单位" align="center" />
<el-table-column prop="storagevehicle_code" label="载具号" align="center" />
<el-table-column prop="check_result" label="盘点结果" align="center" :formatter="check_resultFormat" />
@@ -130,7 +130,7 @@
<script>
import CRUD, { crud } from '@crud/crud'
import check from '@/views/wms/storage_manage/product/productCheck/check'
import crudStorattr from "@/views/wms/storage_manage/basedata/basedata";
import crudStorattr from '@/views/wms/storage_manage/basedata/basedata'
import ReCheckDialog from '@/views/wms/storage_manage/product/productCheck/ReCheckDialog'
export default {
@@ -233,7 +233,7 @@ export default {
})
},
getOutBillDtl() {
check.getCheckDtl({ 'check_id': this.form.check_id,'check_result': '-1'}).then(res => {
check.getCheckDtl({ 'check_id': this.form.check_id, 'check_result': '-1' }).then(res => {
this.tableData = res
})
},

View File

@@ -21,7 +21,7 @@
<el-form-item label="明细数" prop="dtl_num">
<el-input v-model.trim="form.dtl_num" style="width: 200px" :disabled="true" />
</el-form-item>
<el-form-item label="盘点重量" prop="dtl_num">
<el-form-item label="盘点结果" prop="dtl_num">
<el-input v-model.trim="form.fac_qty" style="width: 200px" :disabled="true" />
</el-form-item>
</el-form>
@@ -61,7 +61,7 @@
<el-table-column show-overflow-tooltip prop="bucketunique" label="箱号" width="190" align="center">
<template scope="scope">
<el-input v-show="isCanDel(scope.$index, scope.row,'3')" v-model="scope.row.bucketunique" class="input-with-select">
<!-- <el-button slot="append" icon="el-icon-search" @click="queryBucket(scope.$index, scope.row)" />-->
<!-- <el-button slot="append" icon="el-icon-search" @click="queryBucket(scope.$index, scope.row)" />-->
</el-input>
<span v-show="isCanDel(scope.$index, scope.row,'2')">{{ scope.row.bucketunique }}</span>
</template>
@@ -69,7 +69,7 @@
<el-table-column prop="material_code" label="物料编码" align="center" />
<el-table-column prop="material_name" label="物料名称" align="center" show-overflow-tooltip />
<el-table-column prop="storage_qty" label="库存重量" :formatter="crud.formatNum3" align="center" />
<el-table-column show-overflow-tooltip prop="ivt_qty_ck" label="盘点重量" width="160" align="center">
<el-table-column show-overflow-tooltip prop="ivt_qty_ck" label="盘点结果" width="160" align="center">
<template scope="scope">
<el-input-number v-show="!scope.row.edit" v-model="scope.row.ivt_qty_ck" :precision="3" :min="0" />
<span v-show="scope.row.edit">{{ scope.row.ivt_qty_ck }}</span>
@@ -90,7 +90,7 @@
<el-button type="primary" @click="process1">确认</el-button>
</span>
<MaterDialog :dialog-show.sync="materShow" @tableChanged2="tableChanged2" />
<!-- <BucketDialog :dialog-show.sync="bucketShow" @bucketChange="tableChanged2" />-->
<!-- <BucketDialog :dialog-show.sync="bucketShow" @bucketChange="tableChanged2" />-->
</el-dialog>
</template>
@@ -140,12 +140,12 @@ export default {
},
methods: {
open() {
check.getBucketrecord({ 'storagevehicle_code': this.form.storagevehicle_code, 'status': '3', 'checkdtl_id': this.form.checkdtl_id}).then(res => {
check.getBucketrecord({ 'storagevehicle_code': this.form.storagevehicle_code, 'status': '3', 'checkdtl_id': this.form.checkdtl_id }).then(res => {
this.tableData = res
// 将明细变成不可编辑
for (let i = 0; i < this.tableData.length; i++) {
const row = this.tableData[i]
this.$set(row,'edit',false)
this.$set(row, 'edit', false)
row.new_edit = false
this.tableData.splice(i, 1, row)
}
@@ -175,7 +175,7 @@ export default {
this.crud.notify('请先选中一条已存在的盘点明细!', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
this.tableData.push({ bucketunique: '', storagevehicle_id: this.nowrow.storagevehicle_id, storagevehicle_type: this.nowrow.storagevehicle_type, storagevehicle_code: this.nowrow.storagevehicle_code, material_id: this.nowrow.material_id, material_name: this.nowrow.material_name,material_code: this.nowrow.material_code, ivt_qty: '0', qty_unit_id: '', qty_unit_name: '', pcsn: '', quality_scode: '00', ivt_level: '01', is_active: '1', ivt_qty_ck: '0', edit: false, new_edit: false })
this.tableData.push({ bucketunique: '', storagevehicle_id: this.nowrow.storagevehicle_id, storagevehicle_type: this.nowrow.storagevehicle_type, storagevehicle_code: this.nowrow.storagevehicle_code, material_id: this.nowrow.material_id, material_name: this.nowrow.material_name, material_code: this.nowrow.material_code, ivt_qty: '0', qty_unit_id: '', qty_unit_name: '', pcsn: '', quality_scode: '00', ivt_level: '01', is_active: '1', ivt_qty_ck: '0', edit: false, new_edit: false })
this.form.dtl_num = this.tableData.length
},
async queryMater(index, row) {
@@ -257,8 +257,8 @@ export default {
qty = parseFloat(this.tableData[i].ivt_qty_ck) + parseFloat(qty)
}
if (qty > parseFloat(this.form.fac_qty) ) {
this.crud.notify('不允许大于盘点重量', CRUD.NOTIFICATION_TYPE.INFO)
if (qty > parseFloat(this.form.fac_qty)) {
this.crud.notify('不允许大于盘点结果', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
}

View File

@@ -11,24 +11,37 @@
>
<el-row v-show="crud.status.cu > 0" :gutter="20">
<el-col :span="20" style="border: 1px solid white">
<span/>
<span />
</el-col>
<el-col :span="4">
<span>
<el-button icon="el-icon-check" size="mini" :loading="crud.cu === 2" type="primary"
@click="crud.submitCU">保存</el-button>
<el-button
icon="el-icon-check"
size="mini"
:loading="crud.cu === 2"
type="primary"
@click="crud.submitCU"
>保存</el-button>
<el-button icon="el-icon-close" size="mini" type="info" @click="crud.cancelCU">关闭</el-button>
</span>
</el-col>
</el-row>
<el-form ref="form" style="border: 1px solid #cfe0df;margin-top: 10px;padding-top: 10px;" :inline="true"
:model="form" :rules="rules" size="mini" label-width="85px" label-suffix=":">
<el-input v-show="false" v-model="form.stor_code" placeholder="仓库编码"/>
<el-input v-show="false" v-model="form.stor_name" placeholder="仓库名称"/>
<el-form
ref="form"
style="border: 1px solid #cfe0df;margin-top: 10px;padding-top: 10px;"
:inline="true"
:model="form"
:rules="rules"
size="mini"
label-width="85px"
label-suffix=":"
>
<el-input v-show="false" v-model="form.stor_code" placeholder="仓库编码" />
<el-input v-show="false" v-model="form.stor_name" placeholder="仓库名称" />
<el-form-item label="单据号" prop="bill_code">
<label slot="label">单&nbsp;&nbsp;据&nbsp;号:</label>
<el-input v-model.trim="form.bill_code" disabled placeholder="系统生成" clearable style="width: 210px"/>
<el-input v-model.trim="form.bill_code" disabled placeholder="系统生成" clearable style="width: 210px" />
</el-form-item>
<el-form-item label="车间" prop="workshop_id">
<label slot="label">车间</label>
@@ -101,12 +114,17 @@
</el-form-item>
<el-form-item label="明细数" prop="dtl_num">
<label slot="label">明&nbsp;&nbsp;细&nbsp;数:</label>
<el-input v-model.trim="form.dtl_num" size="mini" disabled style="width: 210px"/>
<el-input v-model.trim="form.dtl_num" size="mini" disabled style="width: 210px" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<label slot="label">备&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注:</label>
<el-input v-model.trim="form.remark" style="width: 380px;" rows="2" type="textarea"
:disabled="crud.status.view > 0"/>
<el-input
v-model.trim="form.remark"
style="width: 380px;"
rows="2"
type="textarea"
:disabled="crud.status.view > 0"
/>
</el-form-item>
</el-form>
<div class="crud-opts2">
@@ -114,7 +132,7 @@
<span v-if="crud.status.cu > 0" class="crud-opts-right2">
<!--左侧插槽-->
<slot name="left"/>
<slot name="left" />
<el-button
slot="left"
class="filter-item"
@@ -135,30 +153,35 @@
border
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
>
<el-table-column type="index" label="序号" width="50" align="center"/>
<el-table-column prop="sect_name" label="盘点库区" align="center"/>
<el-table-column prop="struct_name" label="盘点货位" align="center"/>
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" width="120" align="center"/>
<el-table-column prop="material_name" label="物料名称" align="center" min-width="120" show-overflow-tooltip/>
<el-table-column prop="base_qty" label="重量" align="center" :formatter="crud.formatNum0"/>
<el-table-column v-if="crud.status.view > 0" prop="fac_qty" label="盘点重量" align="center" :formatter="crud.formatNum0"/>
<el-table-column prop="qty_unit_name" label="计量单位" align="center"/>
<el-table-column type="index" label="序号" width="50" align="center" />
<el-table-column prop="sect_name" label="盘点库区" align="center" />
<el-table-column prop="struct_name" label="盘点货位" align="center" />
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" width="120" align="center" />
<el-table-column prop="material_name" label="物料名称" align="center" min-width="120" show-overflow-tooltip />
<el-table-column prop="base_qty" label="重量/数量" align="center" :formatter="crud.formatNum0" />
<el-table-column v-if="crud.status.view > 0" prop="fac_qty" label="盘点结果" align="center" :formatter="crud.formatNum0" />
<el-table-column prop="qty_unit_name" label="计量单位" align="center" />
<el-table-column v-if="crud.status.cu > 0" align="center" label="操作" width="160" fixed="right">
<template scope="scope">
<el-button type="danger" class="filter-item" size="mini" icon="el-icon-delete"
@click.native.prevent="deleteRow(scope.$index, form.tableData)"/>
<el-button
type="danger"
class="filter-item"
size="mini"
icon="el-icon-delete"
@click.native.prevent="deleteRow(scope.$index, form.tableData)"
/>
</template>
</el-table-column>
</el-table>
<AddDtl :dialog-show.sync="dtlShow" @tableChanged="tableChanged"/>
<AddDtl :dialog-show.sync="dtlShow" @tableChanged="tableChanged" />
</el-dialog>
</template>
<script>
import CRUD, {crud, form} from '@crud/crud'
import CRUD, { crud, form } from '@crud/crud'
import AddDtl from '@/views/wms/storage_manage/rawproduct/rawproductCheck/StructIvt'
import check from '@/views/wms/storage_manage/rawproduct/rawproductCheck/check'
import crudStorattr from "@/views/wms/storage_manage/basedata/basedata";
import crudStorattr from '@/views/wms/storage_manage/basedata/basedata'
const defaultForm = {
check_code: '',
@@ -175,7 +198,7 @@ const defaultForm = {
}
export default {
name: 'AddDialog',
components: {AddDtl},
components: { AddDtl },
mixins: [crud(), form(defaultForm)],
props: {
dialogShow: {
@@ -194,13 +217,13 @@ export default {
storlist: [],
rules: {
stor_id: [
{required: true, message: '仓库不能为空', trigger: 'blur'}
{ required: true, message: '仓库不能为空', trigger: 'blur' }
],
check_type: [
{required: true, message: '业务类型不能为空', trigger: 'blur'}
{ required: true, message: '业务类型不能为空', trigger: 'blur' }
],
workshop_id: [
{required: true, message: '车间不能为空', trigger: 'blur'}
{ required: true, message: '车间不能为空', trigger: 'blur' }
]
}
}
@@ -215,7 +238,7 @@ export default {
methods: {
open() {
// 查询原材料库的仓库
crudStorattr.getStor({'stor_type': '3'}).then(res => {
crudStorattr.getStor({ 'stor_type': '3' }).then(res => {
this.storlist = res.content
})
},
@@ -223,7 +246,7 @@ export default {
this.$emit('AddChanged')
},
[CRUD.HOOK.afterToEdit]() {
check.getCheckDtl({'check_id': this.form.check_id}).then(res => {
check.getCheckDtl({ 'check_id': this.form.check_id }).then(res => {
this.form.tableData = res
// 将明细变成不可编辑
for (let i = 0; i < this.form.tableData.length; i++) {
@@ -234,7 +257,7 @@ export default {
})
},
[CRUD.HOOK.afterToView]() {
check.getCheckDtl({'check_id': this.form.check_id}).then(res => {
check.getCheckDtl({ 'check_id': this.form.check_id }).then(res => {
this.form.tableData = res
// 将明细变成不可编辑
for (let i = 0; i < this.form.tableData.length; i++) {

View File

@@ -110,8 +110,8 @@
</template>
</el-table-column>
<el-table-column prop="material_name" label="物料名称" align="center" />
<el-table-column prop="base_qty" label="重量" :formatter="crud.formatNum0" align="center" />
<el-table-column show-overflow-tooltip prop="fac_qty" label="盘点重量" width="160" align="center">
<el-table-column prop="base_qty" label="重量/数量" :formatter="crud.formatNum0" align="center" />
<el-table-column show-overflow-tooltip prop="fac_qty" label="盘点结果" width="160" align="center">
<template scope="scope">
<el-input-number v-show="isShow(scope.$index, scope.row,2)" v-model="scope.row.fac_qty" :precision="3" :min="0" />
<span v-show="isShow(scope.$index, scope.row,4)">{{ scope.row.fac_qty }}</span>
@@ -141,7 +141,7 @@
<script>
import CRUD, { crud } from '@crud/crud'
import check from '@/views/wms/storage_manage/rawproduct/rawproductCheck/check'
import crudStorattr from "@/views/wms/storage_manage/basedata/basedata";
import crudStorattr from '@/views/wms/storage_manage/basedata/basedata'
import MaterDialog from '@/views/wms/pub/MaterDialog'
export default {
@@ -204,7 +204,7 @@ export default {
// 将明细变成不可编辑
for (let i = 0; i < this.tableData.length; i++) {
const row = this.tableData[i]
this.$set(row,'edit',false)
this.$set(row, 'edit', false)
if (row.status > '04') {
row.edit = true
}

View File

@@ -117,7 +117,7 @@
</el-table-column>
<el-table-column prop="pcsn" label="批次" align="center" />
<el-table-column prop="ivt_qty" label="库存重量" :formatter="crud.formatNum3" align="center" />
<el-table-column show-overflow-tooltip prop="ivt_qty_ck" label="盘点重量" width="160" align="center">
<el-table-column show-overflow-tooltip prop="ivt_qty_ck" label="盘点结果" width="160" align="center">
<template scope="scope">
<el-input-number v-show="!scope.row.edit" v-model="scope.row.ivt_qty_ck" :precision="3" :min="0" />
<span v-show="scope.row.edit">{{ scope.row.ivt_qty_ck }}</span>
@@ -138,7 +138,7 @@
<el-button type="primary" @click="process1">确认</el-button>
</span>
<MaterDialog :dialog-show.sync="materShow" @tableChanged2="tableChanged2" />
<!-- <BucketDialog :dialog-show.sync="bucketShow" @bucketChange="tableChanged2" />-->
<!-- <BucketDialog :dialog-show.sync="bucketShow" @bucketChange="tableChanged2" />-->
</el-dialog>
</template>

View File

@@ -11,24 +11,37 @@
>
<el-row v-show="crud.status.cu > 0" :gutter="20">
<el-col :span="20" style="border: 1px solid white">
<span/>
<span />
</el-col>
<el-col :span="4">
<span>
<el-button icon="el-icon-check" size="mini" :loading="crud.cu === 2" type="primary"
@click="crud.submitCU">保存</el-button>
<el-button
icon="el-icon-check"
size="mini"
:loading="crud.cu === 2"
type="primary"
@click="crud.submitCU"
>保存</el-button>
<el-button icon="el-icon-close" size="mini" type="info" @click="crud.cancelCU">关闭</el-button>
</span>
</el-col>
</el-row>
<el-form ref="form" style="border: 1px solid #cfe0df;margin-top: 10px;padding-top: 10px;" :inline="true"
:model="form" :rules="rules" size="mini" label-width="85px" label-suffix=":">
<el-input v-show="false" v-model="form.stor_code" placeholder="仓库编码"/>
<el-input v-show="false" v-model="form.stor_name" placeholder="仓库名称"/>
<el-form
ref="form"
style="border: 1px solid #cfe0df;margin-top: 10px;padding-top: 10px;"
:inline="true"
:model="form"
:rules="rules"
size="mini"
label-width="85px"
label-suffix=":"
>
<el-input v-show="false" v-model="form.stor_code" placeholder="仓库编码" />
<el-input v-show="false" v-model="form.stor_name" placeholder="仓库名称" />
<el-form-item label="单据号" prop="bill_code">
<label slot="label">单&nbsp;&nbsp;据&nbsp;号:</label>
<el-input v-model.trim="form.bill_code" disabled placeholder="系统生成" clearable style="width: 210px"/>
<el-input v-model.trim="form.bill_code" disabled placeholder="系统生成" clearable style="width: 210px" />
</el-form-item>
<el-form-item label="车间" prop="workshop_id">
<label slot="label">车间</label>
@@ -101,12 +114,17 @@
</el-form-item>
<el-form-item label="明细数" prop="dtl_num">
<label slot="label">明&nbsp;&nbsp;细&nbsp;数:</label>
<el-input v-model.trim="form.dtl_num" size="mini" disabled style="width: 210px"/>
<el-input v-model.trim="form.dtl_num" size="mini" disabled style="width: 210px" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<label slot="label">备&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注:</label>
<el-input v-model.trim="form.remark" style="width: 380px;" rows="2" type="textarea"
:disabled="crud.status.view > 0"/>
<el-input
v-model.trim="form.remark"
style="width: 380px;"
rows="2"
type="textarea"
:disabled="crud.status.view > 0"
/>
</el-form-item>
</el-form>
<div class="crud-opts2">
@@ -114,7 +132,7 @@
<span v-if="crud.status.cu > 0" class="crud-opts-right2">
<!--左侧插槽-->
<slot name="left"/>
<slot name="left" />
<el-button
slot="left"
class="filter-item"
@@ -135,31 +153,36 @@
border
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
>
<el-table-column type="index" label="序号" width="50" align="center"/>
<el-table-column prop="sect_name" label="盘点库区" align="center"/>
<el-table-column prop="struct_name" label="盘点货位" align="center"/>
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" width="120" align="center"/>
<el-table-column prop="material_name" label="物料名称" align="center" min-width="120" show-overflow-tooltip/>
<el-table-column prop="base_qty" label="数量" align="center" :formatter="crud.formatNum0"/>
<el-table-column prop="unit_weight" label="单重" align="center"/>
<el-table-column v-if="crud.status.view > 0" prop="fac_qty" label="盘点重量" align="center" :formatter="crud.formatNum0"/>
<el-table-column prop="storagevehicle_code" label="载具号" align="center"/>
<el-table-column type="index" label="序号" width="50" align="center" />
<el-table-column prop="sect_name" label="盘点库区" align="center" />
<el-table-column prop="struct_name" label="盘点货位" align="center" />
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" width="120" align="center" />
<el-table-column prop="material_name" label="物料名称" align="center" min-width="120" show-overflow-tooltip />
<el-table-column prop="base_qty" label="重量/数量" align="center" :formatter="crud.formatNum0" />
<el-table-column prop="unit_weight" label="单重" align="center" />
<el-table-column v-if="crud.status.view > 0" prop="fac_qty" label="盘点结果" align="center" :formatter="crud.formatNum0" />
<el-table-column prop="storagevehicle_code" label="载具号" align="center" />
<el-table-column v-if="crud.status.cu > 0" align="center" label="操作" width="160" fixed="right">
<template scope="scope">
<el-button type="danger" class="filter-item" size="mini" icon="el-icon-delete"
@click.native.prevent="deleteRow(scope.$index, form.tableData)"/>
<el-button
type="danger"
class="filter-item"
size="mini"
icon="el-icon-delete"
@click.native.prevent="deleteRow(scope.$index, form.tableData)"
/>
</template>
</el-table-column>
</el-table>
<AddDtl :dialog-show.sync="dtlShow" @tableChanged="tableChanged"/>
<AddDtl :dialog-show.sync="dtlShow" @tableChanged="tableChanged" />
</el-dialog>
</template>
<script>
import CRUD, {crud, form} from '@crud/crud'
import CRUD, { crud, form } from '@crud/crud'
import AddDtl from '@/views/wms/storage_manage/semiproduct/semiproductCheck/StructIvt'
import check from '@/views/wms/storage_manage/semiproduct/semiproductCheck/check'
import crudStorattr from "@/views/wms/storage_manage/basedata/basedata";
import crudStorattr from '@/views/wms/storage_manage/basedata/basedata'
const defaultForm = {
check_code: '',
@@ -176,7 +199,7 @@ const defaultForm = {
}
export default {
name: 'AddDialog',
components: {AddDtl},
components: { AddDtl },
mixins: [crud(), form(defaultForm)],
props: {
dialogShow: {
@@ -195,13 +218,13 @@ export default {
storlist: [],
rules: {
stor_id: [
{required: true, message: '仓库不能为空', trigger: 'blur'}
{ required: true, message: '仓库不能为空', trigger: 'blur' }
],
check_type: [
{required: true, message: '业务类型不能为空', trigger: 'blur'}
{ required: true, message: '业务类型不能为空', trigger: 'blur' }
],
workshop_id: [
{required: true, message: '车间不能为空', trigger: 'blur'}
{ required: true, message: '车间不能为空', trigger: 'blur' }
]
}
}
@@ -216,7 +239,7 @@ export default {
methods: {
open() {
// 查询原材料库的仓库
crudStorattr.getStor({'stor_type': '2'}).then(res => {
crudStorattr.getStor({ 'stor_type': '2' }).then(res => {
this.storlist = res.content
})
},
@@ -224,7 +247,7 @@ export default {
this.$emit('AddChanged')
},
[CRUD.HOOK.afterToEdit]() {
check.getCheckDtl({'check_id': this.form.check_id}).then(res => {
check.getCheckDtl({ 'check_id': this.form.check_id }).then(res => {
this.form.tableData = res
// 将明细变成不可编辑
for (let i = 0; i < this.form.tableData.length; i++) {
@@ -235,7 +258,7 @@ export default {
})
},
[CRUD.HOOK.afterToView]() {
check.getCheckDtl({'check_id': this.form.check_id}).then(res => {
check.getCheckDtl({ 'check_id': this.form.check_id }).then(res => {
this.form.tableData = res
// 将明细变成不可编辑
for (let i = 0; i < this.form.tableData.length; i++) {

View File

@@ -121,8 +121,8 @@
</template>
</el-table-column>
<el-table-column prop="material_name" label="物料名称" align="center" />
<el-table-column prop="base_qty" label="重量" :formatter="crud.formatNum0" align="center" />
<el-table-column show-overflow-tooltip prop="fac_qty" label="盘点重量" width="160" align="center">
<el-table-column prop="base_qty" label="重量/数量" :formatter="crud.formatNum0" align="center" />
<el-table-column show-overflow-tooltip prop="fac_qty" label="盘点结果" width="160" align="center">
<template scope="scope">
<el-input-number v-show="isShow(scope.$index, scope.row,2)" v-model="scope.row.fac_qty" :precision="3" :min="0" />
<span v-show="isShow(scope.$index, scope.row,4)">{{ scope.row.fac_qty }}</span>
@@ -152,7 +152,7 @@
<script>
import CRUD, { crud } from '@crud/crud'
import check from '@/views/wms/storage_manage/semiproduct/semiproductCheck/check'
import crudStorattr from "@/views/wms/storage_manage/basedata/basedata";
import crudStorattr from '@/views/wms/storage_manage/basedata/basedata'
import MaterDialog from '@/views/wms/pub/MaterDialog'
export default {
@@ -215,7 +215,7 @@ export default {
// 将明细变成不可编辑
for (let i = 0; i < this.tableData.length; i++) {
const row = this.tableData[i]
this.$set(row,'edit',false)
this.$set(row, 'edit', false)
if (row.status > '04') {
row.edit = true
}
@@ -381,7 +381,7 @@ export default {
this.dialogVisible = false
})
},
issueTask(){
issueTask() {
if (this.nowrow === null) {
this.crud.notify('请先选中一条已存在的库存明细!', CRUD.NOTIFICATION_TYPE.INFO)
return false
@@ -393,7 +393,7 @@ export default {
// 将明细变成不可编辑
for (let i = 0; i < this.tableData.length; i++) {
const row = this.tableData[i]
this.$set(row,'edit',false)
this.$set(row, 'edit', false)
if (row.status > '04') {
row.edit = true
}

View File

@@ -116,8 +116,8 @@
<el-table-column show-overflow-tooltip prop="storagevehicle_code" label="载具号" />
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" width="190" align="center" />
<el-table-column show-overflow-tooltip prop="material_name" label="物料名称" align="center" />
<el-table-column prop="base_qty" label="重量" align="center" />
<el-table-column show-overflow-tooltip prop="fac_qty" label="盘点重量" :formatter="crud.formatNum0" width="160" align="center" />
<el-table-column prop="base_qty" label="重量/数量" align="center" />
<el-table-column show-overflow-tooltip prop="fac_qty" label="盘点结果" :formatter="crud.formatNum0" width="160" align="center" />
<el-table-column prop="qty_unit_name" label="计量单位" align="center" />
<el-table-column prop="check_result" label="盘点结果" align="center" :formatter="check_resultFormat" />
<el-table-column prop="status" label="状态" align="center" :formatter="bill_statusFormat" />
@@ -129,7 +129,7 @@
<script>
import { crud } from '@crud/crud'
import check from '@/views/wms/storage_manage/semiproduct/semiproductCheck/check'
import crudStorattr from "@/views/wms/storage_manage/basedata/basedata";
import crudStorattr from '@/views/wms/storage_manage/basedata/basedata'
import ReCheckDialog from '@/views/wms/storage_manage/rawproduct/rawproductCheck/ReCheckDialog'
export default {
@@ -230,7 +230,7 @@ export default {
})
},
getOutBillDtl() {
check.getCheckDtl({ 'check_id': this.form.check_id,'check_result': '-1'}).then(res => {
check.getCheckDtl({ 'check_id': this.form.check_id, 'check_result': '-1' }).then(res => {
this.tableData = res
})
}

View File

@@ -117,7 +117,7 @@
</el-table-column>
<el-table-column prop="pcsn" label="批次" align="center" />
<el-table-column prop="ivt_qty" label="库存重量" :formatter="crud.formatNum3" align="center" />
<el-table-column show-overflow-tooltip prop="ivt_qty_ck" label="盘点重量" width="160" align="center">
<el-table-column show-overflow-tooltip prop="ivt_qty_ck" label="盘点结果" width="160" align="center">
<template scope="scope">
<el-input-number v-show="!scope.row.edit" v-model="scope.row.ivt_qty_ck" :precision="3" :min="0" />
<span v-show="scope.row.edit">{{ scope.row.ivt_qty_ck }}</span>
@@ -138,7 +138,7 @@
<el-button type="primary" @click="process1">确认</el-button>
</span>
<MaterDialog :dialog-show.sync="materShow" @tableChanged2="tableChanged2" />
<!-- <BucketDialog :dialog-show.sync="bucketShow" @bucketChange="tableChanged2" />-->
<!-- <BucketDialog :dialog-show.sync="bucketShow" @bucketChange="tableChanged2" />-->
</el-dialog>
</template>