add:添加一体机批量入库/组盘
This commit is contained in:
@@ -5,6 +5,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.enums.AcsTaskEnum;
|
||||
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.Engrave.EngraveSendEmpTask;
|
||||
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.wash.WashMachineryTask;
|
||||
@@ -35,6 +36,7 @@ public class ConventConfig implements SmartLifecycle {
|
||||
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_FULL, SpringContextHolder.getBean(WashSendMaterialTask.class));
|
||||
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_EMP, SpringContextHolder.getBean(WashCallEmptyTask.class));
|
||||
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_FULL_ERROR, SpringContextHolder.getBean(WashSendMaterialQZTask.class));
|
||||
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_PLOTTER_EMP, SpringContextHolder.getBean(EngraveSendEmpTask.class));
|
||||
System.out.println("初始化Task_Collent完成777"+AcsToWmsServiceImpl.Task_Collent.size());
|
||||
}
|
||||
|
||||
|
||||
@@ -2,19 +2,20 @@ package org.nl.wms.masterdata_manage.controller.vehicle;
|
||||
|
||||
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.anno.Log;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.common.utils.RedissonUtils;
|
||||
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbBucketrecordService;
|
||||
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -38,5 +39,16 @@ public class MdPbBucketrecordController {
|
||||
public ResponseEntity<Object> query(@RequestParam Map whereJson, PageQuery page) {
|
||||
return new ResponseEntity<>(iMdPbBucketrecordService.queryAll(whereJson,page), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/excelImport")
|
||||
@Log("导入组盘信息")
|
||||
//("查询桶记录表")
|
||||
public ResponseEntity<Object> excelImport(@RequestParam("file") MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
|
||||
RedissonUtils.lock(() -> {
|
||||
iMdPbBucketrecordService.excelImport(file, request, response);
|
||||
}, "组盘信息导入", null);
|
||||
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,10 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbBucketrecord;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -27,4 +30,14 @@ public interface IMdPbBucketrecordService extends IService<MdPbBucketrecord> {
|
||||
Object queryAll(Map whereJson, PageQuery page);
|
||||
|
||||
void createBucke(MdPbBucketrecord dao);
|
||||
|
||||
/**
|
||||
* 导入组盘信息
|
||||
* @param file
|
||||
* @param request
|
||||
* @param response
|
||||
*/
|
||||
void excelImport(MultipartFile file, HttpServletRequest request, HttpServletResponse response);
|
||||
|
||||
List<Map> getMstList();
|
||||
}
|
||||
|
||||
@@ -6,32 +6,36 @@ import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.io.Serializable;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 桶记录表
|
||||
* 箱记录表:存储物料跟托盘的关系
|
||||
* </p>
|
||||
*
|
||||
* @author generator
|
||||
* @since 2023-05-10
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@SuperBuilder
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("md_pb_bucketrecord")
|
||||
public class MdPbBucketrecord implements Serializable {
|
||||
|
||||
public MdPbBucketrecord() { }
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 桶记录标识
|
||||
*/
|
||||
@TableId
|
||||
private Long bucket_record_id;
|
||||
private String bucket_record_id;
|
||||
|
||||
/**
|
||||
* 桶唯一标识
|
||||
@@ -43,10 +47,33 @@ public class MdPbBucketrecord implements Serializable {
|
||||
*/
|
||||
private String storagevehicle_type;
|
||||
|
||||
/**
|
||||
* 销售单
|
||||
*/
|
||||
private String sale_code;
|
||||
/**
|
||||
* 合同号
|
||||
*/
|
||||
private String contract_code;
|
||||
|
||||
/**
|
||||
* 销售单行号
|
||||
*/
|
||||
private Integer seq_no;
|
||||
|
||||
/**
|
||||
* 物料标识
|
||||
*/
|
||||
private String material_id;
|
||||
/**
|
||||
* 物料标识
|
||||
*/
|
||||
private String material_code;
|
||||
|
||||
/**
|
||||
* 物料规格
|
||||
*/
|
||||
private String material_spec;
|
||||
|
||||
/**
|
||||
* 批次
|
||||
@@ -71,17 +98,22 @@ public class MdPbBucketrecord implements Serializable {
|
||||
/**
|
||||
* 数量计量单位标识
|
||||
*/
|
||||
private Long qty_unit_id;
|
||||
private String qty_unit_id;
|
||||
|
||||
/**
|
||||
* 数量计量单位名称
|
||||
*/
|
||||
private String qty_unit_name;
|
||||
|
||||
/**
|
||||
* 物料单重
|
||||
*/
|
||||
private String unit_weight;
|
||||
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
private BigDecimal storage_qty;
|
||||
private String storage_qty;
|
||||
|
||||
/**
|
||||
* 顺序号
|
||||
@@ -101,17 +133,18 @@ public class MdPbBucketrecord implements Serializable {
|
||||
/**
|
||||
* 打印次数
|
||||
*/
|
||||
private BigDecimal print_times;
|
||||
private Integer print_times;
|
||||
|
||||
/**
|
||||
* 状态
|
||||
* @see org.nl.wms.storage_manage.IOSEnum.BILL_STATUS;
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
private Long create_id;
|
||||
private String create_id;
|
||||
|
||||
/**
|
||||
* 创建人姓名
|
||||
@@ -136,7 +169,7 @@ public class MdPbBucketrecord implements Serializable {
|
||||
/**
|
||||
* 组盘人
|
||||
*/
|
||||
private Long makeup_optid;
|
||||
private String makeup_optid;
|
||||
|
||||
/**
|
||||
* 组盘人姓名
|
||||
@@ -151,7 +184,7 @@ public class MdPbBucketrecord implements Serializable {
|
||||
/**
|
||||
* 入库人
|
||||
*/
|
||||
private Long instor_optid;
|
||||
private String instor_optid;
|
||||
|
||||
/**
|
||||
* 入库人姓名
|
||||
@@ -166,7 +199,7 @@ public class MdPbBucketrecord implements Serializable {
|
||||
/**
|
||||
* 出库人
|
||||
*/
|
||||
private Long outstor_optid;
|
||||
private String outstor_optid;
|
||||
|
||||
/**
|
||||
* 出库人姓名
|
||||
@@ -181,7 +214,7 @@ public class MdPbBucketrecord implements Serializable {
|
||||
/**
|
||||
* 入立库人
|
||||
*/
|
||||
private Long instor_optid2;
|
||||
private String instor_optid2;
|
||||
|
||||
/**
|
||||
* 入立库人姓名
|
||||
|
||||
@@ -17,4 +17,6 @@ import java.util.Map;
|
||||
public interface MdPbBucketrecordMapper extends BaseMapper<MdPbBucketrecord> {
|
||||
|
||||
List<Map> queryAll(Map<String,Object> map);
|
||||
|
||||
List<Map> getMstList();
|
||||
}
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
SELECT
|
||||
re.*,
|
||||
ma.material_name,
|
||||
ma.material_code
|
||||
|
||||
ma.material_code,
|
||||
ma.material_spec
|
||||
FROM
|
||||
MD_PB_BucketRecord re
|
||||
LEFT JOIN md_me_materialbase ma ON ma.material_id = re.material_id
|
||||
@@ -29,4 +29,10 @@
|
||||
</if>
|
||||
|
||||
</select>
|
||||
<select id="getMstList" resultType="java.util.Map">
|
||||
select GROUP_CONCAT(bucket_record_id) as bucket_record_id,(@rowcount :=@rowcount+1) as sqe_on, create_time,storagevehicle_code,sale_code,SUM(storage_qty) as storage_qty,count(storagevehicle_code) as count
|
||||
from md_pb_bucketrecord,(select @rowcount := 0) as r
|
||||
where status = '1'
|
||||
GROUP BY storagevehicle_code,sale_code,create_time
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -1,15 +1,25 @@
|
||||
package org.nl.wms.masterdata_manage.service.vehicle.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.poi.excel.ExcelReader;
|
||||
import cn.hutool.poi.excel.ExcelUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.github.pagehelper.Page;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
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.wms.masterdata_manage.MasterEnum;
|
||||
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.service.vehicle.IMdPbStoragevehicleextService;
|
||||
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleinfoService;
|
||||
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbBucketrecord;
|
||||
@@ -18,14 +28,25 @@ import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleinfo;
|
||||
import org.nl.wms.masterdata_manage.service.vehicle.dao.mapper.MdPbBucketrecordMapper;
|
||||
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbBucketrecordService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
|
||||
import org.nl.wms.product_manage.service.workprocedure.dao.PdmBiWorkprocedure;
|
||||
import org.nl.wms.storage_manage.IOSEnum;
|
||||
import org.nl.wms.storage_manage.IVTEnum;
|
||||
import org.nl.wms.system_manage.service.user.dao.SysUser;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.InputStream;
|
||||
import java.lang.reflect.Field;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.*;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -38,10 +59,14 @@ import java.util.Map;
|
||||
@Service
|
||||
public class MdPbBucketrecordServiceImpl extends ServiceImpl<MdPbBucketrecordMapper, MdPbBucketrecord> implements IMdPbBucketrecordService {
|
||||
|
||||
private static Map<Integer,String> Excel_Item = MapOf.of(0,"storagevehicle_code",1,"sale_code",2,"contract_code",3,"material_code",8,"storage_qty",9,"bucketunique");
|
||||
|
||||
@Autowired
|
||||
protected IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService; // 载具服务
|
||||
|
||||
@Autowired
|
||||
private IMdMeMaterialbaseService materialbaseService;
|
||||
|
||||
@Override
|
||||
public Object queryAll(Map whereJson, PageQuery pageQuery) {
|
||||
Page<Object> page = PageHelper.startPage(pageQuery.getPage()+1, pageQuery.getSize());
|
||||
@@ -58,24 +83,93 @@ public class MdPbBucketrecordServiceImpl extends ServiceImpl<MdPbBucketrecordMap
|
||||
.eq(MdPbStoragevehicleinfo::getStoragevehicle_code, dao.getStoragevehicle_code())
|
||||
);
|
||||
|
||||
dao.setBucket_record_id(IdUtil.getLongId());
|
||||
dao.setBucket_record_id(IdUtil.getStringId());
|
||||
dao.setStoragevehicle_type("1"); // TODO 暂时写死
|
||||
dao.setIvt_level(IVTEnum.IVT_LEVEL.code("一级"));
|
||||
dao.setIs_active("1");
|
||||
dao.setQuality_scode(IVTEnum.QUALITY_SCODE.code("待检品"));
|
||||
dao.setPrint_times(BigDecimal.valueOf(0));
|
||||
dao.setCreate_id(Long.valueOf(SecurityUtils.getCurrentUserId()));
|
||||
dao.setPrint_times(0);
|
||||
dao.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
dao.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
dao.setCreate_time(DateUtil.now());
|
||||
dao.setStoragevehicle_id(vehicleDao.getStoragevehicle_id());
|
||||
dao.setStoragevehicle_code(vehicleDao.getStoragevehicle_code());
|
||||
dao.setMakeup_optid(Long.valueOf(SecurityUtils.getCurrentUserId()));
|
||||
dao.setMakeup_optid(SecurityUtils.getCurrentUserId());
|
||||
dao.setMakeup_optname(SecurityUtils.getCurrentNickName());
|
||||
dao.setMakeup_time(DateUtil.now());
|
||||
dao.setInstor_optid(Long.valueOf(SecurityUtils.getCurrentUserId()));
|
||||
dao.setInstor_optid(SecurityUtils.getCurrentUserId());
|
||||
dao.setInstor_optname(SecurityUtils.getCurrentNickName());
|
||||
dao.setInstor_time(DateUtil.now());
|
||||
this.save(dao);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void excelImport(MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
|
||||
try {
|
||||
InputStream inputStream = file.getInputStream();
|
||||
ExcelReader excelReader = ExcelUtil.getReader(inputStream, 0);
|
||||
List<List<Object>> read = excelReader.read();
|
||||
List<MdPbBucketrecord> data = new ArrayList<>();
|
||||
row:
|
||||
for (int i = 4; i < read.size(); i++) {
|
||||
if (CollectionUtils.isEmpty(read.get(i))){ break; }
|
||||
MdPbBucketrecord mdPbBucketrecord = new MdPbBucketrecord();
|
||||
if (StringUtils.isEmpty(String.valueOf(read.get(i).get(0)))){
|
||||
break row;
|
||||
}
|
||||
for (int i1 = 0; i1 < read.get(i).size(); i1++) {
|
||||
Object item = read.get(i).get(i1);
|
||||
String s = Excel_Item.get(i1);
|
||||
if (s!=null){
|
||||
Class<MdPbBucketrecord> bucket = MdPbBucketrecord.class;
|
||||
Field field = bucket.getDeclaredField(s);
|
||||
field.setAccessible(true);
|
||||
field.set(mdPbBucketrecord,String.valueOf(item));
|
||||
}
|
||||
}
|
||||
data.add(mdPbBucketrecord);
|
||||
}
|
||||
Set<String> collect = data.stream().map(MdPbBucketrecord::getMaterial_code).collect(Collectors.toSet());
|
||||
List<MdMeMaterialbase> materials = materialbaseService.list(new QueryWrapper<MdMeMaterialbase>().in("material_code", collect));
|
||||
if (materials.size()!=collect.size()){
|
||||
List<String> collect1 = materials.stream().map(MdMeMaterialbase::getMaterial_code).collect(Collectors.toList());
|
||||
String notIn = collect.stream().filter(a -> !collect1.contains(a)).collect(Collectors.joining(","));
|
||||
throw new BadRequestException("当前物料编号不存在:"+notIn);
|
||||
}
|
||||
Map<String, MdMeMaterialbase> materialMap = materials.stream().collect(HashMap::new, (k, v) -> k.put(v.getMaterial_code(), v), HashMap::putAll);
|
||||
String now = DateUtil.now();
|
||||
String pcsn = DateUtil.today();
|
||||
|
||||
for (MdPbBucketrecord datum : data) {
|
||||
datum.setBucket_record_id(IdUtil.getStringId());
|
||||
String bucketunique = datum.getBucketunique();
|
||||
if (StringUtils.isEmpty(bucketunique)){
|
||||
datum.setBucketunique(CodeUtil.getNewCode("PRODUCT_BUCKET_CODE"));
|
||||
}
|
||||
datum.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
datum.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
datum.setCreate_time(now);
|
||||
datum.setMaterial_id(materialMap.get(datum.getMaterial_code()).getMaterial_id());
|
||||
datum.setMaterial_spec(materialMap.get(datum.getMaterial_code()).getMaterial_spec());
|
||||
datum.setPcsn(pcsn);
|
||||
datum.setStoragevehicle_type("1");
|
||||
datum.setIvt_level(IVTEnum.IVT_LEVEL.code("一级"));
|
||||
datum.setIs_active("1");
|
||||
datum.setQuality_scode(IVTEnum.QUALITY_SCODE.code("待检品"));
|
||||
datum.setPrint_times(0);
|
||||
datum.setQty_unit_id("16");
|
||||
datum.setQty_unit_name("个/只");
|
||||
datum.setStatus(MasterEnum.BOX_STATUS.code("生成"));
|
||||
}
|
||||
this.saveBatch(data);
|
||||
}catch (Exception ex){
|
||||
throw new BadRequestException(ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map> getMstList() {
|
||||
return this.baseMapper.getMstList();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,19 +2,27 @@ package org.nl.wms.pda_manage.pda.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
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 com.github.pagehelper.Page;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import io.swagger.annotations.Api;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
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.utils.MapOf;
|
||||
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtSectattrService;
|
||||
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService;
|
||||
import org.nl.wms.masterdata_manage.MasterEnum;
|
||||
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbBucketrecordService;
|
||||
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbBucketrecord;
|
||||
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService;
|
||||
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstorattr;
|
||||
import org.nl.wms.mps_manage.saleorder.service.IMpsSaleOrderService;
|
||||
import org.nl.wms.scheduler_manage.service.task.PointService;
|
||||
import org.nl.wms.storage_manage.IOSEnum;
|
||||
import org.nl.wms.storage_manage.pda.service.PdaStCpInService;
|
||||
import org.nl.wms.storage_manage.productmanage.service.structIvt.IStIvtStructivtCpService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@@ -36,15 +44,16 @@ import java.util.*;
|
||||
public class PdaProductIosController {
|
||||
|
||||
@Autowired
|
||||
private IStIvtStructivtCpService productInService;
|
||||
@Autowired
|
||||
private IStIvtStructattrService structivtService;
|
||||
@Autowired
|
||||
private IStIvtSectattrService sectattrService;
|
||||
private IStIvtBsrealstorattrService storattrService; // 实物属性服务
|
||||
|
||||
@Autowired
|
||||
private IMpsSaleOrderService saleOrderService;
|
||||
@Autowired
|
||||
private PointService pointService;
|
||||
@Autowired
|
||||
private IMdPbBucketrecordService bucketrecordService;
|
||||
@Autowired
|
||||
private PdaStCpInService pdaStCpInService;
|
||||
|
||||
@PostMapping("/order")
|
||||
@Log("根据订单获取订单物料信息")
|
||||
@@ -81,4 +90,48 @@ public class PdaProductIosController {
|
||||
String type = param.getString("type");
|
||||
return new ResponseEntity<>(pointService.selectPoint(type),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/bucket")
|
||||
@Log("根据订单获取订单物料信息")
|
||||
//("根据订单获取订单物料信息")
|
||||
public ResponseEntity<Object> bucket(@RequestBody JSONObject param) {
|
||||
String storagevehicleCode = param.getString("storagevehicle_code");
|
||||
List mstList= new ArrayList<>();
|
||||
if (StringUtils.isEmpty(storagevehicleCode)){
|
||||
mstList = bucketrecordService.getMstList();
|
||||
}else {
|
||||
List<Map<String, Object>> maps = bucketrecordService.listMaps(new QueryWrapper<MdPbBucketrecord>()
|
||||
.eq("storagevehicle_code", storagevehicleCode).eq("status", "1"));
|
||||
int i=1;
|
||||
for (Map<String, Object> map : maps) {
|
||||
map.put("sqe_on",i);
|
||||
i++;
|
||||
}
|
||||
mstList=maps;
|
||||
}
|
||||
return new ResponseEntity<>(TableDataInfo.build(mstList),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/stor")
|
||||
public ResponseEntity<Object> stor() {
|
||||
List<StIvtBsrealstorattr> storList = storattrService.list(
|
||||
new QueryWrapper<StIvtBsrealstorattr>().lambda()
|
||||
.eq(StIvtBsrealstorattr::getIs_used, IOSEnum.IS_USED.code("是"))
|
||||
.eq(StIvtBsrealstorattr::getStor_id, IOSEnum.STOR_CODE.code("成品库"))
|
||||
);
|
||||
return new ResponseEntity<>(TableDataInfo.build(storList),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/batchin")
|
||||
@Log("批量入库")
|
||||
//("新增入库单")
|
||||
public ResponseEntity<Object> batchin(@RequestBody JSONArray whereJson) {
|
||||
pdaStCpInService.confirmIn(null);
|
||||
return new ResponseEntity<>(MapOf.of("message","创建成功","status", HttpStatus.OK.value()),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/iosTasks")
|
||||
public ResponseEntity<Object> iosTasks(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(MapOf.of("message","创建成功","status", HttpStatus.OK.value()),HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import com.baomidou.mybatisplus.extension.api.R;
|
||||
import io.swagger.annotations.Api;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.anno.Log;
|
||||
import org.nl.common.enums.AcsTaskEnum;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.RedissonUtils;
|
||||
@@ -153,6 +154,7 @@ public class TmpKZController {
|
||||
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/kz/submitkz")
|
||||
@Log("提交刻字任务")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> submitkz(@RequestBody JSONArray param){
|
||||
engraveScheduleService.createTask(param);
|
||||
@@ -178,10 +180,25 @@ public class TmpKZController {
|
||||
for (Map<String, Object> map : list) {
|
||||
map.put("material_spec",materialMap.get(map.get("material_id")).getMaterial_spec());
|
||||
map.put("material_code",materialMap.get(map.get("material_id")).getMaterial_code());
|
||||
map.put("create_time",map.get("create_time").toString());
|
||||
}
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/kz/sendVechile")
|
||||
@Log("手动送空框")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> sendVechile(@RequestBody JSONObject param){
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/kz/resend")
|
||||
@Log("刻字任务重新下发")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> resend(@RequestBody JSONObject param){
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -94,9 +94,9 @@ public class EngraveTranSportTask extends AbstractAcsTask {
|
||||
String[] to_sort_array = {"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"};
|
||||
String[] to_devices_array = {"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"};
|
||||
String[] to_weight_array = {"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"};
|
||||
int i=1;
|
||||
int i=0;
|
||||
for (Map.Entry<String, String> entry : qtyArr.entrySet()) {
|
||||
to_sort_array[i] = String.valueOf(i);
|
||||
to_sort_array[i] = String.valueOf(i+1);
|
||||
to_devices_array[i] = String.valueOf(entry.getKey());
|
||||
to_weight_array[i] = String.valueOf(new BigDecimal(entry.getValue()).intValue());
|
||||
i++;
|
||||
|
||||
@@ -72,8 +72,8 @@ public class WashMachineryTask extends AbstractAcsTask {
|
||||
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"));
|
||||
if (StringUtils.isNotEmpty(param.getString("task_code"))){
|
||||
query.eq("task_code",param.getString("task_code"));
|
||||
}
|
||||
SchBaseTask taskDao = taskService.getOne(query);
|
||||
// 更新任务状态为完成
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.storage_manage.pda.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
|
||||
@@ -39,7 +40,7 @@ public interface PdaStCpInService {
|
||||
*/
|
||||
Object getMaterial(JSONObject whereJson, PageQuery page);
|
||||
|
||||
JSONObject getMaterial(JSONObject whereJson);
|
||||
Object getMaterial(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 确认入库
|
||||
@@ -48,6 +49,13 @@ public interface PdaStCpInService {
|
||||
*/
|
||||
JSONObject confirmIn(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 批量入库
|
||||
* @param whereJson
|
||||
* @return
|
||||
*/
|
||||
JSONObject batchConfirmIn(JSONArray whereJson);
|
||||
|
||||
/**
|
||||
* 成品入库查询
|
||||
* @param whereJson /
|
||||
|
||||
@@ -1,38 +1,65 @@
|
||||
package org.nl.wms.storage_manage.pda.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
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 com.github.pagehelper.Page;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.common.enums.AcsTaskEnum;
|
||||
import org.nl.common.publish.BussEventMulticaster;
|
||||
import org.nl.common.publish.event.PointEvent;
|
||||
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.wms.masterdata_manage.MasterEnum;
|
||||
import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase;
|
||||
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbBucketrecordService;
|
||||
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbBucketrecord;
|
||||
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;
|
||||
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
|
||||
import org.nl.wms.mps_manage.saleorder.service.IMpsSaleOrderService;
|
||||
import org.nl.wms.mps_manage.saleorder.service.dao.MpsSaleOrder;
|
||||
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
|
||||
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
|
||||
import org.nl.wms.storage_manage.IOSEnum;
|
||||
import org.nl.wms.storage_manage.IVTEnum;
|
||||
import org.nl.wms.storage_manage.pda.PDAEnum;
|
||||
import org.nl.wms.storage_manage.pda.service.PdaStCpInService;
|
||||
import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvCpService;
|
||||
import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdisCpService;
|
||||
import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdisdtlCpService;
|
||||
import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdtlCpService;
|
||||
import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvCp;
|
||||
import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdisCp;
|
||||
import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdisdtlCp;
|
||||
import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdtlCp;
|
||||
import org.nl.wms.storage_manage.productmanage.service.moreOrLess.dao.StIfDeliveryorderCp;
|
||||
import org.nl.wms.storage_manage.productmanage.service.structIvt.IStIvtStructivtCpService;
|
||||
import org.nl.wms.storage_manage.productmanage.util.ChangeIvtUtil;
|
||||
import org.nl.wms.system_manage.service.dict.ISysDictService;
|
||||
import org.nl.wms.system_manage.service.dict.dao.Dict;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -56,6 +83,8 @@ public class PdaStCpInServiceImpl implements PdaStCpInService {
|
||||
|
||||
@Autowired
|
||||
private ISchBasePointService iSchBasePointService; // 点位服务
|
||||
@Autowired
|
||||
private IStIvtStructivtCpService iStIvtStructivtCpService;
|
||||
|
||||
@Autowired
|
||||
private IMpsSaleOrderService iMpsSaleOrderService; // 订单服务
|
||||
@@ -68,6 +97,10 @@ public class PdaStCpInServiceImpl implements PdaStCpInService {
|
||||
|
||||
@Autowired
|
||||
protected IStIvtIostorinvdisCpService iostorinvdisCpService; // 成品出入库分配表服务
|
||||
@Autowired
|
||||
protected IMdPbBucketrecordService bucketrecordService; // 成品出入库分配表服务
|
||||
@Autowired
|
||||
protected IStIvtIostorinvdisdtlCpService iStIvtIostorinvdisdtlCpService;
|
||||
|
||||
@Override
|
||||
public JSONObject getBcpStor() {
|
||||
@@ -123,15 +156,12 @@ public class PdaStCpInServiceImpl implements PdaStCpInService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject getMaterial(JSONObject whereJson) {
|
||||
public Object getMaterial(JSONObject whereJson) {
|
||||
List<Map> list = iMpsSaleOrderService.getPdaMaterial(whereJson);
|
||||
for (Map map : list) {
|
||||
map.put("create_time",map.get("plandeliver_date"));
|
||||
}
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("data", JSONArray.parseArray(JSON.toJSONString(list)));
|
||||
result.put("message", "查询成功");
|
||||
return result;
|
||||
return TableDataInfo.build(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -191,6 +221,311 @@ public class PdaStCpInServiceImpl implements PdaStCpInService {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public JSONObject batchConfirmIn(JSONArray arr) {
|
||||
List<StIvtStructattr> stuctList = structattrService.list(
|
||||
new QueryWrapper<StIvtStructattr>().lambda()
|
||||
.eq(StIvtStructattr::getStor_id, IOSEnum.STOR_CODE.code("成品库"))
|
||||
.eq(StIvtStructattr::getSect_id, IOSEnum.SECT_CODE.code("成品库区"))
|
||||
.eq(StIvtStructattr::getIs_used, IOSEnum.IS_USED.code("是"))
|
||||
.eq(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
.eq(StIvtStructattr::getStoragevehicle_code, "")
|
||||
.eq(StIvtStructattr::getIs_emptyvehicle, false)
|
||||
.orderByAsc(StIvtStructattr::getStruct_code).last("limit " + arr.size()));
|
||||
if (stuctList.size()<arr.size()){
|
||||
throw new BadRequestException("当前成品库可用货位不足:"+stuctList.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.joining(",")));
|
||||
}
|
||||
String pcsn = DateUtil.today();
|
||||
//每个托盘的物料
|
||||
for (int i = 0; i < arr.size(); i++) {
|
||||
JSONObject item = (JSONObject) arr.get(i);
|
||||
StIvtStructattr structattr = stuctList.get(i);
|
||||
// 2.组盘信息
|
||||
List<MdPbBucketrecord> rows = bucketrecordService.listByIds(Arrays.asList(item.getString("bucket_record_id").split(",")));
|
||||
bucketrecordService.update(new UpdateWrapper<MdPbBucketrecord>()
|
||||
.set("status", MasterEnum.BOX_STATUS.code("组盘"))
|
||||
.set("instor_optid", SecurityUtils.getCurrentUserId())
|
||||
.set("instor_optname", SecurityUtils.getCurrentNickName())
|
||||
.set("instor_time", DateUtil.now())
|
||||
.in("bucket_record_id", Arrays.asList(item.getString("bucket_record_id").split(","))));
|
||||
//跟新订单
|
||||
MpsSaleOrder orderDao = iMpsSaleOrderService.getOne(new QueryWrapper<MpsSaleOrder>().eq("sale_code", rows.get(0).getSale_code()));
|
||||
if (orderDao!=null){
|
||||
orderDao.setStatus(IOSEnum.ORDER_STATUS.code("提交"));
|
||||
iMpsSaleOrderService.updateById(orderDao);
|
||||
}
|
||||
StIvtIostorinvCp stIvtIostorinvCp = new StIvtIostorinvCp();
|
||||
入库单主表: {
|
||||
stIvtIostorinvCp.setIostorinv_id(org.nl.common.utils.IdUtil.getStringId());
|
||||
stIvtIostorinvCp.setBill_code(CodeUtil.getNewCode("IO_CODE"));
|
||||
stIvtIostorinvCp.setIo_type(IOSEnum.IO_TYPE.code("入库"));
|
||||
stIvtIostorinvCp.setBuss_type(item.getString("bill_code"));
|
||||
stIvtIostorinvCp.setBill_type(stIvtIostorinvCp.getBuss_type());
|
||||
stIvtIostorinvCp.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
|
||||
stIvtIostorinvCp.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
stIvtIostorinvCp.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
stIvtIostorinvCp.setCreate_time(new Date());
|
||||
stIvtIostorinvCp.setIs_delete(false);
|
||||
stIvtIostorinvCp.setSysdeptid("111");
|
||||
stIvtIostorinvCp.setBiz_date(pcsn);
|
||||
stIvtIostorinvCp.setStor_id(IOSEnum.STOR_CODE.code("成品库"));
|
||||
stIvtIostorinvCp.setStor_code(structattr.getStor_code());
|
||||
stIvtIostorinvCp.setStor_name(structattr.getStor_name());
|
||||
stIvtIostorinvCp.setProduct_area("A1");
|
||||
stIvtIostorinvCp.setTotal_qty(new BigDecimal(rows.stream().mapToInt(a -> Integer.valueOf(a.getStorage_qty())).sum()));
|
||||
stIvtIostorinvCp.setDetail_count(rows.size());
|
||||
}
|
||||
iStIvtIostorinvCpService.save(stIvtIostorinvCp);
|
||||
int seq_no = 0;
|
||||
List<StIvtIostorinvdtlCp> invdtl = new ArrayList<>();
|
||||
List<StIvtIostorinvdisdtlCp> invdisdtl = new ArrayList<>();
|
||||
List<StIvtIostorinvdisCp> invdis = new ArrayList<>();
|
||||
//分配i
|
||||
for (MdPbBucketrecord row : rows) {
|
||||
String iostorinvdis_id = IdUtil.getStringId();
|
||||
|
||||
StIvtIostorinvdtlCp iostorinvdtlCp = new StIvtIostorinvdtlCp();
|
||||
StIvtIostorinvdisdtlCp iostorinvdisdtlCp = new StIvtIostorinvdisdtlCp();
|
||||
StIvtIostorinvdisCp iostorinvdisCp = new StIvtIostorinvdisCp();
|
||||
入库明细: {
|
||||
iostorinvdtlCp.setBase_bill_code(row.getSale_code());
|
||||
iostorinvdtlCp.setBase_bill_table(String.valueOf(row.getSeq_no()));
|
||||
iostorinvdtlCp.setBase_billdtl_id(orderDao == null ? "" : orderDao.getSale_id());
|
||||
iostorinvdtlCp.setBase_bill_type(orderDao == null ? "" : orderDao.getSale_type());
|
||||
iostorinvdtlCp.setMaterial_id(row.getMaterial_id());
|
||||
iostorinvdtlCp.setPlan_qty(new BigDecimal(row.getStorage_qty()));
|
||||
iostorinvdtlCp.setQty_unit_id(row.getQty_unit_id());
|
||||
iostorinvdtlCp.setQty_unit_name(row.getQty_unit_name());
|
||||
iostorinvdtlCp.setUnit_weight(new BigDecimal(row.getUnit_weight()));
|
||||
iostorinvdtlCp.setIostorinv_id(stIvtIostorinvCp.getIostorinv_id());
|
||||
iostorinvdtlCp.setIostorinvdtl_id(IdUtil.getStringId());
|
||||
iostorinvdtlCp.setSeq_no(seq_no + 1);
|
||||
iostorinvdtlCp.setPcsn(pcsn);
|
||||
iostorinvdtlCp.setIs_active(true);
|
||||
iostorinvdtlCp.setIvt_level(IVTEnum.IVT_LEVEL.code("一级"));
|
||||
iostorinvdtlCp.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
|
||||
iostorinvdtlCp.setReal_qty(iostorinvdtlCp.getPlan_qty());
|
||||
iostorinvdtlCp.setUnassign_qty(iostorinvdtlCp.getPlan_qty());
|
||||
invdtl.add(iostorinvdtlCp);
|
||||
}
|
||||
分配明细: {
|
||||
iostorinvdisdtlCp.setIostorinv_id(iostorinvdtlCp.getIostorinv_id());
|
||||
iostorinvdisdtlCp.setIostorinvdtl_id(iostorinvdtlCp.getIostorinvdtl_id());
|
||||
iostorinvdisdtlCp.setIostorinvdis_id(iostorinvdis_id);
|
||||
iostorinvdisdtlCp.setIostorinvdisdtl_id(IdUtil.getStringId());
|
||||
iostorinvdisdtlCp.setSeq_no(new BigDecimal(1));
|
||||
iostorinvdisdtlCp.setMaterial_id(iostorinvdtlCp.getMaterial_id());
|
||||
iostorinvdisdtlCp.setPcsn(pcsn);
|
||||
iostorinvdisdtlCp.setQuality_scode(IVTEnum.QUALITY_SCODE.code("合格品"));
|
||||
iostorinvdisdtlCp.setIvt_level(IVTEnum.IVT_LEVEL.code("一级"));
|
||||
iostorinvdisdtlCp.setIs_active(true);
|
||||
iostorinvdisdtlCp.setStoragevehicle_code(row.getStoragevehicle_code());
|
||||
iostorinvdisdtlCp.setBucketunique(row.getBucketunique());
|
||||
iostorinvdisdtlCp.setQty_unit_id(row.getQty_unit_id());
|
||||
iostorinvdisdtlCp.setQty_unit_name(row.getQty_unit_name());
|
||||
iostorinvdisdtlCp.setReal_qty(new BigDecimal(row.getStorage_qty()));
|
||||
invdisdtl.add(iostorinvdisdtlCp);
|
||||
}
|
||||
分配:{
|
||||
iostorinvdisCp.setIostorinvdis_id(iostorinvdis_id);
|
||||
iostorinvdisCp.setIostorinv_id(stIvtIostorinvCp.getIostorinv_id());
|
||||
iostorinvdisCp.setIostorinvdtl_id(invdisdtl.get(0).getIostorinvdtl_id());
|
||||
iostorinvdisCp.setSeq_no(1);
|
||||
iostorinvdisCp.setMaterial_id(invdisdtl.get(0).getMaterial_id());
|
||||
iostorinvdisCp.setPcsn(pcsn);
|
||||
iostorinvdisCp.setQuality_scode(invdisdtl.get(0).getQuality_scode());
|
||||
iostorinvdisCp.setIvt_level(invdisdtl.get(0).getIvt_level());
|
||||
iostorinvdisCp.setIs_active(true);
|
||||
iostorinvdisCp.setIs_issued(false);
|
||||
iostorinvdisCp.setWork_status(IOSEnum.WORK_STATUS.code("未生成"));
|
||||
iostorinvdisCp.setStoragevehicle_id(invdisdtl.get(0).getStoragevehicle_id());
|
||||
iostorinvdisCp.setStoragevehicle_code(invdisdtl.get(0).getStoragevehicle_code());
|
||||
iostorinvdisCp.setStoragevehicle_type(invdisdtl.get(0).getStoragevehicle_type());
|
||||
iostorinvdisCp.setQty_unit_id(invdisdtl.get(0).getQty_unit_id());
|
||||
iostorinvdisCp.setQty_unit_name(invdisdtl.get(0).getQty_unit_name());
|
||||
iostorinvdisCp.setPlan_qty(new BigDecimal(row.getStorage_qty()));
|
||||
iostorinvdisCp.setReal_qty(iostorinvdisCp.getPlan_qty());
|
||||
iostorinvdisCp.setWork_status(IOSEnum.WORK_STATUS.code("生成"));
|
||||
iostorinvdisCp.setPoint_code(structattr.getStruct_code());
|
||||
//设置入库点
|
||||
invdis.add(iostorinvdisCp);
|
||||
}
|
||||
}
|
||||
iostorinvdtlCpService.batchInsert(invdtl);
|
||||
iStIvtIostorinvdisdtlCpService.batchInsert(invdisdtl);
|
||||
iostorinvdisCpService.batchInsert(invdis);
|
||||
// 插入分配
|
||||
StIvtStructattr stIvtStructattr = structattr;
|
||||
// 2.更新分配明细、分配、明细、主表
|
||||
updateDivIos(stIvtStructattr,new JSONObject(MapOf.of("iostorinv_id",stIvtIostorinvCp.getIostorinv_id(),"storagevehicle_code",item.getString("storagevehicle_code"),rows.get(i).getStoragevehicle_code())),stIvtIostorinvCp);
|
||||
// 3.更新仓位状态 - 锁定
|
||||
stIvtStructattr.setLock_type(IOSEnum.LOCK_TYPE.code("入库锁"));
|
||||
stIvtStructattr.setUpdate_id(SecurityUtils.getCurrentUserId());
|
||||
stIvtStructattr.setUpdate_name(SecurityUtils.getCurrentNickName());
|
||||
stIvtStructattr.setUpdate_time(new Date());
|
||||
stIvtStructattr.setInv_type(IOSEnum.IO_TYPE.code("入库"));
|
||||
stIvtStructattr.setInv_id(stIvtIostorinvCp.getIostorinv_id());
|
||||
stIvtStructattr.setInv_code(stIvtIostorinvCp.getBill_code());
|
||||
structattrService.updateById(stIvtStructattr);
|
||||
// 4.更新库存
|
||||
Map<String, List<StIvtIostorinvdisCp>> collect = iostorinvdisCpService.list(
|
||||
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
|
||||
.eq(StIvtIostorinvdisCp::getIostorinv_id, stIvtIostorinvCp.getIostorinv_id())
|
||||
.eq(StIvtIostorinvdisCp::getStoragevehicle_code, stIvtIostorinvCp)
|
||||
)
|
||||
.stream()
|
||||
.collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id));
|
||||
|
||||
for (List<StIvtIostorinvdisCp> list : collect.values()) {
|
||||
BigDecimal planqty = list
|
||||
.stream()
|
||||
.map(StIvtIostorinvdisCp::getReal_qty)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
StIvtIostorinvdisCp disDao_1 = list.get(0);
|
||||
disDao_1.setPlan_qty(planqty);
|
||||
StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(disDao_1.getIostorinvdtl_id());
|
||||
JSONObject param = ivtDataParam(disDao_1, ChangeIvtUtil.ADDWAREHOUSING_QTY, dtlDao.getBase_billdtl_id());
|
||||
param.put("product_area", stIvtIostorinvCp.getProduct_area());
|
||||
param.put("stor_id", stIvtIostorinvCp.getStor_id());
|
||||
param.put("bill_code",stIvtIostorinvCp.getBill_code());
|
||||
param.put("inv_id",stIvtIostorinvCp.getIostorinv_id());
|
||||
param.put("bill_type_scode",stIvtIostorinvCp.getBill_type());
|
||||
iStIvtStructivtCpService.UpdateIvt(param);
|
||||
// iStIvtIostorinvCpService.setPoint(new JSONObject(MapOf.of("point_code",structattr.getStruct_code(),"iostorinvdis_id",iostorinvdisCp.getIostorinvdis_id())));
|
||||
}
|
||||
PointEvent event = PointEvent.builder()
|
||||
.type(AcsTaskEnum.TASK_STRUCT_CP_IN)
|
||||
.acs_task_type("8")
|
||||
.task_group_id(IdUtil.getStringId())
|
||||
.point_code3(structattr.getStruct_code())
|
||||
.point_code1(structattr.getStruct_code())
|
||||
.vehicle_code(item.getString("point_code"))
|
||||
.product_area("A1") // 暂时写死
|
||||
// .callback((Consumer<String>) disDao::setTask_id)
|
||||
.build();
|
||||
BussEventMulticaster.Publish(event);
|
||||
// 2.调用PC成品入库服务设置起点
|
||||
// JSONObject paramTask = createTaskData(item);
|
||||
// 2.调用PC成品入库服务下发任务
|
||||
// iStIvtIostorinvCpService.sendTask(paramTask);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public JSONObject ivtDataParam(StIvtIostorinvdisCp disDao,String change_type,String sale_id) {
|
||||
JSONObject ivtParam = new JSONObject();
|
||||
ivtParam.put("struct_id", disDao.getStruct_id());
|
||||
ivtParam.put("material_id", disDao.getMaterial_id());
|
||||
ivtParam.put("pcsn", disDao.getPcsn());
|
||||
ivtParam.put("quality_scode", disDao.getQuality_scode());
|
||||
ivtParam.put("ivt_level", disDao.getIvt_level());
|
||||
ivtParam.put("change_qty", disDao.getReal_qty());
|
||||
ivtParam.put("change_type", change_type);
|
||||
ivtParam.put("sale_id", sale_id);
|
||||
|
||||
return ivtParam;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private void updateDivIos(StIvtStructattr attrDao, JSONObject whereJson,StIvtIostorinvCp stIvtIostorinvCp) {
|
||||
/* 分配货位更新:
|
||||
更新分配明细、分配、明细、主表
|
||||
*/
|
||||
|
||||
// 1.更新此托盘下的所有分配明细表
|
||||
iStIvtIostorinvdisdtlCpService.update(
|
||||
new StIvtIostorinvdisdtlCp()
|
||||
.setSect_id(attrDao.getSect_id())
|
||||
.setSect_code(attrDao.getSect_code())
|
||||
.setSect_name(attrDao.getSect_name())
|
||||
.setStruct_id(attrDao.getStruct_id())
|
||||
.setStruct_code(attrDao.getStruct_code())
|
||||
.setStruct_name(attrDao.getStruct_name()),
|
||||
new QueryWrapper<StIvtIostorinvdisdtlCp>().lambda()
|
||||
.eq(StIvtIostorinvdisdtlCp::getIostorinv_id, whereJson.getString("iostorinv_id"))
|
||||
.eq(StIvtIostorinvdisdtlCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
|
||||
);
|
||||
|
||||
// 2.更新分配表
|
||||
iostorinvdisCpService.update(
|
||||
new StIvtIostorinvdisCp()
|
||||
.setSect_id(attrDao.getSect_id())
|
||||
.setSect_code(attrDao.getSect_code())
|
||||
.setSect_name(attrDao.getSect_name())
|
||||
.setStruct_id(attrDao.getStruct_id())
|
||||
.setStruct_code(attrDao.getStruct_code())
|
||||
.setStruct_name(attrDao.getStruct_name()),
|
||||
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
|
||||
.eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id"))
|
||||
.eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
|
||||
);
|
||||
|
||||
// 3.更新明细表
|
||||
Map<String, List<StIvtIostorinvdisCp>> collect = iostorinvdisCpService.list(
|
||||
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
|
||||
.eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id"))
|
||||
.eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
|
||||
)
|
||||
.stream()
|
||||
.filter(row -> ObjectUtil.isNotEmpty(row.getStruct_id()))
|
||||
.collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id));
|
||||
|
||||
for (List<StIvtIostorinvdisCp> collectList : collect.values()) {
|
||||
// 计算已分配
|
||||
BigDecimal qty = collectList
|
||||
.stream()
|
||||
.map(StIvtIostorinvdisCp::getReal_qty)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(collectList.get(0).getIostorinvdtl_id());
|
||||
|
||||
// 明细已分配数量
|
||||
BigDecimal assign_qty = NumberUtil.add(dtlDao.getAssign_qty(), qty);
|
||||
// 明细未分配数量
|
||||
BigDecimal unAssign_qty = NumberUtil.sub(dtlDao.getUnassign_qty(), qty);
|
||||
|
||||
dtlDao.setAssign_qty(assign_qty);
|
||||
dtlDao.setUnassign_qty(unAssign_qty);
|
||||
|
||||
if (unAssign_qty.doubleValue() == 0) {
|
||||
dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配完"));
|
||||
} else {
|
||||
dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中"));
|
||||
}
|
||||
|
||||
iostorinvdtlCpService.updateById(dtlDao);
|
||||
}
|
||||
|
||||
// 4.更新主表
|
||||
stIvtIostorinvCp.setUpdate_id(SecurityUtils.getCurrentUserId());
|
||||
stIvtIostorinvCp.setUpdate_name(SecurityUtils.getCurrentNickName());
|
||||
stIvtIostorinvCp.setUpdate_time(new Date());
|
||||
stIvtIostorinvCp.setDis_id(SecurityUtils.getCurrentUserId());
|
||||
stIvtIostorinvCp.setDis_name(SecurityUtils.getCurrentNickName());
|
||||
stIvtIostorinvCp.setDis_time(DateUtil.now());
|
||||
|
||||
// 查询主表下所有明细
|
||||
List<StIvtIostorinvdtlCp> dtlDaoList = iostorinvdtlCpService.list(
|
||||
new QueryWrapper<StIvtIostorinvdtlCp>().lambda()
|
||||
.eq(StIvtIostorinvdtlCp::getIostorinv_id, stIvtIostorinvCp.getIostorinv_id())
|
||||
);
|
||||
|
||||
// 判断是否都为分配完
|
||||
boolean is_true = dtlDaoList
|
||||
.stream()
|
||||
.allMatch(row -> row.getBill_status().equals(IOSEnum.BILL_STATUS.code("分配完")));
|
||||
|
||||
if (is_true) {
|
||||
// 更新主表为分配完
|
||||
stIvtIostorinvCp.setBill_status(IOSEnum.BILL_STATUS.code("分配完"));
|
||||
} else {
|
||||
// 更新主表为分配中
|
||||
stIvtIostorinvCp.setBill_status(IOSEnum.BILL_STATUS.code("分配中"));
|
||||
}
|
||||
stIvtIostorinvCp.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
|
||||
}
|
||||
@Override
|
||||
public JSONObject getAll(JSONObject whereJson) {
|
||||
List<Map> list = iStIvtIostorinvCpService.getPdaAll(whereJson);
|
||||
|
||||
@@ -740,7 +740,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
|
||||
iMdPbBucketrecordService.update(
|
||||
MdPbBucketrecord.builder()
|
||||
.status(MasterEnum.BOX_STATUS.code("入库"))
|
||||
.instor_optid(Long.getLong(SecurityUtils.getCurrentUserId()))
|
||||
.instor_optid(SecurityUtils.getCurrentUserId())
|
||||
.instor_optname(SecurityUtils.getCurrentNickName())
|
||||
.instor_time(DateUtil.now())
|
||||
.build(),
|
||||
|
||||
@@ -105,7 +105,7 @@ public class StIvtIostorinvdisdtlCpServiceImpl extends ServiceImpl<StIvtIostorin
|
||||
MdPbBucketrecord.builder()
|
||||
.status(MasterEnum.BOX_STATUS.code("组盘"))
|
||||
.storagevehicle_code(item.getString("storagevehicle_code"))
|
||||
.instor_optid(Long.getLong(SecurityUtils.getCurrentUserId()))
|
||||
.instor_optid(SecurityUtils.getCurrentUserId())
|
||||
.instor_optname(SecurityUtils.getCurrentNickName())
|
||||
.instor_time(DateUtil.now())
|
||||
.build(),
|
||||
|
||||
@@ -90,18 +90,17 @@ public class StIvtIostorinvdtlCpServiceImpl extends ServiceImpl<StIvtIostorinvdt
|
||||
new QueryWrapper<MdMeMaterialbase>().lambda()
|
||||
.eq(MdMeMaterialbase::getMaterial_code, json.getString("material_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(row.getSource_bill_code()+"对应销售单"+row.getBase_bill_code()+"_"+row.getBase_bill_table()+"不存在!");
|
||||
}
|
||||
// if (ObjectUtil.isEmpty(orderDao)) {
|
||||
// throw new BadRequestException(row.getSource_bill_code()+"对应销售单"+row.getBase_bill_code()+"_"+row.getBase_bill_table()+"不存在!");
|
||||
// }
|
||||
|
||||
row.setBase_billdtl_id(orderDao.getSale_id());
|
||||
row.setBase_billdtl_id(orderDao==null?"":orderDao.getSale_id());
|
||||
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());
|
||||
|
||||
@@ -200,7 +200,8 @@ public class StIvtMoreorlessmstCpServiceImpl extends ServiceImpl<StIvtMoreorless
|
||||
|
||||
if (ObjectUtil.isNotEmpty(buckDao)) {
|
||||
// 更新箱重量
|
||||
buckDao.setStorage_qty(NumberUtil.sub(buckDao.getStorage_qty(), mol_qty));
|
||||
BigDecimal sub = NumberUtil.sub(new BigDecimal(buckDao.getStorage_qty()), mol_qty);
|
||||
buckDao.setStorage_qty(String.valueOf(sub.intValue()));
|
||||
iMdPbBucketrecordService.updateById(buckDao);
|
||||
}
|
||||
|
||||
@@ -296,16 +297,16 @@ public class StIvtMoreorlessmstCpServiceImpl extends ServiceImpl<StIvtMoreorless
|
||||
.bucketunique(dtl.getBucketunique())
|
||||
.material_id(dtl.getMaterial_id())
|
||||
.pcsn(dtl.getPcsn())
|
||||
.qty_unit_id(Long.valueOf(dtl.getQty_unit_id()))
|
||||
.qty_unit_id(dtl.getQty_unit_id())
|
||||
.qty_unit_name(dtl.getQty_unit_name())
|
||||
.storage_qty(dtl.getMol_qty())
|
||||
.storage_qty(dtl.getMol_qty().toString())
|
||||
.status(MasterEnum.BOX_STATUS.code("入库"))
|
||||
.storagevehicle_code(dtl.getStoragevehicle_code())
|
||||
.build();
|
||||
|
||||
iMdPbBucketrecordService.createBucke(param);
|
||||
} else {
|
||||
buckDao.setStorage_qty(dtl.getMol_qty());
|
||||
buckDao.setStorage_qty(dtl.getMol_qty().toString());
|
||||
buckDao.setStatus(MasterEnum.BOX_STATUS.code("入库"));
|
||||
iMdPbBucketrecordService.updateById(buckDao);
|
||||
}
|
||||
@@ -335,16 +336,16 @@ public class StIvtMoreorlessmstCpServiceImpl extends ServiceImpl<StIvtMoreorless
|
||||
.bucketunique(dtl.getBucketunique())
|
||||
.material_id(dtl.getMaterial_id())
|
||||
.pcsn(dtl.getPcsn())
|
||||
.qty_unit_id(Long.valueOf(dtl.getQty_unit_id()))
|
||||
.qty_unit_id(dtl.getQty_unit_id())
|
||||
.qty_unit_name(dtl.getQty_unit_name())
|
||||
.storage_qty(dtl.getMol_qty())
|
||||
.storage_qty(dtl.getMol_qty().toString())
|
||||
.status(MasterEnum.BOX_STATUS.code("入库"))
|
||||
.storagevehicle_code(dtl.getStoragevehicle_code())
|
||||
.build();
|
||||
|
||||
iMdPbBucketrecordService.createBucke(param);
|
||||
} else {
|
||||
buckDao.setStorage_qty(NumberUtil.add(buckDao.getStorage_qty(), dtl.getMol_qty()));
|
||||
buckDao.setStorage_qty(NumberUtil.add(new BigDecimal(buckDao.getStorage_qty()), dtl.getMol_qty()).toString());
|
||||
buckDao.setStatus(MasterEnum.BOX_STATUS.code("入库"));
|
||||
iMdPbBucketrecordService.updateById(buckDao);
|
||||
}
|
||||
|
||||
@@ -558,13 +558,14 @@ public class StIvtIostorinvBcpOutServiceImpl extends ServiceImpl<StIvtIostorinvB
|
||||
iSchBaseTaskService.update(
|
||||
new UpdateWrapper<SchBaseTask>().lambda()
|
||||
.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode())
|
||||
.eq(SchBaseTask::getTask_id, mstDao.getTask_id())
|
||||
.eq(SchBaseTask::getTask_id,task_id)
|
||||
);
|
||||
|
||||
// 更新主表
|
||||
mstDao.setTask_id("");
|
||||
mstDao.setWork_status(IOSEnum.WORK_STATUS.code("未生成"));
|
||||
mstDao.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
|
||||
this.updateById(mstDao);
|
||||
if (mstDao!=null){
|
||||
// 更新主表
|
||||
mstDao.setTask_id("");
|
||||
mstDao.setWork_status(IOSEnum.WORK_STATUS.code("未生成"));
|
||||
mstDao.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
|
||||
this.updateById(mstDao);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
116
mes/qd/src/views/wms/pcs/deliveryorder/UploadDialog.vue
Normal file
116
mes/qd/src/views/wms/pcs/deliveryorder/UploadDialog.vue
Normal file
@@ -0,0 +1,116 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
title="导入Excel文件"
|
||||
append-to-body
|
||||
:visible.sync="dialogVisible"
|
||||
destroy-on-close
|
||||
width="400px"
|
||||
:show-close="true"
|
||||
@close="close"
|
||||
@open="open"
|
||||
>
|
||||
<el-upload
|
||||
ref="upload"
|
||||
class="upload-demo"
|
||||
action=""
|
||||
drag
|
||||
:on-exceed="is_one"
|
||||
:limit="1"
|
||||
:auto-upload="false"
|
||||
:multiple="false"
|
||||
:show-file-list="true"
|
||||
:on-change="uploadByJsqd"
|
||||
:file-list="fileList"
|
||||
accept=".xlsx,.xls"
|
||||
>
|
||||
<i class="el-icon-upload" />
|
||||
<div class="el-upload__text">
|
||||
将文件拖到此处,或
|
||||
<em>点击上传</em>
|
||||
</div>
|
||||
<div slot="tip" class="el-upload__tip">只能上传Excel文件,且不超过10MB</div>
|
||||
</el-upload>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="submit">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import crudSaleOrder from '@/views/wms/pcs/saleorder/saleOrder'
|
||||
import CRUD, { crud } from '@crud/crud'
|
||||
|
||||
export default {
|
||||
name: 'UploadDialog',
|
||||
mixins: [crud()],
|
||||
components: {},
|
||||
props: {
|
||||
dialogShow: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
openParam: {
|
||||
type: String
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
dialogVisible: false,
|
||||
fileList: [],
|
||||
file1: ''
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
dialogShow: {
|
||||
handler(newValue, oldValue) {
|
||||
this.dialogVisible = newValue
|
||||
}
|
||||
},
|
||||
openParam: {
|
||||
handler(newValue, oldValue) {
|
||||
this.opendtlParam = newValue
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
open() {
|
||||
},
|
||||
close() {
|
||||
this.$emit('update:dialogShow', false)
|
||||
},
|
||||
is_one() {
|
||||
this.crud.notify('只能上传一个excel文件!', CRUD.NOTIFICATION_TYPE.WARNING)
|
||||
},
|
||||
// 文件校验方法
|
||||
beforeAvatarUpload(file) {
|
||||
// 不能导入大小超过2Mb的文件
|
||||
if (file.size > 10 * 1024 * 1024) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
// 文件发生改变就会触发的事件
|
||||
uploadByJsqd(file) {
|
||||
this.file1 = file
|
||||
},
|
||||
submit() {
|
||||
if (this.beforeAvatarUpload(this.file1)) {
|
||||
this.fileList.name = this.file1.name
|
||||
this.fileList.url = ''
|
||||
var formdata = new FormData()
|
||||
formdata.append('file', this.file1.raw)
|
||||
// excelImport:请求接口 formdata:传递参数
|
||||
crudSaleOrder.excelImport(formdata).then((res) => {
|
||||
this.crud.notify('导入成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
|
||||
this.$emit('tableChanged3', '')
|
||||
this.$emit('update:dialogShow', false)
|
||||
})
|
||||
} else {
|
||||
this.crud.notify('文件过大,请上传小于10MB的文件〜', CRUD.NOTIFICATION_TYPE.WARNING)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -230,6 +230,7 @@ import CRUD, {presenter, header, form, crud} from '@crud/crud'
|
||||
import rrOperation from '@crud/RR.operation'
|
||||
import crudOperation from '@crud/CRUD.operation'
|
||||
import udOperation from '@crud/UD.operation'
|
||||
import UploadDialog from '@/views/wms/pcs/deliveryorder/UploadDialog'
|
||||
import Dialog from '@/views/wms/pcs/deliveryorder/Dialog'
|
||||
import pagination from '@crud/Pagination'
|
||||
import Treeselect, {LOAD_CHILDREN_OPTIONS} from '@riophae/vue-treeselect'
|
||||
@@ -261,7 +262,7 @@ const defaultForm = {
|
||||
export default {
|
||||
name: 'DeliveryOrder',
|
||||
dicts: ['PCS_DELIVER_TYPE', 'PCS_DELI_STATUS'],
|
||||
components: {pagination, crudOperation, rrOperation, udOperation, Treeselect, Dialog},
|
||||
components: {pagination, crudOperation, rrOperation, udOperation, Treeselect, Dialog, UploadDialog},
|
||||
mixins: [presenter(), header(), form(defaultForm), crud()],
|
||||
cruds() {
|
||||
return CRUD({
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
title="发货单导入"
|
||||
append-to-body
|
||||
:visible.sync="dialogVisible"
|
||||
destroy-on-close
|
||||
:show-close="true"
|
||||
width="500px"
|
||||
v-loading.fullscreen.lock="fullscreenLoading"
|
||||
@close="close"
|
||||
>
|
||||
<div class="head-container">
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<el-form ref="form" :model="form1" :rules="rules" size="mini" label-width="110px">
|
||||
<el-form-item label="日期区间:" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="form.createTime"
|
||||
type="daterange"
|
||||
value-format="yyyy-MM-dd"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="发货单号:" prop="bill_code">
|
||||
<el-input v-model="form.bill_code" style="width: 350px;"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-button class="filter-item" size="mini" type="success" icon="el-icon-search" @click="queryStruct">确认
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import CRUD, {header, presenter} from '@crud/crud'
|
||||
import rrOperation from '@crud/RR.operation'
|
||||
import pagination from '@crud/Pagination'
|
||||
import DateRangePicker from '@/components/DateRangePicker/index'
|
||||
import crudSap from '@/api/wms/ext/sap'
|
||||
|
||||
export default {
|
||||
name: 'ImportOrder',
|
||||
components: {rrOperation, pagination, DateRangePicker},
|
||||
cruds() {
|
||||
},
|
||||
mixins: [presenter(), header()],
|
||||
props: {
|
||||
dialogShow: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
fullscreenLoading: false,
|
||||
dialogVisible: false,
|
||||
form: {}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
dialogShow: {
|
||||
handler(newValue, oldValue) {
|
||||
this.dialogVisible = newValue
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
close() {
|
||||
this.form = {}
|
||||
this.$emit('update:dialogShow', false)
|
||||
this.$emit('tableChanged', this.rows)
|
||||
},
|
||||
queryStruct() {
|
||||
|
||||
this.fullscreenLoading = true
|
||||
if (this.form.createTime) {
|
||||
this.form.date_begin = this.form.createTime[0]
|
||||
this.form.date_end = this.form.createTime[1]
|
||||
}
|
||||
crudSap.getDeliveryNote(this.form).then(res => {
|
||||
this.crud.notify(res.message, CRUD.NOTIFICATION_TYPE.SUCCESS)
|
||||
this.fullscreenLoading = false
|
||||
}).catch(() => {
|
||||
this.fullscreenLoading = false
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
title="导入Excel文件"
|
||||
append-to-body
|
||||
:visible.sync="dialogVisible"
|
||||
destroy-on-close
|
||||
width="400px"
|
||||
:show-close="true"
|
||||
@close="close"
|
||||
@open="open"
|
||||
>
|
||||
<el-upload
|
||||
ref="upload"
|
||||
class="upload-demo"
|
||||
action=""
|
||||
drag
|
||||
:on-exceed="is_one"
|
||||
:limit="1"
|
||||
:auto-upload="false"
|
||||
:multiple="false"
|
||||
:show-file-list="true"
|
||||
:on-change="uploadByJsqd"
|
||||
:file-list="fileList"
|
||||
accept=".xlsx,.xls"
|
||||
>
|
||||
<i class="el-icon-upload" />
|
||||
<div class="el-upload__text">
|
||||
将文件拖到此处,或
|
||||
<em>点击上传</em>
|
||||
</div>
|
||||
<div slot="tip" class="el-upload__tip">只能上传Excel文件,且不超过10MB</div>
|
||||
</el-upload>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="submit">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import crudbucketrecord from '@/views/wms/storage_manage/product/bucketRecord/bucketrecord'
|
||||
import CRUD, { crud } from '@crud/crud'
|
||||
|
||||
export default {
|
||||
name: 'UploadDialog',
|
||||
mixins: [crud()],
|
||||
components: {},
|
||||
props: {
|
||||
dialogShow: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
openParam: {
|
||||
type: String
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
dialogVisible: false,
|
||||
fileList: [],
|
||||
file1: ''
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
dialogShow: {
|
||||
handler(newValue, oldValue) {
|
||||
this.dialogVisible = newValue
|
||||
}
|
||||
},
|
||||
openParam: {
|
||||
handler(newValue, oldValue) {
|
||||
this.opendtlParam = newValue
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
open() {
|
||||
},
|
||||
close() {
|
||||
this.$emit('update:dialogShow', false)
|
||||
},
|
||||
is_one() {
|
||||
this.crud.notify('只能上传一个excel文件!', CRUD.NOTIFICATION_TYPE.WARNING)
|
||||
},
|
||||
// 文件校验方法
|
||||
beforeAvatarUpload(file) {
|
||||
// 不能导入大小超过2Mb的文件
|
||||
if (file.size > 10 * 1024 * 1024) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
// 文件发生改变就会触发的事件
|
||||
uploadByJsqd(file) {
|
||||
this.file1 = file
|
||||
},
|
||||
submit() {
|
||||
if (this.beforeAvatarUpload(this.file1)) {
|
||||
this.fileList.name = this.file1.name
|
||||
this.fileList.url = ''
|
||||
var formdata = new FormData()
|
||||
formdata.append('file', this.file1.raw)
|
||||
crudbucketrecord.excelImport(formdata).then((res) => {
|
||||
debugger
|
||||
this.crud.notify('导入成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
|
||||
this.$emit('tableChanged3', '')
|
||||
this.$emit('update:dialogShow', false)
|
||||
})
|
||||
} else {
|
||||
this.crud.notify('文件过大,请上传小于10MB的文件〜', CRUD.NOTIFICATION_TYPE.WARNING)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function add(data) {
|
||||
return request({
|
||||
url: '/api/mdPbBucketrecord',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function del(ids) {
|
||||
return request({
|
||||
url: '/api/mdPbBucketrecord/',
|
||||
method: 'delete',
|
||||
data: ids
|
||||
})
|
||||
}
|
||||
|
||||
export function edit(data) {
|
||||
return request({
|
||||
url: '/api/mdPbBucketrecord',
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function addPersons(data) {
|
||||
return request({
|
||||
url: '/api/mdPbBucketrecord/addPersons',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function getHeader(data) {
|
||||
return request({
|
||||
url: '/api/mdPbBucketrecord/getHeader',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function getDeviceIdByUserId(data) {
|
||||
return request({
|
||||
url: '/api/mdPbBucketrecord/getDeviceIdByUserId',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function addDevices(data) {
|
||||
return request({
|
||||
url: '/api/mdPbBucketrecord/addDevices',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteRow(data) {
|
||||
return request({
|
||||
url: '/api/mdPbBucketrecord/deleteRow',
|
||||
method: 'delete',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function excelImport(data) {
|
||||
return request({
|
||||
url: '/api/mdPbBucketrecord/excelImport',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export default { add, edit, del, addPersons, getHeader, deleteRow, addDevices,excelImport }
|
||||
@@ -0,0 +1,256 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<!--工具栏-->
|
||||
<div class="head-container">
|
||||
<div v-if="crud.props.searchToggle">
|
||||
<!-- 搜索 -->
|
||||
<el-form
|
||||
:inline="true"
|
||||
class="demo-form-inline"
|
||||
label-position="right"
|
||||
label-width="80px"
|
||||
label-suffix=":"
|
||||
>
|
||||
<el-form-item label="订单号">
|
||||
<el-input v-model="query.sale_code" clearable placeholder="订单号" style="width: 200px;"
|
||||
class="filter-item"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="托盘号">
|
||||
<el-input v-model="query.storagevehicle_code" clearable placeholder="托盘号" style="width: 200px;"
|
||||
class="filter-item"/>
|
||||
</el-form-item>
|
||||
<rrOperation :crud="crud"/>
|
||||
</el-form>
|
||||
|
||||
</div>
|
||||
<!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
|
||||
<crudOperation :permission="permission">
|
||||
<el-button
|
||||
slot="right"
|
||||
class="filter-item"
|
||||
type="warning"
|
||||
icon="el-icon-upload2"
|
||||
size="mini"
|
||||
@click="uploadShow = true"
|
||||
>
|
||||
导入
|
||||
</el-button>
|
||||
</crudOperation>
|
||||
<!--表单组件-->
|
||||
<el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0"
|
||||
:title="crud.status.title">
|
||||
<el-form
|
||||
ref="form"
|
||||
:inline="true"
|
||||
:model="form"
|
||||
label-width="160px"
|
||||
style="border: 1px solid #cfe0df;margin-top: 10px;padding-top: 10px;"
|
||||
>
|
||||
<el-form-item label="托盘号" prop="deliver_code">
|
||||
<el-input v-model="form.storagevehicle_code" style="width: 200px;" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销售单号" prop="deliver_code">
|
||||
<el-input v-model="form.sale_code" style="width: 200px;" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销售单明细" prop="seq_no">
|
||||
<el-input v-model="form.seq_no" style="width: 200px;" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料编码" prop="material_code">
|
||||
<el-input v-model="form.material_code" style="width: 200px;" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物料规格" prop="material_spec">
|
||||
<el-input-number v-model="form.material_spec" style="width: 200px;" />
|
||||
</el-form-item>
|
||||
<el-form-item label="数量" prop="storage_qty">
|
||||
<el-input v-model="form.storage_qty" style="width: 200px;" />
|
||||
</el-form-item>
|
||||
<el-form-item label="计量单位" prop="unit_name">
|
||||
<!-- unit_list-->
|
||||
<el-select v-model="form.qty_unit_id" placeholder="" style="width: 200px">
|
||||
<el-option
|
||||
v-for="item in unit_list"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="组盘时间" prop="create_time">
|
||||
<el-input v-model="form.create_time" style="width: 200px;" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-input v-model="form.status" style="width: 200px;" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-form ref="form" :model="form" :rules="rules" size="mini" label-width="80px"></el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="text" @click="crud.cancelCU">取消</el-button>
|
||||
<el-button :loading="crud.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<!--表格渲染-->
|
||||
<el-table ref="table" v-loading="crud.loading" :data="crud.data" size="mini" style="width: 100%;"
|
||||
@selection-change="crud.selectionChangeHandler">
|
||||
<el-table-column type="selection" width="55"/>
|
||||
<el-table-column prop="storagevehicle_code" label="托盘号"/>
|
||||
<el-table-column prop="sale_code" label="销售单号"/>
|
||||
<el-table-column prop="seq_no" label="销售单明细"/>
|
||||
<el-table-column prop="material_code" label="物料编码"/>
|
||||
<el-table-column prop="material_spec" label="物料规格"/>
|
||||
<el-table-column prop="storage_qty" label="数量"/>
|
||||
<el-table-column prop="qty_unit_id" label="计量单位"/>
|
||||
<el-table-column prop="create_time" label="组盘时间"/>
|
||||
<el-table-column prop="status" label="状态">
|
||||
<template slot-scope="scope">
|
||||
{{ dict.label.PCS_DELI_STATUS[scope.row.status] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--分页组件-->
|
||||
<pagination/>
|
||||
</div>
|
||||
<UploadDialog
|
||||
:dialog-show.sync="uploadShow"
|
||||
@tableChanged3="tableChanged3"
|
||||
/>
|
||||
<Dialog :dialog-show.sync="dialogShow" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import crudbucketrecord from '@/views/wms/storage_manage/product/bucketRecord/bucketrecord'
|
||||
import CRUD, {presenter, header, form, crud} from '@crud/crud'
|
||||
import rrOperation from '@crud/RR.operation'
|
||||
import crudOperation from '@crud/CRUD.operation'
|
||||
import udOperation from '@crud/UD.operation'
|
||||
import UploadDialog from '@/views/wms/storage_manage/product/bucketRecord/UploadDialog'
|
||||
import Dialog from '@/views/wms/storage_manage/product/bucketRecord/Dialog'
|
||||
import pagination from '@crud/Pagination'
|
||||
import Treeselect, {LOAD_CHILDREN_OPTIONS} from '@riophae/vue-treeselect'
|
||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||
import crudClassstandard from '@/api/wms/basedata/master/classstandard'
|
||||
|
||||
const defaultForm = {
|
||||
deliver_id: null,
|
||||
deliver_code: null,
|
||||
seq_no: null,
|
||||
deliver_type: null,
|
||||
material_id: null,
|
||||
status: null,
|
||||
delivery_qty: null,
|
||||
cust_id: null,
|
||||
qty_unit_id: null,
|
||||
sale_id: null,
|
||||
sale_code: null,
|
||||
sale_seq_no: null,
|
||||
create_id: null,
|
||||
create_name: null,
|
||||
create_time: null,
|
||||
update_optid: null,
|
||||
update_optname: null,
|
||||
update_time: null,
|
||||
cust_code: null,
|
||||
cust_name: null
|
||||
}
|
||||
export default {
|
||||
name: 'DeliveryOrder',
|
||||
dicts: ['PCS_DELIVER_TYPE', 'PCS_DELI_STATUS'],
|
||||
components: {pagination, crudOperation, rrOperation, udOperation, Treeselect, Dialog, UploadDialog},
|
||||
mixins: [presenter(), header(), form(defaultForm), crud()],
|
||||
cruds() {
|
||||
return CRUD({
|
||||
title: '发货单', url: '/api/mdPbBucketrecord', idField: 'bucket_record_id', sort: 'storagevehicle_code,desc',
|
||||
optShow: {
|
||||
add: true,
|
||||
edit: false,
|
||||
del: false,
|
||||
reset: true,
|
||||
download: false
|
||||
},
|
||||
crudMethod: {...crudbucketrecord}
|
||||
})
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
classes3: [],
|
||||
uploadShow: false,
|
||||
dialogShow: false,
|
||||
permission: {},
|
||||
rules: {},
|
||||
unit_list: [{ value: 16, label: '个\\只' }],
|
||||
queryTypeOptions: [
|
||||
{key: 'deliver_code', display_name: '发货单号'}
|
||||
]
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.initClass3()
|
||||
},
|
||||
methods: {
|
||||
queryClassId() {
|
||||
const param = {
|
||||
'class_idStr': this.class_idStr
|
||||
}
|
||||
crudClassstandard.queryClassById(param).then(res => {
|
||||
this.classes = res.content.map(obj => {
|
||||
if (obj.hasChildren) {
|
||||
obj.children = null
|
||||
}
|
||||
return obj
|
||||
})
|
||||
})
|
||||
},
|
||||
tableChanged3() {
|
||||
this.crud.toQuery()
|
||||
},
|
||||
importin() {
|
||||
this.dialogShow = true
|
||||
},
|
||||
buildTree(classes) {
|
||||
classes.forEach(data => {
|
||||
if (data.children) {
|
||||
this.buildTree(data.children)
|
||||
}
|
||||
if (data.hasChildren && !data.children) {
|
||||
data.children = null // 重点代码
|
||||
}
|
||||
})
|
||||
},
|
||||
// 获取子节点数据
|
||||
loadChildNodes({action, parentNode, callback}) {
|
||||
if (action === LOAD_CHILDREN_OPTIONS) {
|
||||
crudClassstandard.getClass({pid: parentNode.id}).then(res => {
|
||||
parentNode.children = res.content.map(function (obj) {
|
||||
if (obj.hasChildren) {
|
||||
obj.children = null
|
||||
}
|
||||
return obj
|
||||
})
|
||||
setTimeout(() => {
|
||||
callback()
|
||||
}, 100)
|
||||
})
|
||||
}
|
||||
},
|
||||
initClass3() {
|
||||
const param = {
|
||||
parent_class_code: '07'
|
||||
}
|
||||
crudClassstandard.getClassType(param).then(res => {
|
||||
const data = res.content
|
||||
this.buildTree(data)
|
||||
this.classes3 = data
|
||||
})
|
||||
},
|
||||
// 钩子:在获取表格数据之前执行,false 则代表不获取数据
|
||||
[CRUD.HOOK.beforeRefresh]() {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
Reference in New Issue
Block a user