物料出入库日志

物料出入库日志
pull/2/head
siontion 9 months ago
parent 6cf7f19779
commit 159def12f6

@ -1,5 +1,6 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.pn;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.rg.RgDO;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -91,5 +92,11 @@ public class PnController {
ExcelUtils.write(response, "库位.xls", "数据", PnRespVO.class,
BeanUtils.toBean(list, PnRespVO.class));
}
@GetMapping({"/all-simples"})
@Operation(summary = "TODO:获取仓库精简信息列表", description = "只包含被开启的仓库,主要用于前端的下拉选项")
public CommonResult<List<Map<String, Object>> > getSimpleList() {
List<Map<String, Object>> list = pnService.getSimpleList();
// 拼接数据
return success(list);
}
}

@ -1,5 +1,6 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.rg;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -92,4 +93,11 @@ public class RgController {
BeanUtils.toBean(list, RgRespVO.class));
}
@GetMapping({"/all-simples"})
@Operation(summary = "TODO:获取仓库精简信息列表", description = "只包含被开启的仓库,主要用于前端的下拉选项")
public CommonResult<List<Map<String, Object>> > getSimpleList() {
List<Map<String, Object>> list = rgService.getSimpleList();
// 拼接数据
return success(list);
}
}

@ -1,5 +1,9 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.storage;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO;
import com.chanko.yunxi.mes.module.heli.service.storagelog.StorageLogService;
import com.chanko.yunxi.mes.module.heli.service.storagemat.StorageMatService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -39,6 +43,12 @@ public class StorageController {
@Resource
private StorageService storageService;
@Resource
private StorageMatService storageMatService;
@Resource
private StorageLogService storageLogService;
@PostMapping("/create")
@Operation(summary = "创建入/出库")
@PreAuthorize("@ss.hasPermission('heli:storage:create')")
@ -57,9 +67,12 @@ public class StorageController {
@Operation(summary = "更新入/出库")
@PreAuthorize("@ss.hasPermission('heli:storage:update')")
public CommonResult<Boolean> updateStorageStatus(@Valid @RequestBody StorageSaveReqVO updateReqVO) {
// 获取最新的出入库信息
StorageDO targetDo = storageService.getStorage(updateReqVO.getId());
targetDo.setStatus(updateReqVO.getStatus());
// 提交或者作废时记录相关操作人
LocalDateTime currTime = LocalDateTime.now();
if(updateReqVO.getStatus().equals(2) && updateReqVO.getStockType().equals(1)){
targetDo.setKeeper(updateReqVO.getKeeper());
@ -74,6 +87,18 @@ public class StorageController {
updateReqVO = BeanUtils.toBean(targetDo, StorageSaveReqVO.class);
storageService.updateStorage(updateReqVO);
// 获取当前库存下所有物料信息
List<StorageMatDO> matList = storageMatService.getStorageMatListByStockId(targetDo.getId());
// 将物料信息转化日志信息
List<StorageLogDO> logList = BeanUtils.toBean(matList,StorageLogDO.class);
// 同步库存单状态到日志,便于以后统计
for (StorageLogDO log : logList){
log.setStatus(targetDo.getStatus());
}
// 批量保存当前库存物料日志信息
storageLogService.createStorageLogBatch(logList);
return success(true);
}

@ -1,5 +1,6 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.storagelog;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogAll.StorageLogAllDO;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -74,9 +75,9 @@ public class StorageLogController {
@GetMapping("/page")
@Operation(summary = "获得入/出库日志分页")
@PreAuthorize("@ss.hasPermission('heli:storage-log:query')")
public CommonResult<PageResult<StorageLogRespVO>> getStorageLogPage(@Valid StorageLogPageReqVO pageReqVO) {
PageResult<StorageLogDO> pageResult = storageLogService.getStorageLogPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, StorageLogRespVO.class));
public CommonResult<PageResult<StorageLogAllDO>> getStorageLogPage(@Valid StorageLogPageReqVO pageReqVO) {
PageResult<StorageLogAllDO> pageResult = storageLogService.getStorageLogPage(pageReqVO);
return success(pageResult);
}
@GetMapping("/export-excel")
@ -86,7 +87,7 @@ public class StorageLogController {
public void exportStorageLogExcel(@Valid StorageLogPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<StorageLogDO> list = storageLogService.getStorageLogPage(pageReqVO).getList();
List<StorageLogAllDO> list = storageLogService.getStorageLogPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "入/出库日志.xls", "数据", StorageLogRespVO.class,
BeanUtils.toBean(list, StorageLogRespVO.class));

@ -16,45 +16,27 @@ import static com.chanko.yunxi.mes.framework.common.util.date.DateUtils.FORMAT_Y
@ToString(callSuper = true)
public class StorageLogPageReqVO extends PageParam {
@Schema(description = "入/出库Id", example = "3528")
private Long stockId;
@Schema(description = "物料编码")
private String matCode;
@Schema(description = "物料 Id,对应 base_material表中的 Id 列", example = "21832")
private Long matId;
@Schema(description = "物料名称")
private String matName;
@Schema(description = "仓库 Id对应 wms_wh 表中的Id", example = "3")
private Long whId;
@Schema(description = "库区 Id对应 wms_rg 表中的Id", example = "15108")
private Long rgId;
@Schema(description = "库区 Id对应 wms_rg 表中的Id", example = "3954")
private Long pnId;
@Schema(description = "库存良品数量")
private BigDecimal storageOkQty;
@Schema(description = "物料类型")
private String matType;
@Schema(description = "批次号")
private String lotNo;
@Schema(description = "状态")
private String status;
@Schema(description = "备注", example = "你说的对")
private String description;
@Schema(description = "业务单据编号")
private String stockNo;
@Schema(description = "记录的创建人,对应员工表中的 Id")
private String creator;
@Schema(description = "上游单据编号")
private String headerNo;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "出入库类型")
private Integer stockType;
@Schema(description = "记录的修改人,对应员工表中的 Id")
private String updater;
@Schema(description = "更新时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] updateTime;
}

@ -54,4 +54,39 @@ public class StorageLogRespVO {
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "业务编号")
@ExcelProperty("业务编号")
private String stockNo;
@Schema(description = "业务类型")
@ExcelProperty("业务类型")
private Integer stockType;
@Schema(description = "上游业务编号")
@ExcelProperty("上游业务编号")
private String headerNo;
@Schema(description = "物料名称")
@ExcelProperty("物料名称")
private String matName;
@Schema(description = "物料编码")
@ExcelProperty("物料编码")
private String matCode;
@Schema(description = "物料类型")
@ExcelProperty("物料类型")
private String matType;
@Schema(description = "仓库名称")
@ExcelProperty("物料类型")
private String whName;
@Schema(description = "库区名称")
@ExcelProperty("物料类型")
private String rgName;
@Schema(description = "库位名称")
@ExcelProperty("物料类型")
private String pnName;
}

@ -106,4 +106,12 @@ public class WarehouseController {
// 拼接数据
return success(BeanUtils.toBean(list, WarehouseDO.class));
}
@GetMapping({"/all-simples"})
@Operation(summary = "TODO:获取仓库精简信息列表", description = "只包含被开启的仓库,主要用于前端的下拉选项")
public CommonResult<List<Map<String, Object>> > getSimpleList() {
List<Map<String, Object>> list = warehouseService.getSimpleList();
// 拼接数据
return success(list);
}
}

@ -0,0 +1,66 @@
package com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogAll;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.math.BigDecimal;
/**
* / DO
*
* @author
*/
@TableName("v_storage_material_log")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class StorageLogAllDO extends BaseDO {
/**
* id
*/
@TableId
private Long id;
/**
*
*/
private BigDecimal storageOkQty;
/**
*
*/
private String lotNo;
private String stockNo;
private Integer stockType;
private String stockTypeName;
private String headerNo;
private String matName;
private String matCode;
private String matType;
private String whName;
private String rgName;
private String pnName;
private String shortName;
private String matSpec;
private String matBrand;
private String matUnit;
}

@ -2,10 +2,14 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.pn;
import java.util.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.query.QueryWrapperX;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.rg.RgDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO;
import org.apache.ibatis.annotations.Mapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.pn.vo.*;
@ -31,5 +35,9 @@ public interface PnMapper extends BaseMapperX<PnDO> {
.eqIfPresent(PnDO::getWhId, reqVO.getWhId())
.orderByDesc(PnDO::getId));
}
default List<Map<String, Object>> selectSimpleList() {
return selectMaps(new QueryWrapper<PnDO>().select("id", "pn_name").lambda());
}
}

@ -2,10 +2,13 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.rg;
import java.util.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.query.QueryWrapperX;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.rg.RgDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO;
import org.apache.ibatis.annotations.Mapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.rg.vo.*;
@ -30,4 +33,10 @@ public interface RgMapper extends BaseMapperX<RgDO> {
.orderByDesc(RgDO::getId));
}
default List<Map<String, Object>> selectSimpleList() {
return selectMaps(new QueryWrapper<RgDO>().select("id", "rg_name").lambda());
}
}

@ -0,0 +1,42 @@
package com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog;
import com.alibaba.druid.util.StringUtils;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageLogPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.rg.RgDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogAll.StorageLogAllDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
/**
* / Mapper
*
* @author
*/
@Mapper
public interface StorageLogAllMapper extends BaseMapperX<StorageLogAllDO> {
default PageResult<StorageLogAllDO> selectPage(StorageLogPageReqVO reqVO) {
MPJLambdaWrapper<StorageLogAllDO> query = new MPJLambdaWrapper<>();
query.selectAll(StorageLogAllDO.class)
.orderByDesc(StorageLogAllDO::getId);
query.like(!StringUtils.isEmpty(reqVO.getMatType()),StorageLogAllDO::getMatType, reqVO.getMatType())
.eq(reqVO.getStockType()!= null,StorageLogAllDO::getStockType, reqVO.getStockType())
.like(!StringUtils.isEmpty(reqVO.getMatName()), StorageLogAllDO::getMatName, reqVO.getMatName())
.like(!StringUtils.isEmpty(reqVO.getMatCode()), StorageLogAllDO::getMatCode, reqVO.getMatCode())
.like(!StringUtils.isEmpty(reqVO.getStockNo()), StorageLogAllDO::getStockNo, reqVO.getStockNo())
.like(!StringUtils.isEmpty(reqVO.getHeaderNo()), StorageLogAllDO::getHeaderNo, reqVO.getHeaderNo())
.like(!StringUtils.isEmpty(reqVO.getLotNo()),StorageLogAllDO::getLotNo, reqVO.getLotNo());
return selectPage(reqVO,query);
}
PageResult<StorageLogAllDO> selectAllPage(StorageLogPageReqVO reqVO);
}

@ -3,11 +3,18 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog;
import java.util.*;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.rg.RgDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogAll.StorageLogAllDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO;
import org.springframework.util.StringUtils;
/**
* / Mapper
@ -17,21 +24,28 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.*;
@Mapper
public interface StorageLogMapper extends BaseMapperX<StorageLogDO> {
default PageResult<StorageLogDO> selectPage(StorageLogPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<StorageLogDO>()
.eqIfPresent(StorageLogDO::getStockId, reqVO.getStockId())
.eqIfPresent(StorageLogDO::getMatId, reqVO.getMatId())
.eqIfPresent(StorageLogDO::getWhId, reqVO.getWhId())
.eqIfPresent(StorageLogDO::getRgId, reqVO.getRgId())
.eqIfPresent(StorageLogDO::getPnId, reqVO.getPnId())
.eqIfPresent(StorageLogDO::getStorageOkQty, reqVO.getStorageOkQty())
.eqIfPresent(StorageLogDO::getLotNo, reqVO.getLotNo())
.eqIfPresent(StorageLogDO::getDescription, reqVO.getDescription())
.eqIfPresent(StorageLogDO::getCreator, reqVO.getCreator())
.betweenIfPresent(StorageLogDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(StorageLogDO::getUpdater, reqVO.getUpdater())
.betweenIfPresent(StorageLogDO::getUpdateTime, reqVO.getUpdateTime())
.orderByDesc(StorageLogDO::getId));
}
// default PageResult<StorageLogDO> selectPage(StorageLogPageReqVO reqVO) {
// MPJLambdaWrapper<StorageLogDO> query = new MPJLambdaWrapper<>();
//
// query.selectAll(StorageLogDO.class)
// .select("st.stock_no as stockNo", "st.stock_type as stockType","st.header_no as headerNo", "mat.name as matName","mat.code as matCode","mat.material_type as matType","wh.wh_name as whName","rg.rg_name as rgName","pn.pn_name as pnName")
// .leftJoin(StorageDO.class, "st", StorageDO::getId, StorageLogDO::getStockId)
// .leftJoin(MaterialDO.class,"mat", MaterialDO::getId,StorageLogDO::getMatId)
// .leftJoin(WarehouseDO.class,"wh", WarehouseDO::getId,StorageLogDO::getWhId)
// .leftJoin(RgDO.class,"rg", RgDO::getId,StorageLogDO::getRgId)
// .leftJoin(PnDO.class,"pn", PnDO::getId,StorageLogDO::getPnId)
// .disableSubLogicDel()
// .orderByDesc(StorageLogDO::getId);
//
// query.eq(reqVO.getMatType() != null,"mat.material_type", reqVO.getMatType())
// .eq(reqVO.getStockType() != null,"st.stock_type", reqVO.getStockType())
// .like(!StringUtils.isEmpty(reqVO.getMatName()), "mat.name", reqVO.getMatName())
// .like(!StringUtils.isEmpty(reqVO.getMatCode()), "mat.code", reqVO.getMatCode())
// .like(!StringUtils.isEmpty(reqVO.getStockNo()), "st.stock_no", reqVO.getStockNo())
// .like(!StringUtils.isEmpty(reqVO.getHeaderNo()), "st.header_no", reqVO.getHeaderNo())
// .like(!StringUtils.isEmpty(reqVO.getLotNo()),StorageLogDO::getLotNo, reqVO.getLotNo());
//
// return selectPage(reqVO);
// }
//PageResult<StorageLogAllDO> selectAllPage(StorageLogPageReqVO reqVO);
}

@ -2,10 +2,15 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat;
import java.util.*;
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.dept.DeptDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagemat.vo.*;
@ -33,5 +38,13 @@ public interface StorageMatMapper extends BaseMapperX<StorageMatDO> {
.betweenIfPresent(StorageMatDO::getUpdateTime, reqVO.getUpdateTime())
.orderByDesc(StorageMatDO::getId));
}
default List<StorageMatDO> selectMatByStorckID(Long stockId) {
MPJLambdaWrapper<StorageMatDO> query = new MPJLambdaWrapper<>();
query.selectAll(StorageMatDO.class)
.eq(StorageMatDO::getStockId, stockId);
return selectList(query);
}
List<StorageMatValidRespVO> selectStorageMatValid();
}

@ -2,9 +2,12 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.warehouse;
import java.util.*;
import cn.hutool.core.lang.Dict;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.query.QueryWrapperX;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import org.apache.ibatis.annotations.Mapper;
@ -36,4 +39,10 @@ public interface WarehouseMapper extends BaseMapperX<WarehouseDO> {
default List<WarehouseDO> selectListByStatus(Integer wStatus) {
return selectList(WarehouseDO::getWhStatus, wStatus);
}
default List<Map<String, Object>> selectSimpleList() {
return selectMaps(new QueryWrapper<WarehouseDO>().select("id", "wh_name").lambda());
}
}

@ -6,6 +6,7 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.pn.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.rg.RgDO;
/**
* Service
@ -52,4 +53,6 @@ public interface PnService {
*/
PageResult<PnDO> getPnPage(PnPageReqVO pageReqVO);
List<Map<String, Object>> getSimpleList();
}

@ -1,5 +1,6 @@
package com.chanko.yunxi.mes.module.heli.service.pn;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.rg.RgDO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -71,4 +72,8 @@ public class PnServiceImpl implements PnService {
return pnMapper.selectPage(pageReqVO);
}
@Override
public List<Map<String, Object>> getSimpleList() {
return pnMapper.selectSimpleList();
}
}

@ -6,6 +6,7 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.rg.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.rg.RgDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO;
/**
* Service
@ -52,4 +53,5 @@ public interface RgService {
*/
PageResult<RgDO> getRgPage(RgPageReqVO pageReqVO);
List<Map<String, Object>> getSimpleList();
}

@ -71,4 +71,9 @@ public class RgServiceImpl implements RgService {
return rgMapper.selectPage(pageReqVO);
}
@Override
public List<Map<String, Object>> getSimpleList() {
return rgMapper.selectSimpleList();
}
}

@ -4,8 +4,10 @@ import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogAll.StorageLogAllDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO;
/**
* / Service
@ -50,6 +52,8 @@ public interface StorageLogService {
* @param pageReqVO
* @return /
*/
PageResult<StorageLogDO> getStorageLogPage(StorageLogPageReqVO pageReqVO);
PageResult<StorageLogAllDO> getStorageLogPage(StorageLogPageReqVO pageReqVO);
void createStorageLogBatch(List<StorageLogDO> storageLogDOs);
}

@ -1,5 +1,7 @@
package com.chanko.yunxi.mes.module.heli.service.storagelog;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogAll.StorageLogAllDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogAllMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -29,6 +31,9 @@ public class StorageLogServiceImpl implements StorageLogService {
@Resource
private StorageLogMapper storageLogMapper;
@Resource
private StorageLogAllMapper storageLogAllMapper;
@Override
public Long createStorageLog(StorageLogSaveReqVO createReqVO) {
// 插入
@ -67,8 +72,15 @@ public class StorageLogServiceImpl implements StorageLogService {
}
@Override
public PageResult<StorageLogDO> getStorageLogPage(StorageLogPageReqVO pageReqVO) {
return storageLogMapper.selectPage(pageReqVO);
public PageResult<StorageLogAllDO> getStorageLogPage(StorageLogPageReqVO pageReqVO) {
return storageLogAllMapper.selectPage(pageReqVO);
}
@Override
public void createStorageLogBatch(List<StorageLogDO> storageLogDOs) {
for (StorageLogDO storageLogDo : storageLogDOs){
storageLogMapper.insert(storageLogDo);
}
}
}

@ -59,6 +59,8 @@ public interface StorageMatService {
*/
List<StorageMatValidRespVO> getStorageMatList();
int deleteStorageMatList(Long stockid);
int deleteStorageMatList(Long stockId);
List<StorageMatDO> getStorageMatListByStockId(Long stockId);
}

@ -83,12 +83,17 @@ public class StorageMatServiceImpl implements StorageMatService {
}
@Override
public int deleteStorageMatList(Long stockid) {
public int deleteStorageMatList(Long stockId) {
//删除条件
Map<String, Object> columnMap = Maps.newHashMap();
columnMap.put("stock_id", stockid);
columnMap.put("stock_id", stockId);
return storageMatMapper.deleteByMap(columnMap);
}
@Override
public List<StorageMatDO> getStorageMatListByStockId(Long stockId) {
return storageMatMapper.selectMatByStorckID(stockId);
}
}

@ -61,4 +61,6 @@ public interface WarehouseService {
*/
List<WarehouseDO> getWarehouseListByStatus(Integer whStatus);
List<Map<String, Object>> getSimpleList();
}

@ -83,4 +83,8 @@ public class WarehouseServiceImpl implements WarehouseService {
return warehouseMapper.selectListByStatus(whStatus);
}
@Override
public List<Map<String, Object>> getSimpleList() {
return warehouseMapper.selectSimpleList();
}
}

@ -0,0 +1,58 @@
<?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="com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogAllMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
<resultMap id="StorageLogAllDO" type="com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogAll.StorageLogAllDO">
<result property="id" column="id"/>
<result property="stockId" column="stock_id"/>
<result property="matId" column="mat_id"/>
<result property="whId" column="wh_id"/>
<result property="rgId" column="rg_id"/>
<result property="pnId" column="pn_id"/>
<result property="storageOkQty" column="storage_ok_qty"/>
<result property="lotNo" column="lotNo"/>
<result property="stockNo" column="stock_no"/>
<result property="stockType" column="stock_type"/>
<result property="headerNo" column="header_no"/>
<result property="matName" column="mat_name"/>
<result property="matCode" column="mat_code"/>
<result property="matType" column="mat_type"/>
<result property="whName" column="wh_name"/>
<result property="rgName" column="rg_name"/>
<result property="pnName" column="pn_name"/>
</resultMap>
<select id="selectAllPage"
parameterType="com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageLogPageReqVO"
resultMap="StorageLogAllDO">
select * from v_storage_material_log
<where>
<if test="matCode != null and matCode != ''">
AND matCode like concat('%', #{matCode}, '%')
</if>
<if test="matName != null and matName != ''">
AND matName like concat('%', #{matName}, '%')
</if>
<if test="lotNo != null and lotNo != ''">
AND lotNo like concat('%', #{lotNo}, '%')
</if>
<if test="stockNo != null and stockNo != ''">
AND stockNo like concat('%', #{stockNo}, '%')
</if>
<if test="headerNo != null and headerNo != ''">
AND headerNo like concat('%', #{headerNo}, '%')
</if>
<if test="stockType != null and stockType != ''">
AND stockType =#{headerNo}
</if>
<if test="matType != null and matType != ''">
AND matType #{matType}
</if>
</where>
</select>
</mapper>

@ -8,7 +8,5 @@
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
<select id="selectStorageMatLogList" resultType="com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO">
select * from v_storage_material_log
</select>
</mapper>

@ -10,6 +10,11 @@ export interface PnVO {
whId: number
}
// 查询库区分页
export const getSimpList = async () => {
return await request.get({ url: `/heli/pn/all-simples` })
}
// 查询库位分页
export const getPnPage = async (params) => {
return await request.get({ url: `/heli/pn/page`, params })

@ -9,6 +9,11 @@ export interface RgVO {
rgStatus: number
}
// 查询库区分页
export const getSimpList = async () => {
return await request.get({ url: `/heli/rg/all-simples` })
}
// 查询库区分页
export const getRgPage = async (params) => {
return await request.get({ url: `/heli/rg/page`, params })

@ -8,6 +8,10 @@ export interface WarehouseVO {
telephone: string
whStatus: number
}
// 查询仓库分页
export const getSimpList = async () => {
return await request.get({ url: `/heli/warehouse/all-simples` })
}
// 查询仓库分页
export const getWarehouseSimpList = async () => {

@ -223,6 +223,7 @@ export enum DICT_TYPE {
HELI_STORAGE_IN_TYPE = 'heli_storage_in_type', // 入库类型
HELI_STORAGE_OUT_TYPE = 'heli_storage_out_type',//出库类型
HELI_STORAGE_STATUS = 'heli_storage_status',//入库出库状态
HELI_STORAGE_TYPE = 'heli_storage_type', // 入库类型
HELI_PROJECT_ORDER_STATUS = 'heli_project_order_status', //项目订单状态
HELI_DELIVERY_STATUS = 'heli_delivery_status', // 发货状态

@ -1,135 +1,46 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="入/出库Id" prop="stockId">
<el-input
v-model="queryParams.stockId"
placeholder="请输入入/出库Id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form-item label="物料编码" prop="matCode">
<el-input v-model="queryParams.matCode" placeholder="物料编码" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="物料 Id,对应 base_material表中的 Id 列" prop="matId">
<el-input
v-model="queryParams.matId"
placeholder="请输入物料 Id,对应 base_material表中的 Id 列"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
<el-form-item label="物料名称" prop="matName">
<el-input v-model="queryParams.matName" placeholder="物料名称" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="仓库 Id对应 wms_wh 表中的Id" prop="whId">
<el-input
v-model="queryParams.whId"
placeholder="请输入仓库 Id对应 wms_wh 表中的Id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="库区 Id对应 wms_rg 表中的Id" prop="rgId">
<el-input
v-model="queryParams.rgId"
placeholder="请输入库区 Id对应 wms_rg 表中的Id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="库区 Id对应 wms_rg 表中的Id" prop="pnId">
<el-input
v-model="queryParams.pnId"
placeholder="请输入库区 Id对应 wms_rg 表中的Id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="库存良品数量" prop="storageOkQty">
<el-input
v-model="queryParams.storageOkQty"
placeholder="请输入库存良品数量"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
<el-form-item label="物料类型" prop="matType">
<el-select v-model="queryParams.matType" placeholder="下拉选择" clearable class="!w-240px">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_MATERIAL_TYPE)" :key="dict.label" :label="dict.label"
:value="dict.label" />
</el-select>
</el-form-item>
<el-form-item label="批次号" prop="lotNo">
<el-input
v-model="queryParams.lotNo"
placeholder="请输入批次号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
<el-input v-model="queryParams.lotNo" placeholder="批次号" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="记录的创建人,对应员工表中的 Id" prop="creator">
<el-input
v-model="queryParams.creator"
placeholder="请输入记录的创建人,对应员工表中的 Id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
<el-form-item label="业务单据编号" prop="stockNo">
<el-input v-model="queryParams.stockNo" placeholder="业务单据编号" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
/>
<el-form-item label="变动方向" prop="stockType">
<el-select v-model="queryParams.stockType" placeholder="下拉选择" clearable class="!w-240px">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_TYPE)" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="记录的修改人,对应员工表中的 Id" prop="updater">
<el-input
v-model="queryParams.updater"
placeholder="请输入记录的修改人,对应员工表中的 Id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="更新时间" prop="updateTime">
<el-date-picker
v-model="queryParams.updateTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
/>
<el-form-item label="上游单据编号" prop="headerNo">
<el-input v-model="queryParams.headerNo" placeholder="上游单据编号" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['heli:storage-log:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
<el-button @click="handleQuery">
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['heli:storage-log:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
</el-form-item>
</el-form>
@ -138,30 +49,25 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="主键id" align="center" prop="id" />
<el-table-column label="入/出库Id" align="center" prop="stockId" />
<el-table-column label="物料 Id,对应 base_material表中的 Id 列" align="center" prop="matId" />
<el-table-column label="仓库 Id对应 wms_wh 表中的Id" align="center" prop="whId" />
<el-table-column label="库区 Id对应 wms_rg 表中的Id" align="center" prop="rgId" />
<el-table-column label="库区 Id对应 wms_rg 表中的Id" align="center" prop="pnId" />
<el-table-column label="库存良品数量" align="center" prop="storageOkQty" />
<el-table-column label="物料编码" align="center" prop="matCode" />
<el-table-column label="物料名称" align="center" prop="matName" />
<el-table-column label="物料类型" align="center" prop="matType" />
<el-table-column label="物料简称" align="center" prop="shortName" />
<el-table-column label="规格/型号" align="center" prop="matSpec" />
<el-table-column label="品牌" align="center" prop="matBrand" />
<el-table-column label="业务单据编号" align="center" prop="stockNo" />
<el-table-column label="业务单据类型" align="center" prop="stockTypeName" />
<el-table-column label="上游单据编号" align="center" prop="headerNo" />
<el-table-column label="仓库" align="center" prop="whName" />
<el-table-column label="库区" align="center" prop="rgName" />
<el-table-column label="库位" align="center" prop="pnName" />
<el-table-column label="批次号" align="center" prop="lotNo" />
<el-table-column label="备注" align="center" prop="description" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="变动数量" align="center" prop="storageOkQty" />
<el-table-column label="库存单位" align="center" prop="matUnit" />
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
@pagination="getList" />
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
@ -169,13 +75,22 @@
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import * as StorageLogApi from '@/api/heli/storagelog'
import StorageLogForm from './StorageLogForm.vue'
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import * as WarehouseApi from '@/api/heli/warehouse'
import * as RgApi from '@/api/heli/rg'
import * as PnApi from '@/api/heli/pn'
defineOptions({ name: 'StorageLog' })
const whList = ref([])
const rgList = ref([])
const pnList = ref([])
const message = useMessage() //
const { t } = useI18n() //
@ -185,21 +100,16 @@ const total = ref(0) // 列表的总页数
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
stockId: undefined,
matId: undefined,
whId: undefined,
rgId: undefined,
pnId: undefined,
storageOkQty: undefined,
matCode: undefined,
matName: undefined,
matType: undefined,
lotNo: undefined,
description: undefined,
creator: undefined,
createTime: [],
updater: undefined,
updateTime: [],
pnId: undefined,
stockNo: undefined,
stockType: undefined,
headerNo: undefined,
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
@ -224,25 +134,24 @@ const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await StorageLogApi.exportStorageLog(queryParams)
download.excel(data, '入/出库日志.xls')
} catch {
} finally {
exportLoading.value = false
}
}
//
const init_page_wh = (async ()=>{
whList.value = await WarehouseApi.getSimpList()
})
//
const init_page_rg = (async ()=>{
rgList.value = await RgApi.getSimpList()
})
//
const init_page_pn = (async ()=>{
pnList.value = await PnApi.getSimpList()
})
/** 初始化 **/
onMounted( async () => {
onMounted(async () => {
await init_page_wh()
await init_page_rg()
await init_page_pn()
await getList()
})
</script>
Loading…
Cancel
Save