rev: 成品出入库修改

This commit is contained in:
2023-06-17 09:24:46 +08:00
parent 3b1e1a7194
commit 804ecd9b74
24 changed files with 529 additions and 126 deletions

View File

@@ -1,6 +1,8 @@
package org.nl.wms.mps_manage.ordermanage.service.saleOrder.dao;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;
@@ -24,7 +26,8 @@ public class MpsSaleOrder implements Serializable {
/**
* 销售单标识
*/
private Long sale_id;
@TableId
private String sale_id;
/**
* 销售单号
@@ -44,7 +47,7 @@ public class MpsSaleOrder implements Serializable {
/**
* 物料标识
*/
private Long material_id;
private String material_id;
/**
* 状态
@@ -64,7 +67,7 @@ public class MpsSaleOrder implements Serializable {
/**
* 客户标识
*/
private Long cust_id;
private String cust_id;
/**
* 客户编码
@@ -79,7 +82,7 @@ public class MpsSaleOrder implements Serializable {
/**
* 计量单位标识
*/
private Long qty_unit_id;
private String qty_unit_id;
/**
* 计划交期
@@ -89,7 +92,7 @@ public class MpsSaleOrder implements Serializable {
/**
* 创建人
*/
private Long create_id;
private String create_id;
/**
* 创建人姓名
@@ -104,7 +107,7 @@ public class MpsSaleOrder implements Serializable {
/**
* 提交人
*/
private Long audit_optid;
private String audit_optid;
/**
* 提交时间
@@ -119,7 +122,7 @@ public class MpsSaleOrder implements Serializable {
/**
* 确认人
*/
private Long confirm_optid;
private String confirm_optid;
/**
* 确认人姓名
@@ -144,7 +147,7 @@ public class MpsSaleOrder implements Serializable {
/**
* 车间标识
*/
private Long workshop_id;
private String workshop_id;
/**
* 生产数量

View File

@@ -29,6 +29,8 @@ public class IostorInvQuery extends BaseQuery<StIvtIostorinvCp> {
private String io_type;
private String product_area;
private Boolean is_delete = false;

View File

@@ -29,8 +29,6 @@ import org.nl.wms.masterdata_manage.service.vehicle.IMdPbBucketrecordService;
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleextService;
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleinfoService;
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbBucketrecord;
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleext;
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleinfo;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstorattr;
@@ -40,7 +38,6 @@ import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
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.CHANGE_BILL_TYPE_ENUM;
import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvCpOutService;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdisCpService;
@@ -209,6 +206,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
List<StIvtIostorinvdtlCp> dtlDaoList = new ArrayList<>();
if (whereJson.getBoolean("type")) {
// 全部分配
dtlDaoList = iostorinvdtlCpService.list(
new QueryWrapper<StIvtIostorinvdtlCp>().lambda()
.eq(StIvtIostorinvdtlCp::getIostorinv_id, whereJson.getString("iostorinv_id"))
@@ -216,6 +214,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
.orderByAsc(StIvtIostorinvdtlCp::getSeq_no)
);
} else {
// 单条分配
dtlDaoList = iostorinvdtlCpService.list(
new QueryWrapper<StIvtIostorinvdtlCp>().lambda()
.eq(StIvtIostorinvdtlCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id"))
@@ -237,8 +236,8 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
param.put("stor_id", whereJson.getString("stor_id"));
param.put("sect_id", whereJson.getString("sect_id"));
param.put("material_id", dtlDao.getMaterial_id());
param.put("sale_id", dtlDao.getSource_billdtl_id());
if (ObjectUtil.isEmpty(dtlDao.getSource_billdtl_id())) {
param.put("sale_id", dtlDao.getBase_billdtl_id());
if (ObjectUtil.isEmpty(dtlDao.getBase_billdtl_id())) {
param.put("rule_type", RuleUtil.PRODUCTION_OUT_2);
} else {
param.put("rule_type", RuleUtil.PRODUCTION_OUT_1);
@@ -295,12 +294,14 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
// 1.找出所有分配
List<StIvtIostorinvdisCp> disDaoList = new ArrayList<>();
if (whereJson.getBoolean("type")) {
// 全部取消
disDaoList = iostorinvdisCpService.list(
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id"))
.orderByAsc(StIvtIostorinvdisCp::getSeq_no)
);
} else {
// 单条取消
disDaoList = iostorinvdisCpService.list(
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id"))
@@ -397,11 +398,15 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
BussEventMulticaster.Publish(event);
// 3.更新分配表
iostorinvdisCpService.updateById(
disDao.setPoint_id(pointDao.getPoint_id())
.setPoint_code(pointDao.getPoint_code())
.setPoint_name(pointDao.getPoint_name())
.setWork_status(IOSEnum.WORK_STATUS.code("生成"))
iostorinvdisCpService.update(
new UpdateWrapper<StIvtIostorinvdisCp>().lambda()
.set(StIvtIostorinvdisCp::getPoint_id, pointDao.getPoint_id())
.set(StIvtIostorinvdisCp::getPoint_code, pointDao.getPoint_code())
.set(StIvtIostorinvdisCp::getPoint_name, pointDao.getPoint_name())
.set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("生成"))
.set(StIvtIostorinvdisCp::getTask_id, disDao.getTask_id())
.eq(StIvtIostorinvdisCp::getIostorinv_id, disDao.getIostorinv_id())
.eq(StIvtIostorinvdisCp::getStoragevehicle_code, disDao.getStoragevehicle_code())
);
}
@@ -458,21 +463,12 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
StIvtIostorinvdtlCp dtlDao = dtlDaoList.stream()
.filter(row -> row.getIostorinvdtl_id().equals(dao.getIostorinvdtl_id()))
.findAny().get();
iStIvtStructivtCpService.UpdateIvt(ivtDataParam(dao,ChangeIvtUtil.SUBFROZEN_SUBIVT_QTY,dtlDao.getSource_billdtl_id()));
iStIvtStructivtCpService.UpdateIvt(ivtDataParam(dao,ChangeIvtUtil.SUBFROZEN_SUBIVT_QTY,dtlDao.getBase_billdtl_id()));
// 3解锁起点
// 3解锁起点 / 将此托盘上的库存全部出掉
unLockNext(dao.getStruct_id());
// 4) 更新载具扩展属性
iMdPbStoragevehicleextService.update(
new MdPbStoragevehicleext()
.setMaterial_id("")
.setStorage_qty(BigDecimal.valueOf(0)),
new QueryWrapper<MdPbStoragevehicleext>().lambda()
.eq(MdPbStoragevehicleext::getStoragevehicle_code,dao.getStoragevehicle_code())
);
// 5) 更新箱记录表为出库
// 4) 更新箱记录表为出库
iMdPbBucketrecordService.update(
MdPbBucketrecord.builder()
.status(MasterEnum.BOX_STATUS.code("出库"))
@@ -480,7 +476,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
new QueryWrapper<MdPbBucketrecord>().lambda()
.eq(MdPbBucketrecord::getStoragevehicle_code, dao.getStoragevehicle_code())
.eq(MdPbBucketrecord::getMaterial_id, dao.getMaterial_id())
.eq(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code(""))
.eq(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code(""))
);
}
@@ -491,7 +487,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
JSONObject param = new JSONObject();
param.put("material_id", whereJson.getString("material_id"));
param.put("stor_id", whereJson.getString("stor_id"));
if (ObjectUtil.isNotEmpty(whereJson.getString("source_billdtl_id"))) param.put("sale_id", whereJson.getString("source_billdtl_id"));
if (ObjectUtil.isNotEmpty(whereJson.getString("base_billdtl_id"))) param.put("sale_id", whereJson.getString("base_billdtl_id"));
if (ObjectUtil.isNotEmpty(whereJson.getString("search"))) param.put("remark", whereJson.getString("search"));
if (ObjectUtil.isNotEmpty(whereJson.getString("sect_id"))) param.put("sect_id", whereJson.getString("sect_id"));
@@ -550,7 +546,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
String status = form.getString("status");
StIvtIostorinvdisCp disDao = iostorinvdisCpService.getOne(new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getTask_id, task_id));
.eq(StIvtIostorinvdisCp::getTask_id, task_id),false);
// 更新任务状态为完成
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
@@ -567,12 +563,23 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
.eq(StIvtIostorinvdisCp::getTask_id, task_id)
.set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("完成"))
);
// 调用分配完成
JSONObject mst_jo = new JSONObject();
mst_jo.put("iostorinvdtl_id", disDao.getIostorinvdtl_id());
mst_jo.put("iostorinv_id", disDao.getIostorinv_id());
mst_jo.put("is_out", true);
iostorinvdisCpService.confirm(mst_jo);
Map<String, List<StIvtIostorinvdisCp>> collect = iostorinvdisCpService.list(
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getTask_id, task_id)
)
.stream()
.collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id));
for(List<StIvtIostorinvdisCp> list : collect.values()) {
StIvtIostorinvdisCp disDao_2 = list.get(0);
JSONObject mst_jo = new JSONObject();
mst_jo.put("iostorinvdtl_id", disDao_2.getIostorinvdtl_id());
mst_jo.put("iostorinv_id", disDao_2.getIostorinv_id());
mst_jo.put("is_out", true);
iostorinvdisCpService.confirm(mst_jo);
}
} else if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
// 更新任务为执行中
@@ -609,12 +616,15 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
);
// 2.更新分配
disDao.setTask_id("");
disDao.setPoint_code("");
disDao.setPoint_id("");
disDao.setPoint_name("");
disDao.setWork_status(IOSEnum.WORK_STATUS.code("未生成"));
iostorinvdisCpService.updateById(disDao);
iostorinvdisCpService.update(
new UpdateWrapper<StIvtIostorinvdisCp>().lambda()
.set(StIvtIostorinvdisCp::getTask_id, "")
.set(StIvtIostorinvdisCp::getPoint_id, "")
.set(StIvtIostorinvdisCp::getPoint_code,"")
.set(StIvtIostorinvdisCp::getPoint_name,"")
.set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("未生成"))
.eq(StIvtIostorinvdisCp::getTask_id, disDao.getTask_id())
);
}
@Override
@@ -719,6 +729,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
stIvtIostorinvCp.setStor_id(bsrealDao.getStor_id());
stIvtIostorinvCp.setStor_code(bsrealDao.getStor_code());
stIvtIostorinvCp.setStor_name(bsrealDao.getStor_name());
stIvtIostorinvCp.setProduct_area(bsrealDao.getProduct_area());
stIvtIostorinvCp.setTotal_qty(whereJson.getBigDecimal("total_qty"));
stIvtIostorinvCp.setDetail_count(rows.size());
stIvtIostorinvCp.setRemark(whereJson.getString("remark"));
@@ -818,7 +829,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
param.put("ivt_level", dao.getIvt_level());
param.put("quality_scode", dao.getQuality_scode());
param.put("change_qty", dao.getReal_qty());
param.put("sale_id", dtlDao.getSource_billdtl_id());
param.put("sale_id", dtlDao.getBase_billdtl_id());
param.put("change_type", type);
iStIvtStructivtCpService.UpdateIvt(param);
@@ -852,26 +863,30 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
public void unLockNext(String struct_id) {
StIvtStructattr attrDao = iStIvtStructattrService.getById(struct_id);
if (ObjectUtil.isEmpty(attrDao)) throw new BadRequestException("仓位不存在!");
// 判断载具是否超限
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getOne(
new QueryWrapper<MdPbStoragevehicleinfo>().lambda()
.eq(MdPbStoragevehicleinfo::getStoragevehicle_code, attrDao.getStoragevehicle_code())
);
if (StrUtil.equals(vehicleDao.getOverstruct_type(),IOSEnum.IS_USED.code(""))) {
if (StrUtil.equals(attrDao.getIs_zdepth(),IOSEnum.IS_USED.code(""))) {
// 解锁超限货位
iStIvtStructattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda()
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(StIvtStructattr::getControl_code,attrDao.getStruct_id())
.eq(StIvtStructattr::getStruct_id,attrDao.getControl_code())
);
}
// 将此托盘上的所有库存删除
iStIvtStructivtCpService.remove(
new QueryWrapper<StIvtStructivtCp>().lambda()
.eq(StIvtStructivtCp::getStruct_id, struct_id)
.eq(StIvtStructivtCp::getFrozen_qty, 0)
);
attrDao.setInv_code("");
attrDao.setInv_type("");
attrDao.setInv_id("");
attrDao.setIs_zdepth("");
attrDao.setStoragevehicle_code("");
attrDao.setLock_type(IOSEnum.LOCK_TYPE.code("未锁定"));
iStIvtStructattrService.updateById(attrDao);

View File

@@ -38,6 +38,8 @@ import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattr
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstorattr;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.mps_manage.ordermanage.service.saleOrder.IMpsSaleOrderService;
import org.nl.wms.mps_manage.ordermanage.service.saleOrder.dao.MpsSaleOrder;
import org.nl.wms.product_manage.sch.manage.TaskStatusEnum;
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
@@ -118,6 +120,9 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
@Autowired
protected IMdPbBucketrecordService iMdPbBucketrecordService; // 包装箱记录表服务
@Autowired
protected IMpsSaleOrderService iMpsSaleOrderService; // 销售单服务
@Override
public Object pageQuery(IostorInvQuery query, PageQuery page) {
// 查询条件
@@ -140,6 +145,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
// 调用主表 插入/更新方法
StIvtIostorinvCp stIvtIostorinvCp = packageMstForm(new StIvtIostorinvCp(), form, false);
// 插入主表
this.save(stIvtIostorinvCp);
@@ -394,7 +400,6 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
StIvtStructattr attrDao = new StIvtStructattr();
// 1.根据仓库、库区找出一个仓位
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getById(disDao.getStoragevehicle_id());
if (ObjectUtil.isEmpty(struct_id)) {
/* 自动分配 */
@@ -409,7 +414,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
} else {
/* 手动分配 */
if (StrUtil.equals(vehicleDao.getOverstruct_type(),IOSEnum.IS_USED.code("")))
if (StrUtil.equals(whereJson.getString("vehicle_overstruct_type"),IOSEnum.VEHICLE_OVER_TYPE.code("横向超")))
throw new BadRequestException("载具超限请自动分配!");
// 查出对应仓位
@@ -431,6 +436,9 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
attrDao.setInv_type(IOSEnum.IO_TYPE.code("入库"));
attrDao.setInv_id(mstDao.getIostorinv_id());
attrDao.setInv_code(mstDao.getBill_code());
if (StrUtil.equals(whereJson.getString("vehicle_overstruct_type"),IOSEnum.VEHICLE_OVER_TYPE.code("横向超"))) {
attrDao.setIs_zdepth(IOSEnum.IS_USED.code(""));
}
iStIvtStructattrService.updateById(attrDao);
// 4.更新库存
@@ -440,7 +448,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
.eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
)
.stream()
.collect(Collectors.groupingBy(StIvtIostorinvdisCp::getMaterial_id));
.collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id));
for (List<StIvtIostorinvdisCp> list : collect.values()) {
@@ -454,8 +462,10 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(disDao_1.getIostorinvdtl_id());
iStIvtStructivtCpService.UpdateIvt(ivtDataParam(disDao_1,ChangeIvtUtil.ADDWAREHOUSING_QTY,dtlDao.getBase_billdtl_id()));
JSONObject param = ivtDataParam(disDao_1, ChangeIvtUtil.ADDWAREHOUSING_QTY, dtlDao.getBase_billdtl_id());
param.put("product_area", mstDao.getProduct_area());
param.put("stor_id", mstDao.getStor_id());
iStIvtStructivtCpService.UpdateIvt(param);
}
}
@@ -502,28 +512,32 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
.lt(SchBaseTask::getTask_status, TaskStatusEnum.ISSUE.getCode())
);
// 判断载具是否超限
StIvtStructattr attrDao = iStIvtStructattrService.getById(disDao.getStruct_id());
if (StrUtil.equals(attrDao.getIs_zdepth(),IOSEnum.IS_USED.code(""))) {
// 解锁超限货位
iStIvtStructattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda()
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(StIvtStructattr::getStruct_id,attrDao.getControl_code())
);
}
// 解锁货位
iStIvtStructattrService.update(
new StIvtStructattr()
.setLock_type(IOSEnum.LOCK_TYPE.code("未锁定"))
.setInv_code("")
.setInv_type("")
.setIs_zdepth("")
.setInv_id(""),
new QueryWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_code, disDao.getStruct_code())
.eq(StIvtStructattr::getStruct_id, disDao.getStruct_id())
);
// 判断载具是否超限
if (StrUtil.equals(whereJson.getString("vehicle_overstruct_type"),IOSEnum.VEHICLE_OVER_TYPE.code("横向超"))) {
// 解锁超限货位
iStIvtStructattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda()
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(StIvtStructattr::getControl_code,disDao.getStruct_id())
);
}
// 更新库存
Map<String, List<StIvtIostorinvdisCp>> collect = iostorinvdisCpService.list(
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
@@ -531,7 +545,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
.eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
)
.stream()
.collect(Collectors.groupingBy(StIvtIostorinvdisCp::getMaterial_id));
.collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id));
for (List<StIvtIostorinvdisCp> list : collect.values()) {
@@ -543,7 +557,9 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
StIvtIostorinvdisCp disDao_1 = list.get(0);
disDao_1.setPlan_qty(qty);
iStIvtStructivtCpService.UpdateIvt(ivtDataParam(disDao_1,ChangeIvtUtil.SUBWAREHOUSING_QTY,null));
StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(disDao_1.getIostorinvdtl_id());
iStIvtStructivtCpService.UpdateIvt(ivtDataParam(disDao_1,ChangeIvtUtil.SUBWAREHOUSING_QTY,dtlDao.getBase_billdtl_id()));
}
@@ -715,12 +731,24 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
}
// 2更新库存
iStIvtStructivtCpService.UpdateIvt(ivtDataParam(dao,ChangeIvtUtil.SUBWAREHOUSING_ADDIVT_QTY,null));
StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(dao.getIostorinvdtl_id());
iStIvtStructivtCpService.UpdateIvt(ivtDataParam(dao,ChangeIvtUtil.SUBWAREHOUSING_ADDIVT_QTY,dtlDao.getBase_billdtl_id()));
// 3解锁终点
unLockNext(dao.getStruct_id(),dao.getStoragevehicle_code());
}
// 6.更新销售单生产数量
for (StIvtIostorinvdtlCp dao : dtlDaoList) {
MpsSaleOrder orderDao = iMpsSaleOrderService.getById(dao.getBase_billdtl_id());
if (ObjectUtil.isNotEmpty(orderDao)) {
orderDao.setProduct_qty(NumberUtil.add(orderDao.getProduct_qty(),dao.getAssign_qty()));
iMpsSaleOrderService.updateById(orderDao);
}
}
}
@Override
@@ -873,6 +901,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
stIvtIostorinvCp.setStor_id(bsrealDao.getStor_id());
stIvtIostorinvCp.setStor_code(bsrealDao.getStor_code());
stIvtIostorinvCp.setStor_name(bsrealDao.getStor_name());
stIvtIostorinvCp.setProduct_area(bsrealDao.getProduct_area());
stIvtIostorinvCp.setTotal_qty(whereJson.getBigDecimal("total_qty"));
stIvtIostorinvCp.setDetail_count(rows.size());
stIvtIostorinvCp.setRemark(whereJson.getString("remark"));

View File

@@ -81,14 +81,14 @@ public class StIvtIostorinvdtlCpServiceImpl extends ServiceImpl<StIvtIostorinvdt
.eq(MdMeMaterialbase::getMaterial_code, json.getString("material_code"))
);
if (ObjectUtil.isNotEmpty(row.getSource_bill_code())) {
if (ObjectUtil.isNotEmpty(row.getBase_bill_code())) {
MpsSaleOrder orderDao = iMpsSaleOrderService.getOne(
new QueryWrapper<MpsSaleOrder>().lambda()
.eq(MpsSaleOrder::getSale_code, row.getBase_bill_code())
.eq(MpsSaleOrder::getSeq_no, row.getBase_bill_table())
);
if (ObjectUtil.isEmpty(orderDao))
throw new BadRequestException("销售单号错误!");
throw new BadRequestException("销售单不存在!");
row.setBase_billdtl_id(orderDao.getSale_id().toString());
row.setBase_bill_code(orderDao.getSale_code());

View File

@@ -6,6 +6,7 @@
SELECT
der.*,
mater.material_name,
mater.material_spec,
unit.unit_name AS qty_unit_name
FROM
ST_IF_DeliveryOrder_CP der
@@ -18,16 +19,16 @@
and der.deliver_code = #{query.deliver_code}
</if>
<if test="query.material_code != null">
and der.material_code >= #{query.material_code}
and der.material_code like #{query.material_code}
</if>
<if test="query.status != null">
and der.status >= #{query.status}
and der.status = #{query.status}
</if>
<if test="query.cust_code != null">
and der.cust_code >= #{query.cust_code}
and der.cust_code like #{query.cust_code}
</if>
<if test="query.sale_code != null">
and der.sale_code >= #{query.sale_code}
and der.sale_code like #{query.sale_code}
</if>
</where>

View File

@@ -8,7 +8,7 @@
FROM
ST_IVT_StructIvt_CP ivt
LEFT JOIN st_ivt_structattr attr ON ivt.struct_id = attr.struct_id
WHERE attr.lock_type = '0'
WHERE ivt.canuse_qty > 0 and ivt.frozen_qty = 0
<if test="stor_id != null and stor_id != ''">
and attr.stor_id = #{stor_id}
</if>
@@ -34,6 +34,7 @@
attr.storagevehicle_code,
mater.material_code,
mater.material_name,
mater.material_spec,
unit.unit_name AS qty_unit_name
FROM
ST_IVT_StructIvt_CP ivt
@@ -144,30 +145,48 @@
attr.sect_name,
ivt.struct_code,
ivt.struct_name,
mater.material_id,
mater.material_name,
mater.material_code,
mater.material_spec,
attr.storagevehicle_code,
ivt.canuse_qty,
ivt.frozen_qty,
ivt.ivt_qty,
ivt.warehousing_qty,
unit.unit_name,
ivt.instorage_time
unit.measure_unit_id,
ivt.instorage_time,
sale.sale_code,
sale.seq_no,
sale.sale_id,
sale.sale_type
FROM
st_ivt_structivt_cp ivt
LEFT JOIN md_me_materialbase mater ON ivt.material_id = mater.material_id
LEFT JOIN st_ivt_structattr attr ON attr.struct_id = ivt.struct_id
LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = ivt.qty_unit_id
LEFT JOIN mps_sale_order sale ON sale.sale_id = ivt.sale_id
<where>
1=1
<if test="query.material_code!= null and query.material_code != ''">
and mater.material_code LIKE #{query.material_code} or
(mater.material_name LIKE #{query.material_code})
(mater.material_name LIKE #{query.material_code}) or
(mater.material_spec LIKE #{query.material_code})
</if>
<if test="query.struct_code!= null and query.struct_code != ''">
and attr.struct_code LIKE #{query.struct_code} or
(attr.struct_name LIKE #{query.struct_code})
</if>
<if test="query.sale_code!= null and query.sale_code != ''">
and sale.sale_code LIKE #{query.sale_code}
</if>
<if test="query.seq_no!= null and query.seq_no != ''">
and sale.seq_no LIKE #{query.seq_no}
</if>
<if test="query.lock_type!= null and query.lock_type != ''">
and attr.lock_type = #{query.lock_type}
</if>
<if test="query.start_time!= null and query.start_time != ''">
and ivt.instorage_time &gt;= #{query.start_time}
</if>

View File

@@ -18,6 +18,12 @@ public class CpIvtQuery extends BaseQuery<StIvtStructivtCp> {
private String material_code;
private String sale_code;
private String seq_no;
private String lock_type;
@Override
public void paramMapping() {
super.doP.put("struct_code", QParam.builder().k(new String[]{"struct_code"}).type(QueryTEnum.LK).build());

View File

@@ -145,7 +145,7 @@ public class StIvtStructivtCpServiceImpl extends ServiceImpl<StIvtStructivtCpMap
new QueryWrapper<StIvtStructivtCp>().lambda()
.eq(StIvtStructivtCp::getStruct_id, json.getString("struct_id"))
.eq(StIvtStructivtCp::getMaterial_id, json.getString("material_id"))
.eq(StIvtStructivtCp::getPcsn, json.getString("pcsn"))
.eq(StIvtStructivtCp::getSale_id, json.getString("sale_id"))
);
if (ObjectUtil.isEmpty(ivtDao)) {
@@ -170,6 +170,9 @@ public class StIvtStructivtCpServiceImpl extends ServiceImpl<StIvtStructivtCpMap
dao.setWarehousing_qty(json.getBigDecimal("change_qty"));
dao.setQty_unit_id(materDao.getBase_unit_id());
dao.setSale_id(json.getString("sale_id"));
dao.setProduct_area(json.getString("product_area"));
dao.setStor_id(json.getString("stor_id"));
dao.setUnit_weight(materDao.getNet_weight());
this.save(dao);
} else {
@@ -189,7 +192,7 @@ public class StIvtStructivtCpServiceImpl extends ServiceImpl<StIvtStructivtCpMap
new QueryWrapper<StIvtStructivtCp>().lambda()
.eq(StIvtStructivtCp::getStruct_id, json.getString("struct_id"))
.eq(StIvtStructivtCp::getMaterial_id, json.getString("material_id"))
.eq(StIvtStructivtCp::getPcsn, json.getString("pcsn"))
.eq(StIvtStructivtCp::getSale_id, json.getString("sale_id"))
);
if (ObjectUtil.isEmpty(ivtDao)) {
@@ -221,7 +224,7 @@ public class StIvtStructivtCpServiceImpl extends ServiceImpl<StIvtStructivtCpMap
new QueryWrapper<StIvtStructivtCp>().lambda()
.eq(StIvtStructivtCp::getStruct_id, json.getString("struct_id"))
.eq(StIvtStructivtCp::getMaterial_id, json.getString("material_id"))
.eq(StIvtStructivtCp::getPcsn, json.getString("pcsn"))
.eq(StIvtStructivtCp::getSale_id, json.getString("sale_id"))
);
if (ObjectUtil.isEmpty(ivtDao)) {

View File

@@ -16,7 +16,7 @@ public class RuleUtil {
/*
* 出库分配:
* 根据 仓库、库区、物料、销售单找库存
* 根据 仓库、库区、物料、销售单、行号找库存
*/
public static final String PRODUCTION_OUT_1 = "out_1";

View File

@@ -169,7 +169,7 @@
<el-input v-model="form.tableData[scope.$index].remark" size="small" />
</template>
</el-table-column>
<el-table-column show-overflow-tooltip prop="base_bill_type" label="源单类型" />
<el-table-column show-overflow-tooltip prop="base_bill_type" label="源单类型" :formatter="formatBaseType" />
<el-table-column show-overflow-tooltip prop="base_bill_code" label="源单号">
<template slot-scope="scope">
<el-input
@@ -251,7 +251,7 @@ export default {
name: 'AddDialog',
components: { MaterDtl, AddDtl },
mixins: [crud(), form(defaultForm)],
dicts: ['IO_BILL_STATUS', 'ST_INV_IN_TYPE', 'ST_QUALITY_SCODE', 'bill_type', 'product_area'],
dicts: ['IO_BILL_STATUS', 'ST_INV_IN_TYPE', 'ST_QUALITY_SCODE', 'bill_type', 'product_area', 'PCS_SAL_TYPE'],
props: {
dialogShow: {
type: Boolean,
@@ -371,7 +371,7 @@ export default {
tableChanged2(row) {
let same_mater = true
this.form.tableData.forEach((item) => {
if (item.source_bill_code === row.sale_code) {
if (item.base_bill_code === row.sale_code && item.base_bill_table === row.seq_no) {
same_mater = false
}
})
@@ -380,7 +380,8 @@ export default {
data.material_id = row.material_id
data.material_code = row.material_code
data.material_name = row.material_name
data.plan_qty = row.product_qty
data.material_spec = row.material_spec
data.plan_qty = row.sale_qty
data.qty_unit_name = row.qty_unit_name
data.qty_unit_id = row.qty_unit_id
data.base_billdtl_id = row.sale_id
@@ -413,6 +414,9 @@ export default {
this.form.tableData.forEach((item) => {
this.form.total_qty = parseFloat(this.form.total_qty) + parseFloat(item.plan_qty)
})
},
formatBaseType(row) {
return this.dict.label.PCS_SAL_TYPE[row.base_bill_type]
}
}
}

View File

@@ -70,6 +70,7 @@
</template>
</el-table-column>
<el-table-column show-overflow-tooltip width="150" prop="sale_code" label="销售单号" />
<el-table-column show-overflow-tooltip width="150" prop="seq_no" label="行号" />
<el-table-column show-overflow-tooltip width="150" prop="sale_type" label="销售单类型" :formatter="formterType" />
<el-table-column show-overflow-tooltip width="150" prop="status" label="状态" :formatter="formterStatus" />
<el-table-column show-overflow-tooltip width="150" prop="material_code" label="物料编码" />

View File

@@ -59,8 +59,9 @@
<el-table-column show-overflow-tooltip prop="assign_qty" :formatter="crud.formatNum3" label="已分配数量" align="center" />
<el-table-column show-overflow-tooltip prop="unassign_qty" :formatter="crud.formatNum3" label="未分配数量" align="center" />
<el-table-column show-overflow-tooltip prop="qty_unit_name" label="单位" align="center" />
<el-table-column show-overflow-tooltip prop="source_bill_type" label="源单类型" align="center" />
<el-table-column show-overflow-tooltip prop="source_bill_code" label="源单号" align="center" />
<el-table-column show-overflow-tooltip prop="base_bill_type" label="源单类型" :formatter="formatBaseType" align="center" />
<el-table-column show-overflow-tooltip prop="base_bill_code" label="源单号" align="center" />
<el-table-column show-overflow-tooltip prop="base_bill_table" label="源单行号" align="center" />
</el-table>
</el-card>
@@ -268,7 +269,7 @@ export default {
name: 'DivDialog',
components: { StructDiv, AddBox },
mixins: [crud()],
dicts: ['IO_BILL_STATUS', 'VEHICLE_OVER_TYPE'],
dicts: ['IO_BILL_STATUS', 'VEHICLE_OVER_TYPE', 'PCS_SAL_TYPE'],
props: {
dialogShow: {
type: Boolean,
@@ -596,6 +597,7 @@ export default {
this.dis_row.stor_id = this.stor_id.toString()
this.dis_row.sect_id = this.sect_id.toString()
this.dis_row.vehicle_overstruct_type = this.form.vehicle_overstruct_type
crudProductIn.divStruct(this.dis_row).then(res => {
crudProductIn.getIosInvDtl({ 'iostorinv_id': this.dis_row.iostorinv_id }).then(res => {
this.openParam = res
@@ -649,6 +651,9 @@ export default {
this.crud.notify('操作成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
})
})
},
formatBaseType(row) {
return this.dict.label.PCS_SAL_TYPE[row.base_bill_type]
}
}
}

View File

@@ -42,6 +42,9 @@
<el-table-column show-overflow-tooltip prop="assign_qty" :formatter="crud.formatNum3" label="已分配数量" align="center" />
<el-table-column show-overflow-tooltip prop="unassign_qty" :formatter="crud.formatNum3" label="未分配数量" align="center" />
<el-table-column show-overflow-tooltip prop="qty_unit_name" label="重量单位" align="center" />
<el-table-column show-overflow-tooltip prop="base_bill_type" label="源单类型" :formatter="formatBaseType" align="center" />
<el-table-column show-overflow-tooltip prop="base_bill_code" label="源单号" align="center" />
<el-table-column show-overflow-tooltip prop="base_bill_table" label="源单行号" align="center" />
</el-table>
</el-card>
<!-- <el-card class="box-card" shadow="never" :body-style="{padding:'20px 20px 0 20px'}">
@@ -109,6 +112,8 @@
<el-table-column show-overflow-tooltip width="150" prop="material_name" label="物料名称" align="center" />
<el-table-column show-overflow-tooltip width="170" prop="pcsn" label="批次" align="center" />
<el-table-column show-overflow-tooltip prop="plan_qty" :formatter="crud.formatNum3" label="重量" align="center" />
<el-table-column show-overflow-tooltip prop="storagevehicle_code" label="托盘号" align="center" />
<el-table-column show-overflow-tooltip prop="bucketunique" label="箱号" align="center" />
<el-table-column show-overflow-tooltip prop="point_code1" label="起始位置" align="center" />
<el-table-column show-overflow-tooltip prop="point_code2" label="目的位置" align="center" />
<el-table-column show-overflow-tooltip prop="task_code" label="任务号" align="center" />
@@ -128,7 +133,7 @@ export default {
name: 'TaskDialog',
components: {},
mixins: [crud()],
dicts: ['SCH_TASK_TYPE_DTL', 'task_status'],
dicts: ['SCH_TASK_TYPE_DTL', 'task_status', 'PCS_SAL_TYPE'],
props: {
dialogShow: {
type: Boolean,
@@ -249,6 +254,9 @@ export default {
this.dis_del = true
this.dis_send = true
this.dis_confirm = true
},
formatBaseType(row) {
return this.dict.label.PCS_SAL_TYPE[row.base_bill_type]
}
}
}

View File

@@ -111,9 +111,12 @@
<el-table-column min-width="120" show-overflow-tooltip prop="material_code" label="物料编码" align="center" />
<el-table-column min-width="120" show-overflow-tooltip prop="material_name" label="物料名称" align="center" />
<el-table-column min-width="120" show-overflow-tooltip prop="material_spec" label="物料规格" align="center" />
<el-table-column prop="pcsn" label="订单号" width="150" align="center" />
<el-table-column prop="pcsn" label="批次" width="150" align="center" />
<el-table-column prop="plan_qty" :formatter="crud.formatNum3" label="重量" align="center" />
<el-table-column prop="qty_unit_name" label="单位" align="center" />
<el-table-column show-overflow-tooltip prop="base_bill_type" label="源单类型" :formatter="formatBaseType" align="center" />
<el-table-column show-overflow-tooltip prop="base_bill_code" label="源单号" align="center" />
<el-table-column show-overflow-tooltip prop="base_bill_table" label="源单行号" align="center" />
<el-table-column show-overflow-tooltip prop="remark" label="明细备注" align="center" />
</el-table>
</el-card>
@@ -136,7 +139,9 @@
<el-table-column min-width="120" show-overflow-tooltip prop="material_code" label="物料编码" align="center" />
<el-table-column min-width="120" show-overflow-tooltip prop="material_name" label="物料名称" align="center" />
<el-table-column min-width="120" show-overflow-tooltip prop="material_spec" label="物料规格" align="center" />
<el-table-column prop="pcsn" label="订单号" align="center" width="150" />
<el-table-column prop="pcsn" label="批次" align="center" width="150" />
<el-table-column show-overflow-tooltip prop="storagevehicle_code" label="托盘号" align="center" />
<el-table-column show-overflow-tooltip prop="bucketunique" label="箱号" align="center" />
<el-table-column prop="plan_qty" :formatter="crud.formatNum3" label="重量" align="center" />
<el-table-column prop="point_code1" label="起始位置" align="center" />
<el-table-column prop="point_code2" label="目的位置" align="center" />
@@ -157,7 +162,7 @@ export default {
name: 'ViewDialog',
components: { },
mixins: [crud()],
dicts: ['ST_INV_IN_TYPE', 'product_area', 'IO_BILL_STATUS', 'task_status', 'SCH_TASK_TYPE_DTL'],
dicts: ['ST_INV_IN_TYPE', 'product_area', 'IO_BILL_STATUS', 'task_status', 'SCH_TASK_TYPE_DTL', 'PCS_SAL_TYPE'],
props: {
dialogShow: {
type: Boolean,
@@ -254,6 +259,9 @@ export default {
},
formatType(row) {
return this.dict.label.SCH_TASK_TYPE_DTL[row.task_type]
},
formatBaseType(row) {
return this.dict.label.PCS_SAL_TYPE[row.base_bill_type]
}
}
}

View File

@@ -16,7 +16,7 @@
v-model="query.stor_id"
clearable
size="mini"
placeholder="单据状态"
placeholder="所属仓库"
class="filter-item"
@change="crud.toQuery"
>
@@ -48,7 +48,7 @@
</el-select>
</el-form-item>
<el-form-item label="生成方式">
<!--<el-form-item label="生成方式">
<el-select
v-model="query.bill_type"
clearable
@@ -65,7 +65,7 @@
:value="item.value"
/>
</el-select>
</el-form-item>
</el-form-item>-->
<el-form-item label="单据日期">
<el-date-picker
@@ -109,7 +109,7 @@
<el-form-item label="生产车间">
<el-select
v-model="query.product_code"
v-model="query.product_area"
clearable
size="mini"
placeholder="全部"
@@ -186,7 +186,7 @@
</el-table-column>
<el-table-column show-overflow-tooltip prop="bill_type" min-width="120" label="单据类型" :formatter="bill_typeFormat" />
<el-table-column show-overflow-tooltip prop="stor_name" label="仓库" min-width="120" />
<!-- <el-table-column prop="" label="生产车间" width="130" show-overflow-tooltip />-->
<el-table-column prop="product_area" label="生产车间" width="130" show-overflow-tooltip />
<el-table-column show-overflow-tooltip min-width="120" prop="biz_date" label="业务日期" />
<el-table-column label="总重量" align="center" prop="total_qty">
<template slot-scope="scope">

View File

@@ -41,22 +41,42 @@
/>
</el-form-item>
<el-form-item label="仓位">
<el-form-item label="仓位编码">
<el-input
v-model="query.struct_code"
size="mini"
clearable
placeholder="仓位"
placeholder="仓位编码、名称"
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<el-form-item label="物料">
<el-form-item label="物料编码">
<el-input
v-model="query.material_code"
size="mini"
clearable
placeholder="仓位"
placeholder="物料编码、名称、规格"
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<el-form-item label="销售订单">
<el-input
v-model="query.sale_code"
size="mini"
clearable
placeholder="销售订单"
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<el-form-item label="销售行号">
<el-input
v-model="query.seq_no"
size="mini"
clearable
placeholder="销售订行号"
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
@@ -80,9 +100,12 @@
<el-table-column show-overflow-tooltip prop="sect_name" label="库区名称" />
<el-table-column show-overflow-tooltip prop="struct_code" label="仓位编码" />
<el-table-column show-overflow-tooltip prop="struct_name" label="仓位名称" />
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" />
<el-table-column show-overflow-tooltip prop="material_name" label="物料名称" />
<el-table-column show-overflow-tooltip min-width="120" prop="material_code" label="物料编码" />
<el-table-column show-overflow-tooltip min-width="120" prop="material_name" label="物料名称" />
<el-table-column show-overflow-tooltip min-width="120" prop="material_spec" label="物料规格" />
<el-table-column show-overflow-tooltip prop="storagevehicle_code" label="载具号" />
<el-table-column show-overflow-tooltip prop="sale_code" label="销售单号" />
<el-table-column show-overflow-tooltip min-width="110" prop="seq_no" label="销售单行号" />
<el-table-column show-overflow-tooltip prop="canuse_qty" label="可用数量" :formatter="crud.formatNum3" />
<el-table-column show-overflow-tooltip prop="frozen_qty" label="冻结数量" :formatter="crud.formatNum3" />
<el-table-column show-overflow-tooltip prop="ivt_qty" label="库存数量" :formatter="crud.formatNum3" />

View File

@@ -121,9 +121,9 @@
type="primary"
icon="el-icon-plus"
size="mini"
@click="insertdtl()"
@click="insertIvt"
>
新增一行
添加库存物料
</el-button>
</span>
@@ -146,6 +146,7 @@
<span v-show="scope.row.edit">{{ scope.row.material_code }}</span>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip prop="material_spec" label="物料规格" />
<el-table-column show-overflow-tooltip prop="material_name" label="物料名称" />
<el-table-column show-overflow-tooltip prop="plan_qty" label="出库数量">
<template slot-scope="scope">
@@ -196,6 +197,11 @@
@tableChanged="tableChanged2"
/>
<AddIvt
:dialog-show.sync="ivtShow"
@tableChanged="tableChanged3"
/>
</el-dialog>
</template>
@@ -204,6 +210,7 @@ import CRUD, { crud, form } from '@crud/crud'
import crudProductIn from '@/views/wms/storage_manage/product/productIn/productin'
import MaterDtl from '@/views/wms/pub/MaterDialog'
import AddDtl from '@/views/wms/storage_manage/product/productOut/AddDtl'
import AddIvt from '@/views/wms/storage_manage/product/productOut/AddIvt'
import crudStorattr, { getStor } from '@/views/wms/storage_manage/basedata/basedata'
const defaultForm = {
@@ -223,7 +230,7 @@ const defaultForm = {
export default {
name: 'AddDialog',
components: { MaterDtl, AddDtl },
components: { MaterDtl, AddDtl, AddIvt },
mixins: [crud(), form(defaultForm)],
dicts: ['IO_BILL_STATUS', 'ST_INV_OUT_TYPE', 'ST_QUALITY_SCODE', 'bill_type', 'product_area'],
props: {
@@ -240,6 +247,7 @@ export default {
dialogVisible: false,
materShow: false,
dtlShow: false,
ivtShow: false,
opendtlParam: null,
materType: '03', // 关键成品
storlist: [],
@@ -345,12 +353,41 @@ export default {
data.material_id = row.material_id
data.material_code = row.material_code
data.material_name = row.material_name
data.material_spec = row.material_spec
data.plan_qty = row.delivery_qty
data.qty_unit_name = row.qty_unit_name
data.qty_unit_id = row.qty_unit_id
data.source_billdtl_id = row.sale_id
data.source_bill_type = row.sale_type
data.source_bill_code = row.sale_code
data.source_billdtl_id = row.deliver_id
data.source_bill_type = row.deliver_type
data.source_bill_code = row.deliver_code
data.base_billdtl_id = row.sale_id
data.base_bill_code = row.sale_code
data.base_bill_table = row.sale_seq_no
data.edit = true
this.form.tableData.splice(-1, 0, data)
this.form.total_qty = parseFloat(this.form.total_qty) + parseFloat(data.plan_qty)
this.form.detail_count = this.form.tableData.length
}
},
tableChanged3(row) {
let same_mater = true
this.form.tableData.forEach((item) => {
if (item.sale_id === row.sale_id) {
same_mater = false
}
})
if (same_mater) {
const data = {}
data.material_id = row.material_id
data.material_code = row.material_code
data.material_name = row.material_name
data.material_spec = row.material_spec
data.plan_qty = row.canuse_qty
data.qty_unit_name = row.unit_name
data.qty_unit_id = row.measure_unit_id
data.base_billdtl_id = row.sale_id
data.base_bill_code = row.sale_code
data.base_bill_table = row.seq_no
data.edit = true
this.form.tableData.splice(-1, 0, data)
this.form.total_qty = parseFloat(this.form.total_qty) + parseFloat(data.plan_qty)
@@ -360,6 +397,9 @@ export default {
insertEvent(row) {
this.dtlShow = true
},
insertIvt() {
this.ivtShow = true
},
queryMater(index, row) {
this.nowindex = index
this.nowrow = row

View File

@@ -78,9 +78,13 @@
</template>
</el-table-column>
<el-table-column show-overflow-tooltip width="150" prop="deliver_code" label="单据号" />
<el-table-column show-overflow-tooltip width="150" prop="status" label="状态" />
<el-table-column show-overflow-tooltip width="150" prop="deliver_type" label="单据类型" :formatter="formatSourceType" />
<el-table-column show-overflow-tooltip width="150" prop="status" label="状态" :formatter="formatStatus" />
<el-table-column show-overflow-tooltip width="150" prop="material_code" label="物料编码" />
<el-table-column show-overflow-tooltip width="150" prop="material_spec" label="物料规格" />
<el-table-column show-overflow-tooltip width="150" prop="material_name" label="物料名称" />
<el-table-column show-overflow-tooltip width="150" prop="sale_code" label="销售单号" />
<el-table-column show-overflow-tooltip width="150" prop="sale_seq_no" label="销售单行号" />
<el-table-column show-overflow-tooltip width="150" prop="cust_code" label="客户编码" />
<el-table-column show-overflow-tooltip width="150" prop="cust_name" label="客户名称" />
<el-table-column show-overflow-tooltip width="150" prop="delivery_qty" label="数量" />
@@ -105,6 +109,7 @@ import pagination from '@crud/Pagination'
export default {
name: 'AddDtl',
dicts: ['PCS_DELIVER_TYPE', 'PCS_DELI_STATUS'],
components: { rrOperation, pagination, crudOperation },
cruds() {
return CRUD({
@@ -175,6 +180,12 @@ export default {
this.$emit('update:dialogShow', false)
this.rows = this.$refs.multipleTable.selection
this.$emit('tableChanged', this.tableRadio)
},
formatStatus(row, column) {
return this.dict.label.PCS_DELI_STATUS[row.status]
},
formatSourceType(row, column) {
return this.dict.label.PCS_DELIVER_TYPE[row.deliver_type]
}
}
}

View File

@@ -0,0 +1,198 @@
<template>
<el-dialog
title="库存选择"
append-to-body
:visible.sync="dialogVisible"
destroy-on-close
:show-close="false"
width="1200px"
@close="close"
@open="open"
>
<div class="head-container">
<!-- 搜索 -->
<el-form
:inline="true"
class="demo-form-inline"
label-position="right"
label-width="80px"
label-suffix=":"
>
<el-form-item label="入库日期">
<el-date-picker
v-model="query.createTime"
type="daterange"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
@change="crud.toQuery"
/>
</el-form-item>
<el-form-item label="仓位编码">
<el-input
v-model="query.struct_code"
size="mini"
clearable
placeholder="仓位编码、名称"
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<el-form-item label="物料编码">
<el-input
v-model="query.material_code"
size="mini"
clearable
placeholder="物料编码、名称、规格"
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<el-form-item label="销售订单">
<el-input
v-model="query.sale_code"
size="mini"
clearable
placeholder="销售订单"
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<el-form-item label="销售行号">
<el-input
v-model="query.seq_no"
size="mini"
clearable
placeholder="销售订行号"
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<rrOperation />
</el-form>
<!--表格渲染-->
<el-table
ref="multipleTable"
v-loading="crud.loading"
:data="crud.data"
style="width: 100%;"
border
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
@current-change="clickChange"
>
<el-table-column label="选择" width="55">
<template slot-scope="scope">
<el-radio v-model="tableRadio" :label="scope.row"><i /></el-radio>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip prop="stor_name" label="仓库名称" />
<el-table-column show-overflow-tooltip prop="sect_name" label="库区名称" />
<el-table-column show-overflow-tooltip prop="struct_code" label="仓位编码" />
<el-table-column show-overflow-tooltip prop="struct_name" label="仓位名称" />
<el-table-column show-overflow-tooltip min-width="120" prop="material_code" label="物料编码" />
<el-table-column show-overflow-tooltip min-width="120" prop="material_name" label="物料名称" />
<el-table-column show-overflow-tooltip min-width="120" prop="material_spec" label="物料规格" />
<el-table-column show-overflow-tooltip prop="storagevehicle_code" label="载具号" />
<el-table-column show-overflow-tooltip prop="sale_code" label="销售单号" />
<el-table-column show-overflow-tooltip min-width="110" prop="seq_no" label="销售单行号" />
<el-table-column show-overflow-tooltip prop="canuse_qty" label="可用数量" :formatter="crud.formatNum3" />
<el-table-column show-overflow-tooltip prop="frozen_qty" label="冻结数量" :formatter="crud.formatNum3" />
<el-table-column show-overflow-tooltip prop="ivt_qty" label="库存数量" :formatter="crud.formatNum3" />
<el-table-column show-overflow-tooltip prop="warehousing_qty" label="待入数量" :formatter="crud.formatNum3" />
<el-table-column show-overflow-tooltip prop="unit_name" label="单位" />
<el-table-column show-overflow-tooltip prop="instorage_time" label="入库时间" min-width="150" />
</el-table>
<!--分页组件-->
<pagination />
</div>
<span slot="footer" class="dialog-footer">
<el-button slot="left" type="info" @click="dialogVisible = false">关闭</el-button>
<el-button slot="left" type="primary" @click="submit">保存</el-button>
</span>
</el-dialog>
</template>
<script>
import CRUD, { crud, header, presenter } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import pagination from '@crud/Pagination'
export default {
name: 'AddDtl',
components: { rrOperation, pagination, crudOperation },
cruds() {
return CRUD({
title: '用户', url: 'api/stIvtStructivtCp',
optShow: {
add: false,
edit: false,
del: false,
reset: true,
download: false
},
query: {
}
})
},
mixins: [presenter(), header()],
props: {
dialogShow: {
type: Boolean,
default: false
},
openParam: {
type: String
},
storId: {
type: String
}
},
data() {
return {
dialogVisible: false,
opendtlParam: '',
rows: [],
tableRadio: null,
openShow: true
}
},
watch: {
dialogShow: {
handler(newValue, oldValue) {
this.dialogVisible = newValue
}
},
openParam: {
handler(newValue, oldValue) {
this.opendtlParam = newValue
}
}
},
methods: {
[CRUD.HOOK.beforeRefresh]() {
return true
},
close() {
this.crud.resetQuery(false)
// 清空grid数据
this.crud.data = undefined
this.$emit('update:dialogShow', false)
},
open() {
this.crud.query.lock_type = '0'
},
clickChange(item) {
this.tableRadio = item
},
submit() {
this.$emit('update:dialogShow', false)
this.rows = this.$refs.multipleTable.selection
this.$emit('tableChanged', this.tableRadio)
}
}
}
</script>

View File

@@ -112,7 +112,7 @@
<el-table-column show-overflow-tooltip prop="assign_qty" label="已分配重量" :formatter="crud.formatNum3" align="center" />
<el-table-column show-overflow-tooltip prop="unassign_qty" label="未分配重量" :formatter="crud.formatNum3" align="center" />
<el-table-column show-overflow-tooltip prop="qty_unit_name" label="单位" align="center" />
<el-table-column show-overflow-tooltip prop="source_bill_type" label="源单类型" align="center" />
<el-table-column show-overflow-tooltip prop="source_bill_type" label="源单类型" align="center" :formatter="formatSourceType"/>
<el-table-column show-overflow-tooltip prop="source_bill_code" label="源单号" align="center" />
</el-table>
</el-card>
@@ -204,10 +204,10 @@
<el-table-column prop="material_code" label="物料编码" width="150px" :min-width="flexWidth('material_code',crud.data,'物料编码')" />
<el-table-column prop="material_name" label="物料名称" width="250px" :min-width="flexWidth('material_name',crud.data,'物料名称')" />
<el-table-column prop="material_spec" label="物料规格" width="150px" :min-width="flexWidth('material_spec',crud.data,'物料规格')" />
<el-table-column prop="pcsn" label="订单号" width="150px" :min-width="flexWidth('pcsn',crud.data,'订单号')" />
<el-table-column show-overflow-tooltip prop="plan_qty" label="出库重量" :formatter="crud.formatNum3" align="center" />
<el-table-column show-overflow-tooltip prop="struct_code" width="150px" label="点位编码" align="center" />
<el-table-column show-overflow-tooltip prop="struct_name" width="150px" label="点位名称" align="center" />
<el-table-column show-overflow-tooltip prop="storagevehicle_code" width="150px" label="载具号" align="center" />
<el-table-column show-overflow-tooltip prop="struct_code" width="150px" label="仓位编码" align="center" />
<el-table-column show-overflow-tooltip prop="struct_name" width="150px" label="仓位名称" align="center" />
<el-table-column show-overflow-tooltip prop="task_code" width="150px" label="任务号" align="center" />
<el-table-column show-overflow-tooltip prop="point_code" width="150px" label="出库点" align="center" />
</el-table>
@@ -227,7 +227,7 @@ export default {
name: 'DivDialog',
components: { StructIvt },
mixins: [crud()],
dicts: ['IO_BILL_STATUS', 'work_status'],
dicts: ['IO_BILL_STATUS', 'work_status', 'PCS_DELIVER_TYPE'],
props: {
dialogShow: {
type: Boolean,
@@ -315,6 +315,9 @@ export default {
bill_statusFormat(row, column) {
return this.dict.label.IO_BILL_STATUS[row.bill_status]
},
formatSourceType(row, column) {
return this.dict.label.PCS_DELIVER_TYPE[row.source_bill_type]
},
quality_scodeFormat(row, column) {
return this.dict.label.ST_QUALITY_SCODE[row.quality_scode]
},

View File

@@ -79,8 +79,9 @@
<el-table-column show-overflow-tooltip prop="sect_name" label="库区" align="center" />
<el-table-column show-overflow-tooltip prop="struct_code" label="仓位" align="center" />
<el-table-column show-overflow-tooltip prop="storagevehicle_code" label="载具号" align="center" />
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" align="center" />
<el-table-column show-overflow-tooltip prop="material_spec" label="物料规格" align="center" />
<el-table-column show-overflow-tooltip prop="material_name" label="物料名称" align="center" />
<el-table-column show-overflow-tooltip prop="pcsn" label="批次号" align="center" />
<el-table-column show-overflow-tooltip prop="canuse_qty" label="可出重量" :formatter="crud.formatNum3" align="center" />
<el-table-column show-overflow-tooltip prop="plan_qty" label="出库重量" :formatter="crud.formatNum3" width="160" align="center">
<template scope="scope">

View File

@@ -36,12 +36,14 @@
>
<el-table-column show-overflow-tooltip type="index" label="序号" align="center" />
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" align="center" />
<el-table-column show-overflow-tooltip width="150" prop="material_spec" label="物料规格" align="center" />
<el-table-column show-overflow-tooltip prop="material_name" label="物料名称" align="center" />
<el-table-column show-overflow-tooltip prop="pcsn" label="批次" align="center" />
<el-table-column show-overflow-tooltip prop="plan_qty" :formatter="crud.formatNum3" label="重量" align="center" />
<el-table-column show-overflow-tooltip prop="assign_qty" :formatter="crud.formatNum3" label="已分配数量" align="center" />
<el-table-column show-overflow-tooltip prop="unassign_qty" :formatter="crud.formatNum3" label="未分配数量" align="center" />
<el-table-column show-overflow-tooltip prop="qty_unit_name" label="重量单位" align="center" />
<el-table-column show-overflow-tooltip prop="source_bill_type" label="源单类型" align="center" :formatter="formatSourceType"/>
<el-table-column show-overflow-tooltip prop="source_bill_code" label="源单号" align="center" />
</el-table>
</el-card>
<!-- <el-card class="box-card" shadow="never" :body-style="{padding:'20px 20px 0 20px'}">
@@ -106,8 +108,9 @@
>
<el-table-column width="60" prop="seq_no" label="序号" align="center" />
<el-table-column show-overflow-tooltip width="150" prop="material_code" label="物料编码" align="center" />
<el-table-column show-overflow-tooltip width="150" prop="material_spec" label="物料规格" align="center" />
<el-table-column show-overflow-tooltip width="150" prop="material_name" label="物料名称" align="center" />
<el-table-column show-overflow-tooltip width="170" prop="pcsn" label="批次" align="center" />
<el-table-column show-overflow-tooltip width="170" prop="storagevehicle_code" label="载具号" align="center" />
<el-table-column show-overflow-tooltip prop="plan_qty" :formatter="crud.formatNum3" label="重量" align="center" />
<el-table-column show-overflow-tooltip prop="point_code1" label="起始位置" align="center" />
<el-table-column show-overflow-tooltip prop="point_code2" label="目的位置" align="center" />
@@ -128,7 +131,7 @@ export default {
name: 'TaskDialog',
components: {},
mixins: [crud()],
dicts: ['SCH_TASK_TYPE_DTL', 'task_status'],
dicts: ['SCH_TASK_TYPE_DTL', 'task_status', 'PCS_DELIVER_TYPE'],
props: {
dialogShow: {
type: Boolean,
@@ -249,6 +252,9 @@ export default {
this.dis_del = true
this.dis_send = true
this.dis_confirm = true
},
formatSourceType(row, column) {
return this.dict.label.PCS_DELIVER_TYPE[row.source_bill_type]
}
}
}

View File

@@ -11,7 +11,24 @@
label-width="80px"
label-suffix=":"
>
<el-form-item label="模糊查询">
<el-form-item label="所属仓库">
<el-select
v-model="query.stor_id"
clearable
size="mini"
placeholder="所属仓库"
class="filter-item"
@change="crud.toQuery"
>
<el-option
v-for="item in storlist"
:key="item.stor_id"
:label="item.stor_name"
:value="item.stor_id"
/>
</el-select>
</el-form-item>
<el-form-item label="出库单号">
<el-input
v-model="query.bill_code"
size="mini"
@@ -22,7 +39,7 @@
</el-form-item>
<el-form-item label="生产车间">
<el-select
v-model="query.product_code"
v-model="query.product_area"
clearable
size="mini"
placeholder="全部"
@@ -147,7 +164,7 @@
</el-table-column>
<el-table-column show-overflow-tooltip prop="bill_type" min-width="120" label="单据类型" :formatter="bill_typeFormat" />
<el-table-column show-overflow-tooltip prop="stor_name" label="仓库" min-width="120" />
<!-- <el-table-column prop="" label="生产车间" width="130" show-overflow-tooltip />-->
<el-table-column prop="product_area" label="生产车间" width="130" show-overflow-tooltip />
<el-table-column show-overflow-tooltip min-width="120" prop="biz_date" label="业务日期" />
<el-table-column label="总重量" align="center" prop="total_qty">
<template slot-scope="scope">