add:添加组盘页面

This commit is contained in:
zhangzq
2025-07-29 20:32:51 +08:00
parent 62294fcdf5
commit 9916121e63
54 changed files with 1569 additions and 835 deletions

View File

@@ -205,6 +205,7 @@
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<!-- druid数据源驱动 -->

View File

@@ -100,7 +100,7 @@ public class LogAspect {
SysLog log = new SysLog("INFO", System.currentTimeMillis() - currentTime.get());
currentTime.remove();
logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), joinPoint, log);
// logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), joinPoint, log);
return result;
}
@@ -149,7 +149,7 @@ public class LogAspect {
currentTime.remove();
log.setException_detail(ThrowableUtil.getStackTrace(e).getBytes());
HttpServletRequest request = RequestHolder.getHttpServletRequest();
logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), (ProceedingJoinPoint) joinPoint, log);
// logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), (ProceedingJoinPoint) joinPoint, log);
}
public String getUsername() {

View File

@@ -1,9 +1,11 @@
package org.nl.system.controller.dict;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONObject;
import org.nl.common.base.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.logging.annotation.Log;
import org.nl.system.service.dict.ISysDictService;
import org.nl.system.service.dict.dao.Dict;
@@ -36,12 +38,12 @@ public class SysDictController {
@Log("查询字典")
@GetMapping
public ResponseEntity<Object> query(@RequestParam Map whereJson, PageQuery pageable){
return new ResponseEntity<>(TableDataInfo.build(dictService.queryAll(whereJson,pageable)), HttpStatus.OK);
}
@GetMapping(value = "/all")
public ResponseEntity<Object> queryAll(){
return new ResponseEntity<>(dictService.queryAll(),HttpStatus.OK);
@@ -74,7 +76,7 @@ public class SysDictController {
return new ResponseEntity<>(TableDataInfo.build(dictService.queryAllDetail(dictQuery,pageable)),HttpStatus.OK);
}
@GetMapping(value = "/dictDetail/map")
public ResponseEntity<Object> getDictDetailMaps(@RequestParam String dictName){
String[] names = dictName.split("[,]");
@@ -106,5 +108,18 @@ public class SysDictController {
return new ResponseEntity<>(HttpStatus.OK);
}
@GetMapping("/getTableEnum")
@SaIgnore
public ResponseEntity<Object> getTableEnum(@RequestParam Map criteria) {
Object type = criteria.get("code");
Object label = criteria.get("label");
Object value = criteria.get("value");
if (type == null||label == null||value == null){
throw new BadRequestException("参数不能为空");
}
List<Map> maps = dictService.dynamicTableEnum((String) type, (String) label, (String) value);
return new ResponseEntity<>(maps, HttpStatus.OK);
}
}

View File

@@ -85,4 +85,7 @@ public interface ISysDictService extends IService<Dict> {
* @return
*/
List<Dict> queryAll();
List<Map> dynamicTableEnum(String table,String label,String value);
}

View File

@@ -1,8 +1,12 @@
package org.nl.system.service.dict.dao.mapper;
import org.apache.ibatis.annotations.Param;
import org.nl.system.service.dict.dao.Dict;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
import java.util.Map;
/**
* <p>
* 字典表 Mapper 接口
@@ -12,5 +16,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
* @since 2022-12-14
*/
public interface SysDictMapper extends BaseMapper<Dict> {
List<Map> dynamicTableEnum(@Param("table") String table, @Param("label")String label, @Param("value")String value);
}

View File

@@ -2,4 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.system.service.dict.dao.mapper.SysDictMapper">
<select id="dynamicTableEnum" resultType="java.util.Map">
select ${label} as label,${value} as value from ${table}
</select>
</mapper>

View File

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
@@ -194,4 +195,12 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, Dict> impleme
.groupBy(Dict::getCode, Dict::getName));
}
@Override
public List<Map> dynamicTableEnum(String table, String label, String value) {
if (StringUtils.isEmpty(table)||StringUtils.isEmpty(label)||StringUtils.isEmpty(value)){
throw new BadRequestException("参数不能为空");
}
return this.sysDictMapper.dynamicTableEnum(table,label,value);
}
}

View File

@@ -1,7 +1,6 @@
package org.nl.wms.basedata.master.vehicle.service.dao;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@@ -126,19 +125,5 @@ public class Storagevehicleinfo implements Serializable {
*/
private String ext_id;
@TableField(exist = false)
private String material_code;
@TableField(exist = false)
private String material_name;
@TableField(exist = false)
private String point_code;
@TableField(exist = false)
private String point_name;
@TableField(exist = false)
private String storagevehicle_type_name;
}

View File

@@ -5,18 +5,9 @@
<select id="selectPageLeftJoin"
resultType="org.nl.wms.basedata.master.vehicle.service.dao.Storagevehicleinfo">
SELECT
s.*,
mater.material_code,
mater.material_name,
point.point_code,
point.point_name,
class.class_name AS storagevehicle_type_name
s.*
FROM
md_pb_storagevehicleinfo s
LEFT JOIN sch_base_point point ON point.vehicle_code = s.storagevehicle_code
LEFT JOIN ST_IVT_StructIvt ivt ON point.source_id = ivt.struct_id
LEFT JOIN md_base_material mater ON mater.material_id = ivt.material_id
LEFT JOIN md_base_classstandard class ON class.class_code = s.storagevehicle_type
WHERE s.is_delete = '0'
<if test="queryObj.storagevehicle_code_begin != null">
AND s.storagevehicle_code <![CDATA[ >= ]]> queryObj.storagevehicle_code_begin
@@ -24,6 +15,9 @@
<if test="queryObj.storagevehicle_code_end != null">
AND s.storagevehicle_code <![CDATA[ <= ]]> queryObj.storagevehicle_code_end
</if>
<if test="queryObj.storagevehicle_type != null">
AND s.storagevehicle_type = #{queryObj.storagevehicle_type}
</if>
<if test="queryObj.classIds != null">
AND class.class_id IN
<foreach collection="queryObj.classIds" item="code" separator="," open="(" close=")">

View File

@@ -2,20 +2,16 @@ package org.nl.wms.basedata.master.vehicle.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.config.language.LangProcess;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.basedata.master.classification.service.IMdBaseClassstandardService;
import org.nl.wms.basedata.master.classification.service.dao.MdBaseClassstandard;
import org.nl.wms.basedata.master.vehicle.service.IStoragevehicleinfoService;
import org.nl.wms.basedata.master.vehicle.service.dao.mapper.StoragevehicleinfoMapper;
import org.nl.wms.basedata.master.vehicle.service.dao.Storagevehicleinfo;
@@ -23,10 +19,7 @@ import org.nl.wms.basedata.master.vehicle.service.dto.StoragevehicleinfoQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @description 服务实现
@@ -46,11 +39,11 @@ public class StoragevehicleinfoServiceImpl extends ServiceImpl<Storagevehicleinf
@Override
public IPage<Storagevehicleinfo> queryAll(StoragevehicleinfoQuery queryObj, PageQuery page) {
// 获取所有子集
if (ObjectUtil.isNotEmpty(queryObj.getStoragevehicle_type())) {
ArrayList<String> list = mdBaseClassstandardService.getAllChildrenIds(queryObj.getStoragevehicle_type());
list.add(queryObj.getStoragevehicle_type());
queryObj.setClassIds(list);
}
// if (ObjectUtil.isNotEmpty(queryObj.getStoragevehicle_type())) {
// ArrayList<String> list = mdBaseClassstandardService.getAllChildrenIds(queryObj.getStoragevehicle_type());
// list.add(queryObj.getStoragevehicle_type());
// queryObj.setClassIds(list);
// }
IPage<Storagevehicleinfo> pages = new Page<>(page.getPage() + 1, page.getSize());
pages = storagevehicleinfoMapper.selectPageLeftJoin(pages, queryObj);
return pages;
@@ -61,7 +54,6 @@ public class StoragevehicleinfoServiceImpl extends ServiceImpl<Storagevehicleinf
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
entity.setStoragevehicle_id(IdUtil.getSnowflake(1, 1).nextIdStr());
entity.setCreate_id(currentUserId);
entity.setCreate_name(nickName);

View File

@@ -46,7 +46,7 @@ public class MaterialbaseController {
@PostMapping
@Log("新增物料")
public ResponseEntity<Object> create(@Validated @RequestBody MdMeMaterialbase dto) {
public ResponseEntity<Object> create(@Validated @RequestBody JSONObject dto) {
iMdMeMaterialbaseService.create(dto);
return new ResponseEntity<>(HttpStatus.CREATED);
}

View File

@@ -30,7 +30,7 @@ public interface IMdMeMaterialbaseService extends IService<MdMeMaterialbase> {
* 新增物料
* @param dto 物料实体类
*/
void create(MdMeMaterialbase dto);
void create(JSONObject dto);
/**
* 修改物料
* @param dto 物料实体类

View File

@@ -57,7 +57,11 @@ public class MdMeMaterialbase implements Serializable {
/**
* 基本计量单位
*/
private String base_unit_id;
private String measure_unit_id;
/**
* 基本计量名称
*/
private String unit_name;
/**
* 辅助计量单位

View File

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.IdUtil;
@@ -53,8 +54,9 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
@Override
@Transactional(rollbackFor = Exception.class)
public void create(MdMeMaterialbase dto) {
public void create(JSONObject mdMeMaterial) {
// 根据物料编码查询是否有相同物料编码的物料
MdMeMaterialbase dto = mdMeMaterial.toJavaObject(MdMeMaterialbase.class);
MdMeMaterialbase mdMeMaterialbase = this.baseMapper.selectOne(
new QueryWrapper<MdMeMaterialbase>().lambda()
.eq(MdMeMaterialbase::getMaterial_code, dto.getMaterial_code())
@@ -71,6 +73,11 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
dto.setUpdate_optid(SecurityUtils.getCurrentUserId());
dto.setUpdate_optname(SecurityUtils.getCurrentNickName());
dto.setUpdate_time(DateUtil.now());
if (StringUtils.isNotEmpty(mdMeMaterial.getString("qty_unit_name"))){
String[] unitSplit = mdMeMaterial.getString("qty_unit_name").split("@");
dto.setMeasure_unit_id(unitSplit[0]);
dto.setUnit_name(unitSplit[1]);
}
this.save(dto);
}

View File

@@ -0,0 +1,35 @@
package org.nl.wms.pdm.structivt.controller;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.base.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.logging.annotation.Log;
import org.nl.wms.pdm.structivt.service.RegionStructIvtService;
import org.nl.wms.pdm.structivt.service.dto.RegionStructQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
import java.util.Set;
/**
* @author lyd
* @date 2025-07-14
**/
@Slf4j
@RestController
@RequestMapping("/api/regionStruct")
public class RegionStructIvtController {
@Autowired
private RegionStructIvtService regionStructIvtService;
@GetMapping
@Log("查询区域库存")
public ResponseEntity<Object> query(RegionStructQuery query, PageQuery page){
TableDataInfo dataInfo = regionStructIvtService.queryStruct(query, page);
return new ResponseEntity<>(dataInfo,HttpStatus.OK);
}
}

View File

@@ -0,0 +1,24 @@
package org.nl.wms.pdm.structivt.service;
import org.nl.common.base.TableDataInfo;
import org.nl.wms.pdm.structivt.service.dto.RegionStructIvtVo;
import org.nl.wms.pdm.structivt.service.dto.RegionStructQuery;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.nl.common.domain.query.PageQuery;
import java.util.List;
@Service
public class RegionStructIvtService {
@Autowired
private ISchBasePointService iSchBasePointService;
public TableDataInfo queryStruct(RegionStructQuery query,PageQuery pageQuery){
TableDataInfo<RegionStructIvtVo> dataInfo = iSchBasePointService.queryStruct(query, pageQuery);
return dataInfo;
}
}

View File

@@ -0,0 +1,63 @@
package org.nl.wms.pdm.structivt.service.dto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class RegionStructIvtVo {
/**
* 区域编码
*/
private String region_code;
/**
* 区域编码
*/
private String region_name;
/**
* 点位编码
*/
private String point_code;
/**
* 载具编码
*/
private String storagevehicle_code;
/**
* 物料编码
*/
private String material_code;
/**
* 物料名称
*/
private String material_name;
private String material_spec;
/**
* 载具数量
*/
private BigDecimal qty;
/**
* 载具冻结数量
*/
private BigDecimal frozen_qty;
/**
* 批次
*/
private String pcsn;
/**
* 单位id
*/
private String measure_unit_id;
/**
* 单位名称
*/
private String unit_name;
/**
* 入库时间
*/
private String inbound_time;
/**
* 组盘状态
*/
private String status;
}

View File

@@ -0,0 +1,18 @@
package org.nl.wms.pdm.structivt.service.dto;
import lombok.Data;
import org.nl.common.domain.query.BaseQuery;
import org.nl.wms.sch.region.service.dao.SchBaseRegion;
/**
* @author lyd
* @date 2023-05-15
**/
@Data
public class RegionStructQuery extends BaseQuery<SchBaseRegion> {
private String region_code;
private String point_code;
private String material_code;
private String storagevehicle_code;
private String pcsn;
}

View File

@@ -0,0 +1,84 @@
package org.nl.wms.sch.group.controller;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.base.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.logging.annotation.Log;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.sch.group.service.IMdPbGroupplateService;
import org.nl.wms.sch.group.service.dao.GroupPlate;
import org.nl.wms.sch.group.service.enums.GroupStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Map;
import java.util.Set;
/**
* <p>
* 组盘记录 控制层
* </p>
*
* @author Liuxy
* @since 2025-06-03
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/group")
@Slf4j
public class GroupController {
@Autowired
private final IMdPbGroupplateService iMdPbGroupplateService;
@GetMapping
@Log("分页查询")
public ResponseEntity<Object> query(@RequestParam Map whereJson, PageQuery page) {
return new ResponseEntity<>(TableDataInfo.build(iMdPbGroupplateService.queryAll(whereJson, page)), HttpStatus.OK);
}
@PostMapping
@Log("新增组盘组盘")
public ResponseEntity<Object> create(@RequestBody JSONObject group) {
Assert.noNullElements(new Object[]{group,group.get("material_id"),group.get("storagevehicle_code"),group.get("qty")},"请求参数不能为空");
GroupPlate groupPlate = group.toJavaObject(GroupPlate.class);
String storagevehicleCode = groupPlate.getStoragevehicle_code();
{
// iMdPbStoragevehicleinfoService.getByCode(storagevehicleCode);
// int has = iMdPbGroupplateService.count(new LambdaUpdateWrapper<GroupPlate>()
// .eq(GroupPlate::getStoragevehicle_code, groupPlate.getStoragevehicle_code())
// .lt(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")));
// if (has>0){
// throw new BadRequestException("当前载具组盘信息已存在");
// }
}
groupPlate.setGroup_id(IdUtil.getStringId());
groupPlate.setCreate_id(SecurityUtils.getCurrentUserId());
groupPlate.setCreate_name(SecurityUtils.getCurrentUsername());
groupPlate.setCreate_time(DateUtil.now());
groupPlate.setStatus(GroupStatus.START.getCode());
iMdPbGroupplateService.save(groupPlate);
return new ResponseEntity<>(HttpStatus.OK);
}
@DeleteMapping
@Log("删除组盘")
public ResponseEntity<Object> delete(@RequestBody Set<String> ids) {
iMdPbGroupplateService.delete(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -1,71 +0,0 @@
package org.nl.wms.sch.group.controller;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.base.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.logging.annotation.Log;
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import org.nl.wms.sch.group.service.dto.SchBaseVehiclematerialgroupQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
import java.util.Set;
/**
* @author lyd
* @date 2023-05-16
**/
@Slf4j
@RestController
@RequestMapping("/api/schBaseVehiclematerialgroup")
public class SchBaseVehiclematerialgroupController {
@Autowired
private ISchBaseVehiclematerialgroupService schBaseVehiclematerialgroupService;
@GetMapping
@Log("查询组盘信息管理")
public ResponseEntity<Object> query(SchBaseVehiclematerialgroupQuery whereJson, PageQuery page){
return new ResponseEntity<>(TableDataInfo.build(schBaseVehiclematerialgroupService
.queryAll(whereJson,page)),HttpStatus.OK);
}
@PostMapping
@Log("新增组盘信息管理")
public ResponseEntity<Object> create(@Validated @RequestBody SchBaseVehiclematerialgroup entity){
schBaseVehiclematerialgroupService.create(entity);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@PutMapping
@Log("修改组盘信息管理")
public ResponseEntity<Object> update(@Validated @RequestBody SchBaseVehiclematerialgroup entity){
schBaseVehiclematerialgroupService.update(entity);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@Log("删除组盘信息管理")
@DeleteMapping
public ResponseEntity<Object> delete(@RequestBody Set<String> ids) {
schBaseVehiclematerialgroupService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/getGroup")
@Log("获取组盘信息管理")
public ResponseEntity<Object> getGroup(@RequestBody JSONObject entity){
return new ResponseEntity<>(schBaseVehiclematerialgroupService.getGroup(entity), HttpStatus.OK);
}
}

View File

@@ -0,0 +1,38 @@
package org.nl.wms.sch.group.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.sch.group.service.dao.GroupPlate;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* <p>
* 组盘记录表 服务类
* </p>
*
* @author Liuxy
* @since 2025-05-23
*/
public interface IMdPbGroupplateService extends IService<GroupPlate> {
/**
* 分页查询
* @param whereJson : {查询参数}
* @param page : 分页对象
* @return 返回结果
*/
IPage<JSONObject> queryAll(Map whereJson, PageQuery page);
/**
* 删除组盘
* @param ids 标识集合
*/
void delete(Set<String> ids);
}

View File

@@ -1,100 +0,0 @@
package org.nl.wms.sch.group.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import org.nl.wms.sch.group.service.dto.SchBaseVehiclematerialgroupQuery;
import java.util.Set;
/**
* @description 服务接口
* @author lyd
* @date 2023-05-16
**/
public interface ISchBaseVehiclematerialgroupService extends IService<SchBaseVehiclematerialgroup> {
/**
* 查询数据分页
* @param whereJson 条件
* @param pageable 分页参数
* @return IPage<SchBaseVehiclematerialgroup>
*/
IPage<SchBaseVehiclematerialgroup> queryAll(SchBaseVehiclematerialgroupQuery whereJson, PageQuery pageable);
/**
* 创建
* @param entity /
*/
void create(SchBaseVehiclematerialgroup entity);
/**
* 编辑
* @param entity /
*/
void update(SchBaseVehiclematerialgroup entity);
/**
* 多选删除
* @param ids /
*/
void deleteAll(Set<String> ids);
/**
* 根据载具编码返回数据
* @param entity
* @return
*/
SchBaseVehiclematerialgroup getGroup(JSONObject entity);
/**
* 根据载具编码、载具类型、状态、物料查找组盘信息
* @param vehicleCode
* @param vehicleType
* @param value 物料托盘组盘状态
* @param materialId
* @return
*/
SchBaseVehiclematerialgroup getGroupInfo(String vehicleCode, String vehicleType, String value, String materialId);
/**
* 根据载具编码、载具类型、状态、物料查找组盘信息
* @param vehicleCode
* @param vehicleType
* @param value 物料托盘组盘状态
* @return
*/
SchBaseVehiclematerialgroup getGroupInfo(String vehicleCode, String vehicleType, String value);
/**
* 根据载具编码、状态、物料查找组盘信息
* @param vehicleCode
* @param value 物料托盘组盘状态
* @return
*/
SchBaseVehiclematerialgroup getGroupInfo(String vehicleCode, String value);
/**
* 返回当前物料的剩余库存数
* @param materialId
* @return
*/
int getInventoryQtyByMaterialId(String materialId);
/**
* 解绑同载具的信息
* @param vehicleCode
* @param vehicleType
*/
void unBindingSameVehicleMaterial(String vehicleCode, String vehicleType);
/**
* 包装获取组盘信息
* @param vehicleCode
* @param value
* @return
*/
SchBaseVehiclematerialgroup getOneByVehicleCode(String vehicleCode, String value);
}

View File

@@ -0,0 +1,119 @@
package org.nl.wms.sch.group.service.dao;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author dsh
* 2025/5/20
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("md_pb_groupplate")
public class GroupPlate implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 组盘标识
*/
@TableId("group_id")
private String group_id;
/**
* 载具编码
*/
private String storagevehicle_code;
/**
* 物料编码
*/
private String material_code;
/**
* 批次
*/
private String pcsn;
/**
* 计量单位标识
*/
private String measure_unit_id;
/**
* 计量单位名称
*/
private String unit_name;
/**
* 组盘数量
*/
private int qty;
/**
* 冻结数量
*/
private int frozen_qty;
/**
* 备注
*/
private String remark;
/**
* 状态 01组盘 02入库 03出库
*/
private String status;
private String type;
/**
* 组盘人
*/
private String create_id;
/**
* 组盘人名称
*/
private String create_name;
/**
* 组盘时间
*/
private String create_time;
/**
* 修改人
*/
private String update_id;
/**
* 修改人姓名
*/
private String update_name;
/**
* 修改时间
*/
private String update_time;
/**
* 来源单据号
*/
private String inbound_time;
private String outbound_time;
/**
* 来源单据类型
*/
private String ext_code;
private String ext_type;
}

View File

@@ -1,117 +0,0 @@
package org.nl.wms.sch.group.service.dao;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author lyd
* @description /
* @date 2023-05-16
**/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("sch_base_vehiclematerialgroup")
public class SchBaseVehiclematerialgroup implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "group_id", type = IdType.NONE)
private String group_id;
private String vehicle_code;
private String material_id;
private String redundance_material_code;
private String vehicle_type;
private String child_vehicle_code;
private String source_vehicle_code;
private String point_code;
private String point_name;
private Boolean is_full;
private String pcsn;
private String instorage_time;
private Integer material_qty;
private BigDecimal material_weight;
private String workorder_code;
private String task_code;
private String ext_data;
private String workshop_code;
private String group_status;
private String move_way;
private String buss_move_id;
private String remark;
private Boolean is_delete;
private String create_id;
private String create_name;
private String create_time;
private String update_id;
private String update_name;
private String update_time;
@TableField(exist = false)
private String material_name;
@TableField(exist = false)
private String material_code;
@TableField(exist = false)
private String material_spec;
@TableField(exist = false)
private String region_name;
}

View File

@@ -0,0 +1,44 @@
package org.nl.wms.sch.group.service.dao.mapper;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.nl.wms.sch.group.service.dao.GroupPlate;
import java.util.List;
import java.util.Map;
/**
* <p>
* 组盘记录表 Mapper 接口
* </p>
*
* @author Liuxy
* @since 2025-05-23
*/
public interface MdPbGroupplateMapper extends BaseMapper<GroupPlate> {
/**
* 获取明细
* @param whereJson {
* storagevehicle_code : 载具编码
* }
*/
List<JSONObject> getDtl(@Param("param") JSONObject whereJson);
/**
* 分页查询
* @param page 分页条件
* @param whereJson 查询条件
* @return IPage<StIvtMoveinv>
*/
IPage<JSONObject> queryAllByPage(Page<JSONObject> page, @Param("param") Map whereJson);
//查询载具物料信息
List<JSONObject> getVehicleMaterial(@Param("params") Map whereJson);
}

View File

@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.sch.group.service.dao.mapper.MdPbGroupplateMapper">
<select id="getDtl" resultType="com.alibaba.fastjson.JSONObject">
SELECT
late.*,
mater.material_code,
mater.material_name
FROM
md_pb_groupplate late
LEFT JOIN md_me_materialbase mater ON mater.material_code = late.material_code
<where>
late.status = '01'
<if test="param.storagevehicle_code != null and param.storagevehicle_code != ''">
AND
late.storagevehicle_code = #{param.storagevehicle_code}
</if>
</where>
</select>
<select id="queryAllByPage" resultType="com.alibaba.fastjson.JSONObject">
SELECT
late.*,
mater.material_code,
mater.material_name
FROM
md_pb_groupplate late
INNER JOIN md_me_materialbase mater ON mater.material_code = late.material_code
<where>
1 = 1
<if test="param.material_code != null and param.material_code != ''">
AND
(mater.material_code LIKE #{param.material_code} or
mater.material_name LIKE #{param.material_code} )
</if>
<if test="param.pcsn != null and param.pcsn != ''">
AND
late.pcsn LIKE #{param.pcsn}
</if>
<if test="param.storagevehicle_code != null and param.storagevehicle_code != ''">
AND
late.storagevehicle_code LIKE #{param.storagevehicle_code}
</if>
<if test="param.status != null and param.status != ''">
AND
late.status = #{param.status}
</if>
</where>
ORDER BY late.create_time Desc
</select>
<select id="getVehicleMaterial" resultType="com.alibaba.fastjson.JSONObject">
SELECT
gro.*,
mater.material_id,
mater.material_code,
mater.material_name
FROM
md_pb_groupplate gro
LEFT JOIN md_me_materialbase mater ON mater.material_id = gro.material_id
<where>
1 = 1
<if test="params.vehicleCode != null and params.vehicleCode != ''">
AND
gro.storagevehicle_code = #{params.vehicleCode}
</if>
<if test="params.status != null and params.status != ''">
AND
gro.status = #{params.status}
</if>
<if test="params.qty != null and params.qty != ''">
AND
gro.qty>0
</if>
</where>
ORDER BY gro.create_time Desc
</select>
</mapper>

View File

@@ -1,36 +0,0 @@
package org.nl.wms.sch.group.service.dao.mapper;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import org.nl.wms.sch.group.service.dto.SchBaseVehiclematerialgroupQuery;
/**
* @author lyd
* @date 2023-05-16
**/
public interface SchBaseVehiclematerialgroupMapper extends BaseMapper<SchBaseVehiclematerialgroup> {
/**
* 分页查询
* @param pages 、
* @param query 查询条件
* @return IPage<SchBaseVehiclematerialgroup>
*/
IPage<SchBaseVehiclematerialgroup> selectPageLeftJoin(IPage<SchBaseVehiclematerialgroup> pages, SchBaseVehiclematerialgroupQuery query);
/**
* 获取组盘信息
* @param entity 、
* @return SchBaseVehiclematerialgroup 实体类
*/
SchBaseVehiclematerialgroup getGroup(JSONObject entity);
/**
* 获取物料嘻嘻
* @param materialId 物料id
* @return int 数字
*/
int getInventoryQtyByMaterialId(String materialId);
}

View File

@@ -1,68 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.sch.group.service.dao.mapper.SchBaseVehiclematerialgroupMapper">
<select id="selectPageLeftJoin" resultType="org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup">
SELECT vg.*
, ma.material_name
, ma.material_code
, ma.material_spec
, po.region_name
FROM sch_base_vehiclematerialgroup vg
LEFT JOIN md_me_materialbase ma ON vg.material_id = ma.material_id
LEFT JOIN sch_base_point po ON po.point_code = vg.point_code
WHERE 1 = 1
<if test="query.vehicle_code != null">
AND vg.vehicle_code = #{query.vehicle_code}
</if>
<if test="query.workshop_code != null">
AND vg.workshop_code = #{query.workshop_code}
</if>
<if test="query.group_status != null">
AND vg.group_status = #{query.group_status}
</if>
<if test="query.region_code != null">
AND vg.point_code IN (
SELECT p.point_code
FROM sch_base_point p
WHERE p.region_code = #{query.region_code}
)
</if>
</select>
<select id="getGroup" resultType="org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup" parameterType="com.alibaba.fastjson.JSONObject">
SELECT vg.*
, ma.material_name
, ma.material_code
, ma.material_spec
, po.region_name
, sd.label AS group_bind_material_status_name
FROM sch_base_vehiclematerialgroup vg
LEFT JOIN md_me_materialbase ma ON vg.material_id = ma.material_id
LEFT JOIN sch_base_point po ON po.point_code = vg.point_code
LEFT JOIN sys_dict sd ON sd.code = 'group_bind_material_status' AND sd.value = vg.group_bind_material_status
WHERE 1 = 1
<if test="vehicle_code != null">
AND vg.vehicle_code = #{vehicle_code}
</if>
<if test="vehicle_type != null">
AND vg.vehicle_type = #{vehicle_type}
</if>
AND vg.group_bind_material_status = '2'
</select>
<select id="getInventoryQtyByMaterialId" resultType="java.lang.Integer">
SELECT
IF(SUM(vg.material_qty)>0,SUM(vg.material_qty),0) AS qty
FROM
`sch_base_point` p
LEFT JOIN sch_base_vehiclematerialgroup vg ON vg.vehicle_code = p.vehicle_code
AND vg.vehicle_type = p.vehicle_type
AND vg.group_bind_material_status = '2'
WHERE
p.region_code = 'GTPHC'
AND p.point_status = '3'
AND p.vehicle_code IS NOT NULL
AND p.vehicle_code != ''
AND vg.group_id IS NOT NULL
AND vg.material_id = #{materialId}
</select>
</mapper>

View File

@@ -0,0 +1,24 @@
package org.nl.wms.sch.group.service.dto;
import lombok.Data;
import org.nl.wms.sch.group.service.dao.GroupPlate;
/**
* @author dsh
* 2025/5/20
*/
@Data
public class GroupPlateDto extends GroupPlate{
/**
* 物料编码
*/
private String material_spec;
private String material_code;
/**
* 物料名称
*/
private String material_name;
}

View File

@@ -1,131 +0,0 @@
package org.nl.wms.sch.group.service.dto;
import java.math.BigDecimal;
import lombok.Data;
import java.io.Serializable;
/**
* @description /
* @author lyd
* @date 2023-05-16
**/
@Data
public class SchBaseVehiclematerialgroupDto implements Serializable {
/** 组盘id */
private String group_id;
/** 载具编码 */
private String vehicle_code;
/** 物料标识 */
private String material_id;
/** 子载具编码 */
private String child_vehicle_code;
/** 来源载具编码 */
private String source_vehicle_code;
/** 点位编码 */
private String point_code;
/** 点位名称 */
private String point_name;
/** 是否满托 */
private Boolean is_full;
/** 是否已烧制 */
private Boolean is_firing;
/** 批次 */
private String pcsn;
/** 入库时间 */
private String instorage_time;
/** 静置时间(分钟) */
private BigDecimal standing_time;
/** 物料数量 */
private BigDecimal material_qty;
/** 物料重量 */
private BigDecimal material_weight;
/** 搬运工单编码 */
private String workorder_code;
/** 组盘次数 */
private BigDecimal group_number;
/** 任务编码 */
private String task_code;
/** 额外信息 */
private String ext_data;
/** 车间编码 */
private String workshop_code;
/** 组盘状态 */
private String group_status;
/** 业务表表名 */
private String table_name;
/** 业务表表名主键字段 */
private String table_fk;
/** 业务表表名主键值 */
private String table_fk_id;
/** 业务链路标识 */
private String buss_move_id;
/** 是否首个流程任务 */
private Boolean is_first_flow_task;
/** 流程编码 */
private String flow_code;
/** 流程顺序 */
private BigDecimal flow_num;
/** 上一任务编码 */
private String before_task_code;
/** 下一任务编码 */
private String next_task_code;
/** 备注 */
private String remark;
/** 是否删除 */
private Boolean is_delete;
/** 创建人 */
private String create_id;
/** 创建人 */
private String create_name;
/** 创建时间 */
private String create_time;
/** 修改人 */
private String update_id;
/** 修改人 */
private String update_name;
/** 修改时间 */
private String update_time;
/** 出窑时间 */
private String out_kiln_time;
/** 入窑时间 */
private String into_kiln_time;
}

View File

@@ -1,19 +0,0 @@
package org.nl.wms.sch.group.service.dto;
import lombok.Data;
import org.nl.common.domain.query.BaseQuery;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import java.io.Serializable;
/**
* @author lyd
* @date 2023-05-16
**/
@Data
public class SchBaseVehiclematerialgroupQuery implements Serializable {
private String vehicle_code;
private String workshop_code;
private String region_code;
private String group_status;
}

View File

@@ -0,0 +1,14 @@
package org.nl.wms.sch.group.service.enums;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum GroupStatus {
START("1","生成");
private String code;
private String desc;
}

View File

@@ -0,0 +1,43 @@
package org.nl.wms.sch.group.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.sch.group.service.IMdPbGroupplateService;
import org.nl.wms.sch.group.service.dao.GroupPlate;
import org.nl.wms.sch.group.service.dao.mapper.MdPbGroupplateMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* <p>
* 组盘记录表 服务实现类
* </p>
*
* @author Liuxy
* @since 2025-05-23
*/
@Service
public class MdPbGroupplateServiceImpl extends ServiceImpl<MdPbGroupplateMapper, GroupPlate> implements IMdPbGroupplateService {
@Override
public IPage<JSONObject> queryAll(Map whereJson, PageQuery page) {
return this.baseMapper.queryAllByPage(new Page<>(page.getPage() + 1, page.getSize()),
whereJson);
}
@Override
@Transactional
public void delete(Set<String> ids) {
this.baseMapper.deleteBatchIds(ids);
}
}

View File

@@ -1,151 +0,0 @@
package org.nl.wms.sch.group.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import org.nl.wms.sch.group.service.dao.mapper.SchBaseVehiclematerialgroupMapper;
import org.nl.wms.sch.group.service.dto.SchBaseVehiclematerialgroupQuery;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
* @author lyd
* @description 服务实现
* @date 2023-05-16
**/
@Slf4j
@Service
public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseVehiclematerialgroupMapper, SchBaseVehiclematerialgroup> implements ISchBaseVehiclematerialgroupService {
@Autowired
private SchBaseVehiclematerialgroupMapper vehiclematerialgroupMapper;
@Autowired
private ISchBasePointService pointService;
@Override
public IPage<SchBaseVehiclematerialgroup> queryAll(SchBaseVehiclematerialgroupQuery whereJson, PageQuery page) {
IPage<SchBaseVehiclematerialgroup> pages = new Page<>(page.getPage() + 1, page.getSize());
pages = vehiclematerialgroupMapper.selectPageLeftJoin(pages, whereJson);
return pages;
}
@Override
public void create(SchBaseVehiclematerialgroup entity) {
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
entity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr());
entity.setCreate_id(currentUserId);
entity.setCreate_name(nickName);
entity.setCreate_time(now);
entity.setUpdate_id(currentUserId);
entity.setUpdate_name(nickName);
entity.setUpdate_time(now);
vehiclematerialgroupMapper.insert(entity);
}
@Override
public void update(SchBaseVehiclematerialgroup entity) {
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
entity.setUpdate_id(currentUserId);
entity.setUpdate_name(nickName);
entity.setUpdate_time(now);
vehiclematerialgroupMapper.updateById(entity);
}
@Override
public void deleteAll(Set<String> ids) {
// 真删除
vehiclematerialgroupMapper.deleteBatchIds(ids);
}
@Override
public SchBaseVehiclematerialgroup getGroup(JSONObject entity) {
return vehiclematerialgroupMapper.getGroup(entity);
}
@Override
public SchBaseVehiclematerialgroup getGroupInfo(String vehicleCode, String vehicleType, String value, String materialId) {
LambdaQueryWrapper<SchBaseVehiclematerialgroup> lambda = new QueryWrapper<SchBaseVehiclematerialgroup>().lambda();
lambda.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode)
.eq(SchBaseVehiclematerialgroup::getVehicle_type, vehicleType)
.eq(SchBaseVehiclematerialgroup::getGroup_status, value)
.eq(SchBaseVehiclematerialgroup::getMaterial_id, materialId)
.eq(SchBaseVehiclematerialgroup::getIs_delete, false);
List<SchBaseVehiclematerialgroup> selectOne = vehiclematerialgroupMapper.selectList(lambda);
return selectOne.size() > 0 ? selectOne.get(0) : null;
}
@Override
public SchBaseVehiclematerialgroup getGroupInfo(String vehicleCode, String vehicleType, String value) {
LambdaQueryWrapper<SchBaseVehiclematerialgroup> lambda = new QueryWrapper<SchBaseVehiclematerialgroup>().lambda();
lambda.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode)
.eq(SchBaseVehiclematerialgroup::getVehicle_type, vehicleType)
.eq(SchBaseVehiclematerialgroup::getGroup_status, value)
.eq(SchBaseVehiclematerialgroup::getIs_delete, false);
List<SchBaseVehiclematerialgroup> selectOne = vehiclematerialgroupMapper.selectList(lambda);
return selectOne.size() > 0 ? selectOne.get(0) : null;
}
@Override
public SchBaseVehiclematerialgroup getGroupInfo(String vehicleCode, String value) {
LambdaQueryWrapper<SchBaseVehiclematerialgroup> lambda = new QueryWrapper<SchBaseVehiclematerialgroup>().lambda();
lambda.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode)
.eq(SchBaseVehiclematerialgroup::getGroup_status, value)
.eq(SchBaseVehiclematerialgroup::getIs_delete, false);
List<SchBaseVehiclematerialgroup> selectOne = vehiclematerialgroupMapper.selectList(lambda);
return selectOne.size() > 0 ? selectOne.get(0) : null;
}
@Override
public int getInventoryQtyByMaterialId(String materialId) {
return vehiclematerialgroupMapper.getInventoryQtyByMaterialId(materialId);
}
@Override
public void unBindingSameVehicleMaterial(String vehicleCode, String vehicleType) {
LambdaQueryWrapper<SchBaseVehiclematerialgroup> lambda = new QueryWrapper<SchBaseVehiclematerialgroup>().lambda();
lambda.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode)
.eq(SchBaseVehiclematerialgroup::getVehicle_type, vehicleType)
.ne(SchBaseVehiclematerialgroup::getGroup_status, GroupBindMaterialStatusEnum.UNBOUND.getValue())
.eq(SchBaseVehiclematerialgroup::getIs_delete, false);
List<SchBaseVehiclematerialgroup> list = vehiclematerialgroupMapper.selectList(lambda);
list.forEach(schBaseVehiclematerialgroup ->
schBaseVehiclematerialgroup.setGroup_status(GroupBindMaterialStatusEnum.UNBOUND.getValue()));
this.updateBatchById(list);
}
@Override
public SchBaseVehiclematerialgroup getOneByVehicleCode(String vehicleCode, String value) {
List<String> list = new ArrayList<>();
// list.add(GeneralDefinition.STEEL_TRAY);
// list.add(GeneralDefinition.MATERIAL_CUP);
LambdaQueryWrapper<SchBaseVehiclematerialgroup> lambda = new QueryWrapper<SchBaseVehiclematerialgroup>().lambda();
lambda.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode)
.eq(SchBaseVehiclematerialgroup::getGroup_status, value)
.eq(SchBaseVehiclematerialgroup::getIs_delete, false)
.notIn(SchBaseVehiclematerialgroup::getVehicle_type, list);
List<SchBaseVehiclematerialgroup> selectOne = vehiclematerialgroupMapper.selectList(lambda);
return selectOne.size() > 0 ? selectOne.get(0) : null;
}
}

View File

@@ -2,8 +2,11 @@ package org.nl.wms.sch.point.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.common.base.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.pdm.structivt.service.dto.RegionStructIvtVo;
import org.nl.wms.pdm.structivt.service.dto.RegionStructQuery;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.point.service.dto.SchBasePointQuery;
@@ -69,4 +72,9 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
* @param lock_ype 锁定类型
*/
void lockPoint(List<SchBasePoint> list, String lock_ype);
/*
* 区域点位库存查看
* */
TableDataInfo<RegionStructIvtVo> queryStruct(RegionStructQuery query, PageQuery pageQuery);
}

View File

@@ -55,7 +55,7 @@ public class SchBasePoint implements Serializable {
private String vehicle_type;
/** 载具编码 */
private String vehicle_code;
private String storagevehicle_code;
/** 载具数量 */
private Integer vehicle_qty;

View File

@@ -2,6 +2,10 @@ package org.nl.wms.sch.point.service.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.pdm.structivt.service.dto.RegionStructIvtVo;
import org.nl.wms.pdm.structivt.service.dto.RegionStructQuery;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.point.service.dto.SchBasePointQuery;
@@ -28,4 +32,6 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
* @return
*/
IPage<SchBasePoint> selectPageLeftJoin(IPage<SchBasePoint> pages, SchBasePointQuery whereJson);
List<RegionStructIvtVo> queryStruct(@Param("query") RegionStructQuery query);
}

View File

@@ -59,4 +59,36 @@
</where>
ORDER BY p.region_code, p.point_code, p.point_type
</select>
<select id="queryStruct" resultType="org.nl.wms.pdm.structivt.service.dto.RegionStructIvtVo">
select sch_base_point.point_code,
sch_base_point.region_code,
sch_base_point.storagevehicle_code,
md_pb_groupplate.material_code,
md_me_materialbase.material_name,
md_me_materialbase.material_spec,
md_pb_groupplate.pcsn,
md_pb_groupplate.qty,
md_pb_groupplate.frozen_qty,
md_pb_groupplate.unit_name,
md_pb_groupplate.status,
md_pb_groupplate.inbound_time,
md_pb_groupplate.remark
from sch_base_point
inner join md_pb_groupplate on sch_base_point.storagevehicle_code = md_pb_groupplate.storagevehicle_code
left join md_me_materialbase on md_pb_groupplate.material_code = md_me_materialbase.material_code
where sch_base_point.storagevehicle_code is not null and sch_base_point.is_used = 1
<if test="query.storagevehicle_code != null">
AND sch_base_point.storagevehicle_code = #{query.storagevehicle_code}
</if>
<if test="query.region_code != null">
AND sch_base_point.region_code = #{query.region_code}
</if>
<if test="query.pcsn != null">
AND md_pb_groupplate.pcsn = #{query.pcsn}
</if>
<if test="query.material_code != null">
AND md_pb_groupplate.material_code = #{query.material_code}
</if>
</select>
</mapper>

View File

@@ -9,11 +9,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.base.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.language.LangProcess;
import org.nl.wms.pdm.structivt.service.dto.RegionStructIvtVo;
import org.nl.wms.pdm.structivt.service.dto.RegionStructQuery;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.point.service.dao.mapper.SchBasePointMapper;
@@ -25,6 +29,7 @@ import org.nl.wms.util.PointUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.Arrays;
import java.util.List;
@@ -129,7 +134,7 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
// 根据点位状态来判断更新内容
if (ObjectUtil.isNotEmpty(pointStatus) && pointStatus.equals(PointStatusEnum.EMPTY_POINT.getCode())) {
entity.setVehicle_type("");
entity.setVehicle_code("");
entity.setStoragevehicle_code("");
entity.setVehicle_qty(0);
}
pointMapper.updateById(entity);
@@ -183,4 +188,14 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
this.updateBatchById(list);
}
@Override
public TableDataInfo<RegionStructIvtVo> queryStruct(RegionStructQuery query, PageQuery pageQuery) {
com.github.pagehelper.Page<Object> page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize());
// page.setOrderBy("point_code DESC");
List<RegionStructIvtVo> ivtVo = this.baseMapper.queryStruct(query);
TableDataInfo build = TableDataInfo.build(ivtVo);
build.setTotalElements(page.getTotal());
return build;
}
}

View File

@@ -48,7 +48,7 @@ public class PointUtils {
SchBasePointServiceImpl pointService = SpringContextHolder.getBean(SchBasePointServiceImpl.class);
point.setPoint_status(PointStatusEnum.EMPTY_POINT.getCode());
point.setVehicle_type("");
point.setVehicle_code("");
point.setStoragevehicle_code("");
point.setIng_task_code("");
point.setVehicle_qty(0);
point.setUpdate_time(DateUtil.now());
@@ -70,7 +70,7 @@ public class PointUtils {
String parentPointCode = point.getParent_point_code();
SchBasePoint basePoint = pointService.getById(parentPointCode);
point.setVehicle_type("");
point.setVehicle_code("");
point.setStoragevehicle_code("");
point.setIng_task_code("");
point.setVehicle_qty(point.getVehicle_qty() == 5 ? point.getVehicle_qty() : point.getVehicle_qty() + 1);
// 等到新的点执行第一托的时候才判断另一个点满足5个托盘的时候就清空

View File

@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.SpringContextHolder;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.GeneralDefinition;
@@ -71,30 +70,6 @@ public class TaskUtils {
taskObj.setUpdate_time(DateUtil.now());
}
public static void setGroupUpdateByAcs(SchBaseVehiclematerialgroup groupEntity) {
groupEntity.setUpdate_id(GeneralDefinition.ACS_ID);
groupEntity.setUpdate_name(GeneralDefinition.ACS_NAME);
groupEntity.setUpdate_time(DateUtil.now());
}
public static void setGroupUpdateByPC(SchBaseVehiclematerialgroup groupEntity) {
groupEntity.setUpdate_id(SecurityUtils.getCurrentUserId());
groupEntity.setUpdate_name(SecurityUtils.getCurrentNickName());
groupEntity.setUpdate_time(DateUtil.now());
}
/**
* 根据类型去判断谁修改的
* @param groupEntity
* @param taskFinishedType
*/
public static void setGroupUpdateByType(SchBaseVehiclematerialgroup groupEntity, TaskFinishedTypeEnum taskFinishedType) {
if (taskFinishedType.equals(TaskFinishedTypeEnum.AUTO_ACS)) {
setGroupUpdateByAcs(groupEntity);
} else {
setGroupUpdateByPC(groupEntity);
}
}
public static void setUpdateAuto(SchBaseTask taskObj) {
String currentUserId = ObjectUtil.isNotEmpty(SecurityUtils.getCurrentUserId())

View File

@@ -4,11 +4,11 @@ server:
nl:
config:
mysql:
ip: 127.0.0.1
ip: 192.168.81.251
port: 3306
username: root
password: 12356
database: nl-platform
password: P@ssw0rd.
database: lms_standardv1
redis:
ip: 127.0.0.1
port: 6379

View File

@@ -6,6 +6,7 @@
"license": "Apache-2.0",
"scripts": {
"dev": "vue-cli-service serve",
"dev_mac": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
"build:prod": "vue-cli-service build",
"build:stage": "vue-cli-service build --mode staging",
"preview": "node build/index.js --preview",

View File

@@ -0,0 +1,34 @@
import Vue from 'vue'
import { tableEnum as getEnumDetail } from '@/views/system/dict/enumDetail'
// tableEnums: ['st_ivt_bsrealstorattr#stor_name#stor_code'],
export default class TableEnum {
constructor(tableEnum) {
this.tableEnum = tableEnum
}
async init(names, completeCallback) {
if (names === undefined || name === null) {
throw new Error('need TableEnum names')
}
const ps = []
names.forEach(n => {
const split = n.split('#')
const code = split[0]
const label = split[1]
const value = split[2]
Vue.set(this.tableEnum.tableEnum, code, {})
Vue.set(this.tableEnum.label, code, {})
Vue.set(this.tableEnum, code, [])
ps.push(getEnumDetail({ 'code': code, 'label': label, 'value': value }).then(data => {
this.tableEnum[code].splice(0, 0, ...data)
data.forEach(d => {
Vue.set(this.tableEnum.tableEnum[code], d.value, d)
Vue.set(this.tableEnum.label[code], d.value, d.label)
})
}))
})
await Promise.all(ps)
completeCallback()
}
}

View File

@@ -0,0 +1,29 @@
import TableEnum from './TableEnum'
const install = function(Vue) {
Vue.mixin({
data() {
if (this.$options.tableEnums instanceof Array) {
const tableEnum = {
tableEnum: {},
label: {}
}
return {
tableEnum
}
}
return {}
},
created() {
if (this.$options.tableEnums instanceof Array) {
new TableEnum(this.tableEnum).init(this.$options.tableEnums, () => {
this.$nextTick(() => {
this.$emit('dictReady')
})
})
}
}
})
}
export default { install }

View File

@@ -11,6 +11,7 @@ import 'mavon-editor/dist/css/index.css'
// 数据字典
import dict from './components/Dict'
import tableEnum from './components/TableEnum'
import scroll from 'vue-seamless-scroll'
// 权限指令
@@ -71,6 +72,7 @@ Vue.use(VueHighlightJS)
Vue.use(mavonEditor)
Vue.use(permission)
Vue.use(dict)
Vue.use(tableEnum)
Vue.use(VueBus)
// 全局设置控件样式https://codeantenna.com/a/0IN5FMJk5h
Element.Table.props.border = { type: Boolean, default: true }

View File

@@ -0,0 +1,22 @@
import request from '@/utils/request'
export function get(code) {
const params = {
code
}
return request({
url: 'api/dict/getStatusEnum',
method: 'get',
params
})
}
export function tableEnum(params) {
return request({
url: 'api/dict/getTableEnum',
method: 'get',
params
})
}
export default { get, tableEnum }

View File

@@ -19,28 +19,6 @@
:placeholder="$t('common.Please_select')"
/>
</el-form-item>
<el-form-item :label="$t('VehicleInfo.placeholder.vehicle_no')">
<el-input
v-model="query.storagevehicle_code_begin"
clearable
size="mini"
:placeholder="$t('VehicleInfo.placeholder.start_vehicle')"
style="width: 200px;"
class="filter-item"
@keyup.enter.native="crud.toQuery"
/>
-
<el-input
v-model="query.storagevehicle_code_end"
clearable
size="mini"
:placeholder="$t('VehicleInfo.placeholder.end_vehicle')"
style="width: 200px;"
class="filter-item"
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<rrOperation />
</el-form>
</div>
@@ -65,32 +43,52 @@
:visible.sync="crud.status.cu > 0"
width="450px"
>
<el-form ref="form" :model="form" :rules="rules" size="mini" label-position="right" label-width="auto">
<el-form-item
:label="$t('VehicleInfo.table.storagevehicle_type_name')"
prop="storagevehicle_type"
>
<treeselect
v-model="form.storagevehicle_type"
:load-options="loadChildNodes"
:options="classes1"
style="width: 80%"
:placeholder="$t('common.Please_select')"
/>
<el-form ref="form" :model="form" :rules="rules" size="mini" label-width="100px">
<el-form-item label="载具类型" prop="vehicle_type">
<el-select
v-model="form.vehicle_type"
clearable
size="mini"
placeholder="请选择"
class="filter-item"
style="width: 250px;"
@change="getVehicle"
>
<el-option
v-for="item in dict.storagevehicle_type"
:label="item.label"
:value="item.para1"
/>
</el-select>
</el-form-item>
<br>
<el-form-item :label="$t('VehicleInfo.dialog.num')" prop="num">
<el-input-number v-model="form.num" :precision="0" style="width: 80%" />
<el-form-item label="起始载具号" prop="vehicle_code">
<el-input v-model="form.vehicle_code" :disabled="true" style="width: 250px;"/>
</el-form-item>
<el-form-item :label="$t('VehicleInfo.table.is_used')">
<el-radio v-model="form.is_used" label="0">{{ $t('common.No') }}</el-radio>
<el-radio v-model="form.is_used" label="1">{{ $t('common.Yes') }}</el-radio>
<el-form-item label="载具数量" prop="num">
<el-input-number v-model="form.num" :precision="0" style="width: 150px;"/>
</el-form-item>
<el-form-item label="高度(mm)" prop="h">
<el-input-number v-model="form.h" :precision="0" style="width: 150px;"/>
</el-form-item>
<el-form-item label="宽度(mm)" prop="w">
<el-input-number v-model="form.w" :precision="0" style="width: 150px;"/>
</el-form-item>
<el-form-item label="深度(mm)" prop="l">
<el-input-number v-model="form.l" :precision="0" style="width: 150px;"/>
</el-form-item>
<el-form-item label="重量(g)" prop="weight">
<el-input-number v-model="form.weight" :precision="0" style="width: 150px;"/>
</el-form-item>
<el-form-item label="是否启用">
<el-radio v-model="form.is_used" label="0">否</el-radio>
<el-radio v-model="form.is_used" label="1">是</el-radio>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="info" @click="crud.cancelCU">{{ $t('common.Cancel') }}</el-button>
<el-button :loading="crud.cu === 2" type="primary" @click="crud.submitCU">{{ $t('VehicleInfo.dialog.build') }}</el-button>
<el-button type="primary" @click="addAndprint">{{ $t('VehicleInfo.dialog.build_print') }}</el-button>
<el-button type="info" @click="crud.cancelCU">取消</el-button>
<el-button :loading="crud.cu === 2" type="primary" @click="crud.submitCU">生成</el-button>
<el-button type="primary" @click="addAndprint">生成并打印</el-button>
</div>
</el-dialog>
<!--表格渲染-->
@@ -103,11 +101,6 @@
@selection-change="crud.selectionChangeHandler"
>
<el-table-column type="selection" width="55" />
<el-table-column
prop="storagevehicle_type_name"
:label="$t('VehicleInfo.table.storagevehicle_type_name')"
:min-width="flexWidth('storagevehicle_code', crud.data, $t('VehicleInfo.table.storagevehicle_type_name'))"
/>
<el-table-column
prop="storagevehicle_code"
:label="$t('VehicleInfo.table.storagevehicle_code')"
@@ -266,7 +259,6 @@ export default {
parent_class_code: 'vehicle_type'
}
crudClassstandard.getClassType(param).then(res => {
debugger
const data = res
this.buildTree(data)
this.classes1 = data
@@ -317,6 +309,16 @@ export default {
})
})
},
getVehicle(code) {
if (!code) {
this.crud.notify('请选择载具类型', CRUD.NOTIFICATION_TYPE.INFO)
this.form.vehicle_code = ''
return false
}
crudStoragevehicleinfo.getVehicle(code).then(res => {
this.form.vehicle_code = res.value
})
},
print() {
const _selectData = this.$refs.table.selection
if (!_selectData || _selectData.length < 1) {

View File

@@ -0,0 +1,153 @@
<template>
<el-dialog
title="物料选择"
append-to-body
:visible.sync="dialogVisible"
destroy-on-close
width="1000px"
@close="close"
@open="open"
>
<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.search"
clearable
size="mini"
placeholder="物料名称"
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<rrOperation />
</el-form>
<!--表格渲染-->
<el-table
ref="table"
v-loading="crud.loading"
:data="crud.data"
style="width: 100%;"
size="mini"
border
:cell-style="{'text-align':'center'}"
:header-cell-style="{background:'#f5f7fa',color:'#606266','text-align':'center'}"
@select="handleSelectionChange"
@select-all="onSelectAll"
@current-change="clickChange"
>
<el-table-column v-if="!isSingle" type="selection" width="55" />
<el-table-column v-if="isSingle" 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 prop="material_code" label="物料编码" width="140" />
<el-table-column prop="material_name" label="物料名称" width="170" show-overflow-tooltip />
<el-table-column prop="material_spec" label="物料规格" width="170" show-overflow-tooltip/>
<el-table-column prop="class_name" label="物料分类" width="140" />
<el-table-column prop="unit_name" label="计量单位" />
<el-table-column prop="product_series_name" label="系列" />
<el-table-column prop="update_optname" label="修改人" />
<el-table-column prop="update_time" label="修改时间" width="135" />
</el-table>
<!--分页组件-->
<pagination />
<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 CRUD, { header, presenter } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import pagination from '@crud/Pagination'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
export default {
name: 'MaterialDialog',
components: { rrOperation, pagination },
dicts: ['is_used'],
cruds() {
return CRUD({ title: '物料选择', url: 'api/Materia', optShow: {}})
},
mixins: [presenter(), header()],
props: {
dialogShow: {
type: Boolean,
default: false
},
isSingle: {
type: Boolean,
default: true
}
},
data() {
return {
dialogVisible: false,
tableRadio: null,
tableData: []
}
},
watch: {
dialogShow: {
handler(newValue) {
this.dialogVisible = newValue
}
}
},
methods: {
clickChange(item) {
this.tableRadio = item
},
open() {
},
handleSelectionChange(val, row) {
if (val.length > 1) {
this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(val.pop())
} else {
this.checkrow = row
}
},
onSelectAll() {
this.$refs.table.clearSelection()
},
close() {
this.crud.resetQuery(false)
this.$emit('update:dialogShow', false)
},
submit() {
// 处理单选
if (this.isSingle && this.tableRadio) {
this.$emit('update:dialogShow', false)
this.$emit('materialChoose', this.tableRadio)
return
}
this.rows = this.$refs.table.selection
if (this.rows.length <= 0) {
this.$message('请先勾选物料')
return
}
this.crud.resetQuery(false)
this.$emit('update:dialogShow', false)
this.$emit('materialChoose', this.rows)
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
::v-deep .el-dialog__body {
padding-top: 0px;
}
</style>

View File

@@ -85,21 +85,25 @@
</el-form-item>
</el-col>
</el-row>
<!-- <el-row>-->
<!-- <el-col :span="8">-->
<!-- <el-form-item label="静置时间" prop="standing_time">-->
<!-- <el-input-number v-model="form.standing_time" :controls="false" :min="0" label="分钟"-->
<!-- style="width: 200px;"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="8">-->
<!-- <el-form-item label="是否启用" prop="is_used">-->
<!-- <el-radio v-model="form.is_used" label="0">否</el-radio>-->
<!-- <el-radio v-model="form.is_used" label="1">是</el-radio>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<el-row>
<el-col :span="8">
<el-form-item label="单位" prop="qty_unit_name">
<el-select
v-model="form.qty_unit_name"
style="width: 100px"
placeholder=""
@change="unitChange"
>
<el-option
v-for="item in tableEnum.md_pb_measureunit"
:key="item.id"
:label="item.label"
:value="item.value+'@'+item.label"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
@@ -206,6 +210,7 @@ export default {
name: 'Materia',
// 数据字典
dicts: ['is_used'],
tableEnums: ['md_pb_measureunit#unit_name#measure_unit_id'],
components: { pagination, crudOperation, rrOperation, udOperation, UploadDialog },
mixins: [presenter(), header(), form(defaultForm), crud()],
cruds() {

View File

@@ -0,0 +1,27 @@
import request from '@/utils/request'
export function add(data) {
return request({
url: 'api/group',
method: 'post',
data
})
}
export function del(ids) {
return request({
url: 'api/group/',
method: 'delete',
data: ids
})
}
export function edit(data) {
return request({
url: 'api/group',
method: 'put',
data
})
}
export default { add, edit, del }

View File

@@ -0,0 +1,269 @@
<template>
<div class="app-container">
<!--工具栏-->
<div class="head-container">
<el-row>
<el-col :span="4">
物料查询
<el-input
v-model="query.material_code"
clearable
style="width: 150px"
size="mini"
placeholder="物料编码、名称"
@keyup.enter.native="crud.toQuery"
/>
</el-col>
<el-col :span="4">
批次查询
<el-input
v-model="query.pcsn"
clearable
style="width: 150px"
size="mini"
placeholder="批次"
@keyup.enter.native="crud.toQuery"
/>
</el-col>
<el-col :span="4">
载具编码
<el-input
v-model="query.storagevehicle_code"
clearable
style="width: 150px"
size="mini"
placeholder="载具编码"
@keyup.enter.native="crud.toQuery"
/>
</el-col>
<el-col :span="4">
组盘状态
<el-select
v-model="query.status"
clearable
style="width: 150px"
size="mini"
placeholder="状态"
class="filter-item"
@change="crud.toQuery"
>
<el-option
v-for="item in dict.GROUP_STATUS"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-col>
<el-col :span="4">
<rrOperation />
</el-col>
</el-row>
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" />
<!--新增表格-->
<el-dialog
:close-on-click-modal="false"
:before-close="crud.cancelCU"
:visible.sync="crud.status.cu > 0"
:title="crud.status.title"
width="1200px"
>
<el-form ref="form" :model="form" :rules="rules" size="mini" label-width="110px">
<el-row>
<el-col :span="8">
<el-form-item label="物料编码" prop="material_code" >
<el-input v-model="form.material_code" @focus="getMaterial" style="width: 200px;" :disabled="crud.status.edit > 0" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="物料名称" prop="material_name">
<el-input disabled v-model="form.material_name" style="width: 200px;" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="规格" prop="material_spec">
<label slot="label">规&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;格</label>
<el-input disabled v-model="form.material_spec" style="width: 200px;" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="载具编码" prop="storagevehicle_code">
<label slot="label">载具编码</label>
<el-input v-model="form.storagevehicle_code" style="width: 200px;" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="物料批号" prop="pcsn">
<el-input v-model="form.pcsn" style="width: 200px;" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="物料数量" prop="qty">
<el-input-number v-model="form.qty" style="width: 200px;" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="单位" prop="qty_unit_name">
<el-select
v-model="form.qty_unit_name"
style="width: 100px"
placeholder=""
@change="unitChange"
>
<el-option
v-for="item in tableEnum.md_pb_measureunit"
:key="item.id"
:label="item.label"
:value="item.value+'@'+item.label"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="源单号" prop="ext_code">
<el-input v-model="form.ext_code" style="width: 200px;" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="源单类型" prop="ext_type">
<el-input v-model="form.ext_type" style="width: 200px;" />
</el-form-item>
</el-col>
</el-row>
</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 prop="storagevehicle_code" label="载具编码" :min-width="flexWidth('storagevehicle_code',crud.data,'载具编码')" />
<el-table-column prop="material_code" label="物料编码" :min-width="flexWidth('material_code',crud.data,'物料编码')" />
<el-table-column prop="material_name" label="物料名称" :min-width="flexWidth('material_name',crud.data,'物料名称')" />
<el-table-column prop="pcsn" label="批次" :min-width="flexWidth('pcsn',crud.data,'批次')" />
<el-table-column prop="status" label="状态" :formatter="formattStatus" :min-width="flexWidth('status',crud.data,'状态')" />
<el-table-column prop="qty" label="组盘数量" :formatter="crud.formatNum3" :min-width="100" />
<el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" />
<el-table-column prop="create_name" label="组盘人" :min-width="flexWidth('create_name',crud.data,'组盘人')" />
<el-table-column prop="create_time" label="组盘时间" :min-width="flexWidth('create_time',crud.data,'组盘时间')" />
<el-table-column
v-permission="['admin','Supplierbase:edit','Supplierbase:del']"
label="操作"
width="150px"
lign="center"
>
<template slot-scope="scope">
<udOperation
:data="scope.row"
:is-visiable-edit="false"
:disabled-dle="scope.row.status === '02'"
:permission="permission"
/>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<pagination />
</div>
<!--放引用的组件-->
<MaterialDialog :dialog-show.sync="materialDialog" @materialChoose="materialChoose" />
</div>
</template>
<script>
import crudGroup from '@/views/wms/pdm/group/group'
import CRUD, { crud, form, header, presenter } from '@crud/crud'
import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
import rrOperation from '@crud/RR.operation'
import MaterialDialog from '@/views/wms/basedata/material/MaterialDialog'
const defaultForm = {
group_id: null,
storagevehicle_code: null,
material_id: null,
material_name: null,
material_spec: null,
pcsn: null,
qty_unit_id: null,
qty_unit_name: null,
qty: null,
remark: null,
status: null,
create_id: null,
create_name: null,
create_time: null,
ext_code: null,
ext_type: null
}
export default {
name: 'Group',
components: { pagination, MaterialDialog, crudOperation, rrOperation, udOperation },
mixins: [presenter(), header(), form(defaultForm), crud()],
tableEnums: ['md_pb_measureunit#unit_name#measure_unit_id'],
// 数据字典
dicts: ['is_used', 'GROUP_STATUS'],
cruds() {
return CRUD({
title: '组盘记录',
url: 'api/group',
optShow: {
add: true,
reset: true
},
idField: 'group_id',
sort: 'group_id,desc',
crudMethod: { ...crudGroup }
})
},
data() {
return {
permission: {},
materialDialog: false,
classes: [],
rules: {
}
}
},
methods: {
// 钩子在获取表格数据之前执行false 则代表不获取数据
[CRUD.HOOK.beforeRefresh]() {
return true
},
formattStatus(row) {
return this.dict.label.GROUP_STATUS[row.status]
},
getMaterial() {
this.materialDialog = true
},
unitChange(row) {
const split = row.split('@')
this.form.qty_unit_id = split[0]
this.form.qty_unit_name = split[1]
},
materialChoose(row) {
this.form.material_name = row.material_name
this.form.material_id = row.material_id
this.form.material_code = row.material_code
this.form.material_spec = row.material_spec
}
}
}
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,177 @@
<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="90px"
label-suffix=":"
>
<el-form-item label="所属区域">
<el-select
clearable
v-model="query.region_code"
style="width: 120px"
placeholder=""
>
<el-option
v-for="item in tableEnum.sch_base_region"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="点位搜索">
<el-input
v-model="query.point_code"
clearable
size="small"
placeholder="点位编码或名称"
style="width: 200px;"
class="filter-item"
/>
</el-form-item>
<el-form-item label="物料搜索">
<el-input
v-model="query.material_code"
clearable
size="small"
placeholder="物料编码、名称或规格"
style="width: 200px;"
class="filter-item"
/>
</el-form-item>
<el-form-item label="批次号">
<el-input
v-model="query.pcsn"
clearable
size="small"
placeholder="批次号"
style="width: 200px;"
class="filter-item"
/>
</el-form-item>
<rrOperation :crud="crud" />
</el-form>
</div>
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" />
<!--表格渲染-->
<el-table
ref="table"
v-loading="crud.loading"
:data="crud.data"
size="mini"
style="width: 100%;"
@selection-change="crud.selectionChangeHandler"
>
<el-table-column prop="point_code" label="点位编码" :min-width="flexWidth('struct_code',crud.data,'点位编码')" />
<el-table-column prop="region_code" label="区域编码" :min-width="flexWidth('struct_name',crud.data,'区域编码')" />
<el-table-column prop="material_code" label="物料编码" :min-width="flexWidth('material_code',crud.data,'物料编码')" />
<el-table-column prop="material_spec" label="物料规格" :min-width="flexWidth('material_code',crud.data,'物料规格')" />
<el-table-column prop="material_name" label="物料名称" :min-width="flexWidth('material_name',crud.data,'物料名称')" />
<el-table-column prop="pcsn" label="批次号" :min-width="flexWidth('pcsn',crud.data,'批次号')" />
<el-table-column prop="storagevehicle_code" label="载具号" :min-width="flexWidth('storagevehicle_code',crud.data,'载具号')" />
<el-table-column prop="qty" label="总数" :formatter="crud.formatNum3" :min-width="100" />
<el-table-column label="可用数" :min-width="100" >
<template slot-scope="scope">
<span>{{ scope.row.qty - scope.row.frozen_qty }}</span>
</template>
</el-table-column>
<el-table-column prop="frozen_qty" label="冻结数" :formatter="crud.formatNum3" :min-width="100" />
<el-table-column prop="unit_name" label="计量单位" :min-width="flexWidth('qty_unit_name',crud.data,'计量单位')" />
<el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" />
<el-table-column prop="inbound_time" label="入库时间" :min-width="flexWidth('insert_time',crud.data,'入库时间')" />
</el-table>
<!--分页组件-->
<pagination />
</div>
</div>
</template>
<script>
import crudStructivt from '@/views/wms/pdm/structivt/structivt'
import CRUD, { presenter, header, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import pagination from '@crud/Pagination'
import { download } from '@/api/data'
import { downloadFile } from '@/utils'
export default {
name: 'Structivt',
components: { pagination, crudOperation, rrOperation },
mixins: [presenter(), header(), crud()],
tableEnums: ['sch_base_region#region_name#region_code'],
cruds() {
return CRUD({
title: '库存管理', url: 'api/regionStruct', idField: 'stockrecord_id', sort: 'stockrecord_id,desc',
optShow: {
add: false,
edit: false,
showDtlLoading: false,
del: false,
download: false,
reset: true
},
crudMethod: { ...crudStructivt }
})
},
data() {
return {
sects: [],
permission: {},
rules: {}
}
},
created() {
},
methods: {
// 钩子在获取表格数据之前执行false 则代表不获取数据
[CRUD.HOOK.beforeRefresh]() {
return true
},
hand(value) {
this.crud.toQuery()
},
sectQueryChange(val) {
if (val.length === 1) {
this.query.stor_id = val[0]
this.query.sect_id = ''
}
if (val.length === 0) {
this.query.sect_id = ''
this.query.stor_id = ''
}
if (val.length === 2) {
this.query.stor_id = val[0]
this.query.sect_id = val[1]
}
this.crud.toQuery()
},
querytable() {
this.crud.toQuery()
},
downdtl() {
if (this.currentRow !== null) {
this.showDtlLoading = true
download('/api/structivt/download', this.crud.query).then(result => {
downloadFile(result, '成品库存', 'xlsx')
this.showDtlLoading = false
}).catch(() => {
this.showDtlLoading = false
})
}
}
}
}
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,65 @@
import request from '@/utils/request'
export function add(data) {
return request({
url: 'api/structivt',
method: 'post',
data
})
}
export function del(ids) {
return request({
url: 'api/structivt/',
method: 'delete',
data: ids
})
}
export function edit(data) {
return request({
url: 'api/structivt',
method: 'put',
data
})
}
export function getStruct() {
return request({
url: 'api/structivt/getStruct',
method: 'get'
})
}
export function getStructById(data) {
return request({
url: 'api/structivt/getStructById',
method: 'post',
data
})
}
export function getUnits() {
return request({
url: 'api/structivt/getUnits',
method: 'get'
})
}
export function save(data) {
return request({
url: 'api/structivt/save',
method: 'post',
data: data
})
}
export function excelImport(data) {
return request({
url: 'api/structivt/importExcel',
method: 'post',
data
})
}
export default { add, edit, del, getStruct, getStructById, getUnits, save, excelImport }