Kaynağa Gözat

盘存

master
yangpeilai 1 ay önce
ebeveyn
işleme
5165776449

+ 2
- 2
gly-base-core/src/main/java/cn/com/taiji/core/repo/jpa/invw/InvwObuDetailsRepo.java Dosyayı Görüntüle



//根据仓库编号和入库时间查询库存 //根据仓库编号和入库时间查询库存
@Query(nativeQuery = true, @Query(nativeQuery = true,
value = "SELECT STORE_CODE, AGENCY_ID, BRAND, VERSION, COUNT(CARD_ID) " +
value = "SELECT STORE_CODE, AGENCY_ID, BRAND, VERSION, COUNT(OBU_ID) " +
"FROM INVW_OBU_DETAILS " + "FROM INVW_OBU_DETAILS " +
"WHERE STORE_CODE = ?1 AND STATUS = 'NEW' " + "WHERE STORE_CODE = ?1 AND STATUS = 'NEW' " +
"AND INSERT_TIME <= TO_DATE(?2 , 'yyyy-mm-dd hh24:mi:ss') " + "AND INSERT_TIME <= TO_DATE(?2 , 'yyyy-mm-dd hh24:mi:ss') " +
public List<Object[]> countByStoreCodeAndTime(String storeCode, String endTime); public List<Object[]> countByStoreCodeAndTime(String storeCode, String endTime);


@Query(nativeQuery = true, @Query(nativeQuery = true,
value = "SELECT STORE_CODE, AGENCY_ID, BRAND, VERSION, COUNT(CARD_ID) " +
value = "SELECT STORE_CODE, AGENCY_ID, BRAND, VERSION, COUNT(OBU_ID) " +
"FROM INVW_OBU_DETAILS " + "FROM INVW_OBU_DETAILS " +
"WHERE STORE_CODE = ?1 AND STATUS = 'NEW' " + "WHERE STORE_CODE = ?1 AND STATUS = 'NEW' " +
"AND INSERT_TIME > TO_DATE(?2 , 'yyyy-mm-dd hh24:mi:ss') AND INSERT_TIME <= TO_DATE(?3 , 'yyyy-mm-dd hh24:mi:ss') " + "AND INSERT_TIME > TO_DATE(?2 , 'yyyy-mm-dd hh24:mi:ss') AND INSERT_TIME <= TO_DATE(?3 , 'yyyy-mm-dd hh24:mi:ss') " +

+ 13
- 0
zhywpt-app-invw/src/main/java/cn/com/taiji/invw/dto/stocktaking/InvwStocktakingInfoDetailResponseDTO.java Dosyayı Görüntüle

import lombok.Setter; import lombok.Setter;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;


import java.time.LocalDateTime;
import java.util.List; import java.util.List;


@ApiModel(description = "盘存详情响应") @ApiModel(description = "盘存详情响应")
@Setter @Setter
@Accessors(chain = true) @Accessors(chain = true)
public class InvwStocktakingInfoDetailResponseDTO { public class InvwStocktakingInfoDetailResponseDTO {
@ApiModelProperty(value = "仓库名称")
private String name;//仓库名称
@ApiModelProperty(value = "仓库编号")
private String storeCode;
@ApiModelProperty(value = "盘存开始时间/初期时间")
private LocalDateTime startTime;//盘存开始时间
@ApiModelProperty(value = "盘存结束时间/盘存时间")
private LocalDateTime endTime;//盘存结束时间
@ApiModelProperty(value = "盘存类型 0-系统自动盘存 1-手动盘存")
private Integer type;//类型0-系统自动盘存 1-手动盘存
@ApiModelProperty(value = "操作人")
private String openId;//操作人
@ApiModelProperty(value = "盘存详情") @ApiModelProperty(value = "盘存详情")
List<InvwStocktakingInfoDetailModel> details; List<InvwStocktakingInfoDetailModel> details;
} }

+ 39
- 20
zhywpt-app-invw/src/main/java/cn/com/taiji/invw/manager/stocktaking/InvwStocktakingInfoManagerImpl.java Dosyayı Görüntüle

import cn.com.taiji.core.entity.invw.InvwStocktakingInfo; import cn.com.taiji.core.entity.invw.InvwStocktakingInfo;
import cn.com.taiji.core.entity.invw.InvwStocktakingResult; import cn.com.taiji.core.entity.invw.InvwStocktakingResult;
import cn.com.taiji.core.entity.invw.InvwWarehouse; import cn.com.taiji.core.entity.invw.InvwWarehouse;
import cn.com.taiji.core.entity.user.AccountInfo;
import cn.com.taiji.core.manager.tools.easyExcel.EasyExcelUtil; import cn.com.taiji.core.manager.tools.easyExcel.EasyExcelUtil;
import cn.com.taiji.core.manager.tools.minio.MinioUtil; import cn.com.taiji.core.manager.tools.minio.MinioUtil;
import cn.com.taiji.core.repo.jpa.invw.*; import cn.com.taiji.core.repo.jpa.invw.*;
import cn.com.taiji.core.repo.jpa.user.AccountInfoRepo;
import cn.com.taiji.core.repo.request.invw.InvwStocktakingInfoPageRequest; import cn.com.taiji.core.repo.request.invw.InvwStocktakingInfoPageRequest;
import cn.com.taiji.invw.dto.stocktaking.*; import cn.com.taiji.invw.dto.stocktaking.*;
import cn.com.taiji.invw.manager.AbstractInvwManager; import cn.com.taiji.invw.manager.AbstractInvwManager;
private InvwTransferApplyRepo transferApplyRepo; private InvwTransferApplyRepo transferApplyRepo;
@Autowired @Autowired
private InvwRebackApplyRepo rebackApplyRepo; private InvwRebackApplyRepo rebackApplyRepo;
@Autowired
private AccountInfoRepo accountInfoRepo;


private static final DateTimeFormatter DF = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); private static final DateTimeFormatter DF = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");


List<InvwStocktakingInfoModel> stockInfoModels = insertStocktakingInfo(stockModels, startTime, req); List<InvwStocktakingInfoModel> stockInfoModels = insertStocktakingInfo(stockModels, startTime, req);
// 执行盘库 // 执行盘库
doStocktaking(stockInfoModels, storeCodes); doStocktaking(stockInfoModels, storeCodes);
persistOperateLog(OperateType.STOCKTAKING_INFO, null, req.getOrderSource(), findOpenIdByToken(req.getAccessToken()), "库存盘存");
persistOperateLog(OperateType.STOCKTAKING_INFO, "-1", req.getOrderSource(), findOpenIdByToken(req.getAccessToken()), "库存盘存");
} }


@Override @Override
List<InvwStocktakingResult> results = stocktakingResultRepo.findByMainId(req.getId()); List<InvwStocktakingResult> results = stocktakingResultRepo.findByMainId(req.getId());
List<InvwStocktakingInfoDetailModel> details = new ArrayList<>(); List<InvwStocktakingInfoDetailModel> details = new ArrayList<>();


// 公共属性
response.setStartTime(stocktakingInfo.getStartTime());
response.setEndTime(stocktakingInfo.getEndTime());
response.setType(stocktakingInfo.getType());
response.setOpenId(stocktakingInfo.getOpenId());
if(hasText(stocktakingInfo.getOpenId())) {
AccountInfo accountInfo = accountInfoRepo.findByOpenId(stocktakingInfo.getOpenId());
if(accountInfo != null){
response.setOpenId(accountInfo.getUserName());
}else {
response.setOpenId("未知");
}
}else {
response.setOpenId("系统自动运行");
}
response.setStoreCode(warehouse.getCode());
response.setName(warehouse.getName());

// 列表
for (InvwStocktakingResult result : results) { for (InvwStocktakingResult result : results) {
InvwStocktakingInfoDetailModel model = new InvwStocktakingInfoDetailModel(); InvwStocktakingInfoDetailModel model = new InvwStocktakingInfoDetailModel();
BeanUtils.copyProperties(result, model); BeanUtils.copyProperties(result, model);

// 公共属性
model.setStartTime(stocktakingInfo.getStartTime());
model.setEndTime(stocktakingInfo.getEndTime());
model.setType(stocktakingInfo.getType());
model.setOpenId(stocktakingInfo.getOpenId());
model.setName(warehouse.getName());

details.add(model); details.add(model);
} }
response.setDetails(details); response.setDetails(details);
// 插入盘存信息 // 插入盘存信息
public List<InvwStocktakingInfoModel> insertStocktakingInfo(List<InvwStocktakingInfoStockModel> stockModels, LocalDateTime startTime, InvwStocktakingInfoStockRequestDTO req) throws ManagerException { public List<InvwStocktakingInfoModel> insertStocktakingInfo(List<InvwStocktakingInfoStockModel> stockModels, LocalDateTime startTime, InvwStocktakingInfoStockRequestDTO req) throws ManagerException {
List<InvwStocktakingInfo> stocktakingInfos = new ArrayList<>(); List<InvwStocktakingInfo> stocktakingInfos = new ArrayList<>();
String openId = findOpenIdByToken(req.getAccessToken());
for (InvwStocktakingInfoStockModel stockModel : stockModels) { for (InvwStocktakingInfoStockModel stockModel : stockModels) {
stockModel.valid(); stockModel.valid();
InvwStocktakingInfo stocktakingInfo = new InvwStocktakingInfo(); InvwStocktakingInfo stocktakingInfo = new InvwStocktakingInfo();
stocktakingInfo.setStartTime(startTime); stocktakingInfo.setStartTime(startTime);
stocktakingInfo.setCreateTime(startTime); stocktakingInfo.setCreateTime(startTime);
stocktakingInfo.setType(1); stocktakingInfo.setType(1);
stocktakingInfo.setOpenId(findOpenIdByToken(req.getAccessToken()));
stocktakingInfo.setOpenId(openId);
// stocktakingInfo.setOpenId("1"); // stocktakingInfo.setOpenId("1");
stocktakingInfos.add(stocktakingInfo); stocktakingInfos.add(stocktakingInfo);
} }
} catch (Exception e) { } catch (Exception e) {
logger.error("在storeCodes {}盘存过程中发生错误", storeCodes, e); logger.error("在storeCodes {}盘存过程中发生错误", storeCodes, e);
} }
// });
});
});
// });
logger.info("盘存结束"); logger.info("盘存结束");
} }


List<InvwStocktakingResultModel> incomeStat = getInStat(storeCode, lastDoneTime, info.getStartTime(), mainId); List<InvwStocktakingResultModel> incomeStat = getInStat(storeCode, lastDoneTime, info.getStartTime(), mainId);
//出库 (调拨出库、回收出库) //出库 (调拨出库、回收出库)
List<InvwStocktakingResultModel> outStat = getOutStat(storeCode, lastDoneTime, info.getStartTime(), mainId); List<InvwStocktakingResultModel> outStat = getOutStat(storeCode, lastDoneTime, info.getStartTime(), mainId);
//实际用掉
//现在在库
List<InvwStocktakingResultModel> realityStat = getRealityStat(storeCode, lastDoneTime, info.getStartTime(), mainId); List<InvwStocktakingResultModel> realityStat = getRealityStat(storeCode, lastDoneTime, info.getStartTime(), mainId);
//结存 //结存
List<InvwStocktakingResultModel> balanceStat = mergeResultList(bopStat, incomeStat, outStat, realityStat); List<InvwStocktakingResultModel> balanceStat = mergeResultList(bopStat, incomeStat, outStat, realityStat);
inMap.setVersion(model.getVersion()); inMap.setVersion(model.getVersion());


//期初 //期初
if (NumberUtil.add(inMap.getInitCount(), model.getInitCount()) != null) {
inMap.setInitCount(NumberUtil.add(inMap.getInitCount(), model.getInitCount()).intValue());
}
//入库
// if (NumberUtil.add(inMap.getEnterCount(), model.getEnterCount()) != null) {
// inMap.setEnterCount(NumberUtil.add(inMap.getEnterCount(), model.getEnterCount()).intValue());
// if (NumberUtil.add(inMap.getInitCount(), model.getInitCount()) != null) {
// inMap.setInitCount(NumberUtil.add(inMap.getInitCount(), model.getInitCount()).intValue());
// } // }
//入库
if (NumberUtil.add(inMap.getEnterCount(), model.getEnterCount()) != null) {
inMap.setEnterCount(NumberUtil.add(inMap.getEnterCount(), model.getEnterCount()).intValue());
}
//出库 //出库
// if (NumberUtil.add(inMap.getTransferCount(), model.getTransferCount()) != null) { // if (NumberUtil.add(inMap.getTransferCount(), model.getTransferCount()) != null) {
// inMap.setTransferCount(NumberUtil.add(inMap.getTransferCount(), model.getTransferCount()).intValue()); // inMap.setTransferCount(NumberUtil.add(inMap.getTransferCount(), model.getTransferCount()).intValue());


private List<InvwStocktakingResultModel> getRealityStat(String storeCode, LocalDateTime lastDoneTime, LocalDateTime startTime, String mainId) { private List<InvwStocktakingResultModel> getRealityStat(String storeCode, LocalDateTime lastDoneTime, LocalDateTime startTime, String mainId) {
List<InvwStocktakingResultModel> result = new ArrayList<>(); List<InvwStocktakingResultModel> result = new ArrayList<>();
//查询卡签实际在库库存
//查询卡签实际在库库存
List<Object[]> cardDetails = null; List<Object[]> cardDetails = null;
List<Object[]> obuDetails = null; List<Object[]> obuDetails = null;
// if (lastDoneTime == null) { // if (lastDoneTime == null) {
//求和该仓库 //求和该仓库
vo.setInitCount(results.stream().mapToInt(InvwStocktakingResult::getInitCount).sum()); vo.setInitCount(results.stream().mapToInt(InvwStocktakingResult::getInitCount).sum());
vo.setBalanceCount(results.stream().mapToInt(InvwStocktakingResult::getBalanceCount).sum()); vo.setBalanceCount(results.stream().mapToInt(InvwStocktakingResult::getBalanceCount).sum());
}else {
vo.setInitCount(0);
vo.setBalanceCount(0);
} }
vo.setStartTime(stocktakingInfo.getStartTime()); vo.setStartTime(stocktakingInfo.getStartTime());
vo.setEndTime(stocktakingInfo.getEndTime()); vo.setEndTime(stocktakingInfo.getEndTime());

+ 0
- 9
zhywpt-app-invw/src/main/java/cn/com/taiji/invw/model/stocktaking/InvwStocktakingInfoDetailModel.java Dosyayı Görüntüle

@Accessors(chain = true) @Accessors(chain = true)
public class InvwStocktakingInfoDetailModel { public class InvwStocktakingInfoDetailModel {


@ApiModelProperty(value = "盘存开始时间/初期时间")
private LocalDateTime startTime;//盘存开始时间
@ApiModelProperty(value = "盘存结束时间/盘存时间")
private LocalDateTime endTime;//盘存结束时间
@ApiModelProperty(value = "盘存类型 0-系统自动盘存 1-手动盘存")
private Integer type;//类型0-系统自动盘存 1-手动盘存
@ApiModelProperty(value = "操作人")
private String openId;//操作人

@ApiModelProperty(value = "盘存明细ID") @ApiModelProperty(value = "盘存明细ID")
private String id; private String id;
@ApiModelProperty(value = "仓库编号") @ApiModelProperty(value = "仓库编号")

Loading…
İptal
Kaydet