From 59e91a4e9ddaf23cebb12993c774aa899ab22d16 Mon Sep 17 00:00:00 2001
From: 郑永安 <zyazyz250@sina.com>
Date: Mon, 19 Jun 2023 14:22:45 +0800
Subject: [PATCH] 描述
---
src/main/java/com/gk/firework/Service/ServiceImpl/StockServiceImpl.java | 899 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 899 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/StockServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/StockServiceImpl.java
new file mode 100644
index 0000000..064a7df
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/StockServiceImpl.java
@@ -0,0 +1,899 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.BO.DirectionProductBO;
+import com.gk.firework.Domain.BO.ProductLocusInfoBO;
+import com.gk.firework.Domain.BO.SaleOrderDetailInfoBO;
+import com.gk.firework.Domain.DO.ProductDO;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Extension.StockTotal;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.*;
+import com.gk.firework.Mapper.ProductInfoMapper;
+import com.gk.firework.Mapper.StockInfoMapper;
+import com.gk.firework.Service.*;
+import org.joda.time.DateTime;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+import static com.gk.firework.Domain.Enum.ErrorCode.*;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/24 14:04
+ */
+@Service("StockService")
+public class StockServiceImpl extends ServiceImpl<StockInfoMapper, StockInfo> implements StockService {
+ @Autowired
+ private StockInfoMapper stockInfoMapper;
+ @Autowired
+ private ProductInfoMapper productInfoMapper;
+ @Autowired
+ private ProductLocusService productLocusService;
+ @Autowired
+ private ProductService productService;
+ @Autowired
+ private UserService userService;
+ @Autowired
+ private CustomerService customerService;
+ @Autowired
+ private SoldNoStockService soldNoStockService;
+ @Autowired
+ private EntryService entryService;
+ @Autowired
+ private SaleOrderService saleOrderService;
+ @Autowired
+ private SaleOrderDetailService saleOrderDetailService;
+ @Autowired
+ private DeliveryOrderService deliveryOrderService;
+ @Autowired
+ private WarnContentService warnContentService;
+ @Autowired
+ private EnterpriseService enterpriseService;
+ @Autowired
+ private StaticStockService staticStockService;
+
+ /** 入库 **/
+ @Override
+ public boolean putInStorage(UserInfo userInfo, List<ProductVo> productVos, Date datetime, String type) {
+ boolean flag = false;
+ for (ProductVo productVo : productVos){
+ StockInfo stockInfo = selectStockByDirection(productVo.getDirectionCode());
+ ProductInfo productInfo = productInfoMapper.selectProductByDirectionCode(productVo.getItemCode());
+ ProductLocusInfo productLocusInfo = new ProductLocusInfo();
+ //如果为空则创建
+ if (stockInfo == null){
+ stockInfo = new StockInfo();
+ stockInfo.setDirectioncode(productVo.getDirectionCode());
+ stockInfo.setCreateddate(new Date());
+ stockInfo.setCreatedby(userInfo.getUsername());
+ stockInfo.setDirectionboxcode(String.format("%03d",productVo.getBoxNumber()));
+ stockInfo.setModifieddate(datetime);
+ stockInfo.setNum(1);
+ stockInfo.setOperator(userInfo.getUsername());
+ stockInfo.setIndate(datetime);
+ stockInfo.setProductid(productInfo.getId());
+ stockInfo.setOwner(userInfo.getCompanyid().toString());
+ stockInfo.setFlag((byte)0);
+ stockInfo.setType(Byte.parseByte(type));
+ int i = insertStockInfo(stockInfo);
+ if (i == 1){ flag = true; }
+ productLocusInfo = new ProductLocusInfo(productVo.getDirectionCode(),new Date(),
+ datetime,userInfo.getCompany(),null,ProductLocusInfo.ENTRY_STATUS,
+ productVo.getBoxNumber().toString());
+ productLocusService.insertProductLocus(productLocusInfo);
+ }else {
+ //一般入库
+ if (EntryUtils.RK_ENTRY.equals(type)){
+ // 判断入库是否大于修改时间,小于修改时间不做修改
+ if (stockInfo.getModifieddate().compareTo(datetime) > 0 ){
+ continue;
+ }
+
+ //如果不为空,判断flag,如果flag=1,则不进行修改,只记录流向,否则修改owner
+ if (stockInfo.getFlag() == 0){
+ stockInfo.setModifieddate(datetime);
+ stockInfo.setModifiedby(userInfo.getUsername());
+ stockInfo.setIndate(datetime);
+ stockInfo.setOwner(userInfo.getCompanyid().toString());
+ stockInfo.setFlag((byte)0);
+ stockInfo.setStatus("");
+ }
+ productLocusInfo = new ProductLocusInfo(productVo.getDirectionCode(),new Date(),
+ datetime,userInfo.getCompany(),null,ProductLocusInfo.ENTRY_STATUS,
+ productVo.getBoxNumber().toString());
+
+ }else if (EntryUtils.TH_ENTRY.equals(type)){
+ //退货入库
+ //未使用
+ stockInfo.setOwner(userInfo.getCompanyid().toString());
+ stockInfo.setModifieddate(datetime);
+ stockInfo.setModifiedby(userInfo.getUsername());
+ stockInfo.setStatus("");
+ productLocusInfo = new ProductLocusInfo(productVo.getDirectionCode(),new Date(),
+ datetime,userInfo.getCompany(),null,ProductLocusInfo.RETURN_ENTRY_STATUS,
+ productVo.getBoxNumber().toString());
+
+ }
+ productLocusService.insertProductLocus(productLocusInfo);
+ int i = updateStockInfo(stockInfo);
+ if (i == 1){ flag = true; }
+ }
+ }
+ return flag;
+ }
+
+ @Override
+ public void setProductEntryStatus(List<ProductVo> productVos, UserInfo userInfo) {
+ if (productVos.size() != 0 && userInfo != null){
+
+ for (ProductVo productVo : productVos) {
+ if (isStockInfoExist(productVo.getDirectionCode(),userInfo.getCompanyid())){
+ productVo.setEntryFlag("历史入库");
+ }else {
+ productVo.setEntryFlag("可以入库");
+ }
+ }
+ }
+ }
+
+ @Override
+ public void deliveryByDetail(Date datetime, List<DeliveryDetailInfo> deliveryDetailInfos, UserInfo userInfo) {
+ List<ProductVo>productVos = new ArrayList<>();
+ List<ProductLocusInfo>productLocusInfos = new ArrayList<>();
+
+ for (DeliveryDetailInfo deliveryDetailInfo : deliveryDetailInfos){
+ String dire = deliveryDetailInfo.getDirectioncode();
+ DirectionDetail detail = FireworkDeal.dealDirectionCode(dire);
+ ProductVo productVo = productInfoMapper.selectProductVoByDirectionCode(detail.getItemCode());
+ if (FireworkDeal.is22Characters(dire)){
+ FireworkDeal.getProductVos(dire,detail,detail,productVos,productVo);
+ ProductLocusInfo productLocusInfo = new ProductLocusInfo(dire,new Date(),datetime,userInfo.getCompany()
+ ,null, ProductLocusInfo.DELIVERY_STATUS,detail.getBoxNo());
+ productLocusInfos.add(productLocusInfo);
+ }else if (FireworkDeal.is19Characters(dire)){
+ productVos.add(productVo);
+ }
+
+
+ }
+
+ for (ProductVo productVo : productVos){
+ StockInfo stockInfo = selectStockByDirection(productVo.getDirectionCode());
+ DirectionDetail detail = FireworkDeal.dealDirectionCode(productVo.getDirectionCode());
+ ProductInfo productInfo = productService.selectByDirection(productVo.getDirectionCode());
+ ProductLocusInfo productLocusInfo = new ProductLocusInfo(productVo.getDirectionCode(),new Date(),datetime,userInfo.getCompany()
+ ,null, ProductLocusInfo.DELIVERY_STATUS,detail.getBoxNo());
+ productLocusInfos.add(productLocusInfo);
+ if (stockInfo == null) {
+ stockInfo = new StockInfo();
+ stockInfo.setDirectioncode(productVo.getDirectionCode());
+ stockInfo.setCreateddate(new Date());
+ stockInfo.setDirectionboxcode(String.format("%03d", productVo.getBoxNumber()));
+ stockInfo.setCreatedby(userInfo.getUsername());
+ stockInfo.setNum(1);
+ stockInfo.setOperator(userInfo.getUsername());
+ stockInfo.setIndate(new Date());
+ stockInfo.setProductid(productInfo.getId());
+ stockInfo.setOwner("");
+ stockInfo.setModifiedby(userInfo.getUsername());
+ stockInfo.setModifieddate(datetime);
+ stockInfo.setOutdate(datetime);
+ stockInfo.setFlag((byte) 0);
+ stockInfo.setType((byte) 1);
+ insertStockInfo(stockInfo);
+ }else {
+ //库存修改原则,时间最近的修改才生效
+ // 判断出库是否大于修改时间,小于修改时间不做库存修改
+ if (stockInfo.getModifieddate().compareTo(datetime) > 0){
+ continue;
+ }
+ //出库后Owner设空
+ stockInfo.setOwner("");
+ stockInfo.setModifiedby(userInfo.getUsername());
+ stockInfo.setModifieddate(datetime);
+ stockInfo.setOutdate(datetime);
+ updateStockInfo(stockInfo);
+ }
+
+ }
+ productLocusService.insertBatch(productLocusInfos);
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public Msg changeStockBySale(CustomerInfo customerInfo, List<SaleOrderDetailInfoBO> detailInfoList, UserInfo userInfo, Date salesTime) {
+ Msg msg = new Msg();
+ if (customerInfo == null || userInfo == null
+ || detailInfoList == null || detailInfoList.size() ==0){
+ msg.setCode(ERROR_10002.getCode());
+ msg.setMessage(ERROR_10002.getMsg()+":销售出库失败");
+ return msg;
+ }
+ Date now = new Date();
+ List<ProductLocusInfo> productLocuses = new ArrayList<>();
+ List<SoldNoStockInfo> soldNoStockInfos = new ArrayList<>();
+ List<WarnContentInfo> warnContentInfos = new ArrayList<>();
+ for (SaleOrderDetailInfoBO detailInfo : detailInfoList){
+ DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(detailInfo.getDirectioncode());
+ if (directionDetail.getLength().equals(FireworkDeal.DIRECTION_INSIDE)){
+ ProductDO productInfo = detailInfo.getProductDO();
+ //流向码为19位时
+ StockInfo stockInfo = selectStockByDirectionAndSlice(directionDetail.getOriginalCode(),productInfo.getSlice());
+ if (stockInfo == null){
+ //库存为空则插入
+ stockInfo = new StockInfo();
+ stockInfo.setDirectioncode(directionDetail.getOriginalCode());
+ stockInfo.setOwner(userInfo.getCompanyid().toString());
+ stockInfo.setCreateddate(now);
+ stockInfo.setCreatedby(userInfo.getUsername());
+ stockInfo.setDirectionboxcode(directionDetail.getBoxNo());
+ stockInfo.setModifieddate(salesTime);
+ stockInfo.setNum(1);
+ stockInfo.setOperator(userInfo.getUsername());
+ stockInfo.setIndate(new Date());
+ stockInfo.setProductid(productInfo.getId());
+ stockInfo.setOwner(userInfo.getCompanyid().toString());
+ stockInfo.setFlag((byte)0);
+ stockInfo.setType((byte)1);
+
+ //插入一条已销未入库
+ SoldNoStockInfo soldNoStockInfo = new SoldNoStockInfo();
+ soldNoStockInfo.setDirectioncode(stockInfo.getDirectioncode());
+ soldNoStockInfo.setItemcode(productInfo.getDirectionCode());
+ soldNoStockInfo.setItemname(productInfo.getName());
+ soldNoStockInfo.setSalestime(salesTime);
+ soldNoStockInfo.setSalesperson(userInfo.getUsername());
+ soldNoStockInfo.setCompanynumber(userInfo.getCompanynumber());
+ soldNoStockInfo.setCreatedat(new Date());
+ soldNoStockInfo.setCreatedby("系统生成");
+ soldNoStockInfo.setContent(productInfo.getManufacturer());
+// soldNoStockService.save(soldNoStockInfo);
+ soldNoStockInfos.add(soldNoStockInfo);
+ }
+ if (stockInfo.getStatus() != null && stockInfo.getStatus().equals(StockInfo.STOCK_SOLD)
+ && !stockInfo.getOwner().equals(customerInfo.getId().toString())){
+ WarnContentInfo warnContentInfo = new WarnContentInfo();
+ warnContentInfo.setWarntype("多次售出");
+ warnContentInfo.setWarnlevel("预警");
+ warnContentInfo.setEnterpriseid(userInfo.getCompanyid());
+ warnContentInfo.setWarncontent(stockInfo.getDirectioncode()+"多次售出");
+ warnContentInfo.setIsmend((byte) 0);
+ warnContentInfo.setIsneed((byte) 0);
+ warnContentInfo.setIssend((byte) 0);
+ warnContentInfo.setModifiedby("系统生成");
+ warnContentInfo.setModifieddate(new Date());
+ warnContentInfo.setCreateddate(new Date());
+ warnContentInfos.add(warnContentInfo);
+// warnContentService.save(warnContentInfo);
+ }
+ if (StringUtils.isNotBlank(stockInfo.getOwner()) && Long.parseLong(stockInfo.getOwner()) != userInfo.getCompanyid()
+ || StringUtils.isBlank(stockInfo.getOwner())){
+ //已销未入库信息插入
+ SoldNoStockInfo soldNoStockInfo = new SoldNoStockInfo();
+ soldNoStockInfo.setDirectioncode(stockInfo.getDirectioncode());
+ soldNoStockInfo.setItemcode(productInfo.getDirectionCode());
+ soldNoStockInfo.setItemname(productInfo.getName());
+ soldNoStockInfo.setSalestime(salesTime);
+ soldNoStockInfo.setSalesperson(userInfo.getUsername());
+ soldNoStockInfo.setCompanynumber(userInfo.getCompanynumber());
+ soldNoStockInfo.setCreatedat(new Date());
+ soldNoStockInfo.setCreatedby("系统生成");
+ soldNoStockInfo.setContent(productInfo.getManufacturer());
+// soldNoStockService.save(soldNoStockInfo);
+ soldNoStockInfos.add(soldNoStockInfo);
+ }
+
+ stockInfo.setOwner(customerInfo.getId().toString());
+ stockInfo.setModifieddate(salesTime);
+ stockInfo.setModifiedby(userInfo.getUsername());
+ stockInfo.setStatus(StockInfo.STOCK_SOLD);
+ int flag;
+ if (stockInfo.getId() == null){
+ flag = this.insertStockInfoBySlice(stockInfo,productInfo.getSlice());
+ }else {
+ flag = this.updateStockInfoBySlice(stockInfo,productInfo.getSlice());
+ }
+ //插入流向轨迹
+// ProductLocusInfo productLocusInfo = new ProductLocusInfo(directionDetail.getOriginalCode(),new Date(),salesTime,
+// userInfo.getCompany(),customerInfo.getId(),ProductLocusInfo.SALES_STATUS,null);
+// productLocusService.insertProductLocus(productLocusInfo);
+ ProductLocusInfoBO productLocusInfoBO = new ProductLocusInfoBO();
+ productLocusInfoBO.setSlice(productInfo.getSlice());
+ productLocusInfoBO.setDirectioncode(directionDetail.getOriginalCode());
+ productLocusInfoBO.setCreateddate(now);
+ productLocusInfoBO.setModifieddate(salesTime);
+ productLocusInfoBO.setContent(userInfo.getCompany());
+ productLocusInfoBO.setCustomerid(customerInfo.getId());
+ productLocusInfoBO.setType(ProductLocusInfo.SALES_STATUS);
+ productLocusInfoBO.setBoxcode(null);
+ productLocuses.add(productLocusInfoBO);
+ // 判断是否更新库存成功
+ if (flag == 0){
+ msg.setCode(ERROR_30001.getCode());
+ msg.setMessage(ERROR_30001.getMsg()+":流向码为:"+directionDetail.getOriginalCode()+" 库存更新失败,销售失败");
+ break;
+ }else {
+ msg.setCode(SUCCESS.getCode());
+ msg.setMessage("出库成功!");
+ }
+ }
+
+ }
+
+ if (productLocuses.size() > 0) {
+ productLocusService.saveBatchLocus(productLocuses);
+ }
+ if (warnContentInfos.size() > 0) {
+ warnContentService.saveBatchInfo(warnContentInfos);
+ }
+ if (soldNoStockInfos.size() > 0) {
+ soldNoStockService.saveBatchInfo(soldNoStockInfos);
+ }
+
+ if (!SUCCESS.getCode().equals(msg.getCode())){
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+ }
+ return msg;
+ }
+
+ private boolean isStockInfoExist(String directionCode, Long id) {
+ boolean flag = false;
+ StockInfo stockInfo = selectStockByDireAndUser(id,directionCode);
+ if (stockInfo != null){
+ flag = true;
+ }
+ return flag;
+ }
+
+ private int insertStockInfo(StockInfo stockInfo){
+ int i = 0;
+ if (stockInfo == null){
+ return i;
+ }
+ String slice = productService.getSlice(stockInfo.getDirectioncode());
+ i = stockInfoMapper.insertStockInfo(stockInfo, slice);
+ return i;
+ }
+
+ private int updateStockInfo(StockInfo stockInfo){
+ int i = 0;
+ if (stockInfo == null){
+ return i;
+ }
+ String slice = productService.getSlice(stockInfo.getDirectioncode());
+ i = stockInfoMapper.updateStockInfo(stockInfo,slice);
+ return i;
+ }
+
+ @Override
+ public StockInfo selectStockByDirection(String directionCode){
+ String slice = productService.getSlice(directionCode);
+ if (StringUtils.isBlank(slice)){
+ return null;
+ }
+ return stockInfoMapper.selectStockByDirection(directionCode,slice);
+ }
+
+ @Override
+ public int doReturn(StockInfo stockInfo, UserInfo userInfo, CustomerInfo customerInfo, Date date) {
+ int flag = 0;
+ if (stockInfo.getModifieddate().compareTo(date)>0){
+ WarnContentInfo warnContentInfo = warnContentService.selectByWarnTypeAndContent("多次售出",stockInfo.getDirectioncode()+"多次售出");
+ if (warnContentInfo != null){
+ warnContentService.removeById(warnContentInfo.getId());
+ }
+ }else {
+ stockInfo.setOwner(userInfo.getCompanyid().toString());
+ stockInfo.setModifieddate(new Date());
+ stockInfo.setModifiedby(userInfo.getUsername());
+ stockInfo.setStatus("");
+ flag = updateStockInfo(stockInfo);
+ }
+
+ //插入流向轨迹
+ ProductLocusInfo productLocusInfo = new ProductLocusInfo(stockInfo.getDirectioncode(), new Date(), new Date(),
+ userInfo.getCompany(), customerInfo == null ? null : customerInfo.getId(), ProductLocusInfo.RETURN_ENTRY_STATUS, null);
+ productLocusService.insertProductLocus(productLocusInfo);
+ return flag;
+ }
+
+ @Override
+ public StockInfo selectStockByDireAndUser(Long companyId, String directionCode) {
+ String slice = productService.getSlice(directionCode);
+ if (StringUtils.isBlank(slice)){
+ return new StockInfo();
+ }
+ return stockInfoMapper.selectStockByDireAndUser(directionCode,companyId,slice);
+ }
+
+ @Override
+ public void updateStocks(List<StockInfo> stockInfos, UserInfo user) {
+ for (StockInfo stockInfo : stockInfos){
+ updateStockInfo(stockInfo);
+
+ //插入流向轨迹
+ ProductLocusInfo productLocusInfo = new ProductLocusInfo(stockInfo.getDirectioncode(),new Date(),new Date(),
+ user.getCompany(),null,ProductLocusInfo.RETURN_DELIVERY_STATUS,null);
+ productLocusService.insertProductLocus(productLocusInfo);
+ }
+ }
+
+ @Override
+ public void selectDataGrid(PageInfo pageInfo) {
+ Page<StockVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+ List<OrderItem> orderItems = new ArrayList<>();
+ OrderItem orderItem = new OrderItem();
+ if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+ orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+ orderItem.setColumn(pageInfo.getSort());
+ }else {
+ orderItem.setAsc(false);
+ orderItem.setColumn("createddate");
+ }
+ orderItems.add(orderItem);
+ page.setOrders(orderItems);
+ if (StringUtils.isBlank(pageInfo.getSort())){
+ pageInfo.setSort("createddate");
+ }
+ if (StringUtils.isBlank(pageInfo.getOrder())){
+ pageInfo.setOrder("desc");
+ }
+ List<Integer>list = new ArrayList<>();
+ for (int i = 1; i<=20; i++){
+ list.add(i);
+ }
+ List<StockVo> stockVos = stockInfoMapper.selectStockDataGrid(pageInfo.getCondition(),page,list);
+ /*for (StockVo stockVo : stockVos){
+ pageInfo.getCondition().put("companyNumber",stockVo.getEnterpriseNumber());
+ pageInfo.getCondition().put("itemCode",stockVo.getDirectioncode());
+ BigDecimal entryNum = entryService.getEntryNumByCondition(pageInfo.getCondition());
+ BigDecimal returnNum = entryService.getReturnNumByCondition(pageInfo.getCondition());
+ BigDecimal saleNum = saleOrderService.getSaleNumByCondition(pageInfo.getCondition());
+ BigDecimal deliveryNum = deliveryOrderService.getDeliveryNum(pageInfo.getCondition());
+ BigDecimal returnDeliveryNum = deliveryOrderService.getReturnDeliveryNum(pageInfo.getCondition());
+ BigDecimal zero = new BigDecimal("0");
+ stockVo.setEntryNum(entryNum == null ? zero:entryNum);
+ stockVo.setReturnNum(returnNum == null ? zero : returnNum);
+ stockVo.setSaleNum(saleNum == null ? zero: saleNum);
+ stockVo.setDeliveryNum(deliveryNum == null ? zero: deliveryNum);
+ stockVo.setReturnDeliveryNum(returnDeliveryNum == null ? zero : returnDeliveryNum);
+ }*/
+ pageInfo.setResult(stockVos);
+ pageInfo.setTotalCount(page.getTotal());
+ }
+
+ @Override
+ public void selectEnterpriseStockDataGrid(PageInfo pageInfo) {
+ Page<StockVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+ List<OrderItem> orderItems = new ArrayList<>();
+ OrderItem orderItem = new OrderItem();
+ if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+ orderItem.setAsc("ascending".equalsIgnoreCase(pageInfo.getOrder()));
+ orderItem.setColumn(pageInfo.getSort());
+ }else {
+ orderItem.setAsc(false);
+ orderItem.setColumn("owner");
+ }
+ orderItems.add(orderItem);
+ page.setOrders(orderItems);
+ if (StringUtils.isBlank(pageInfo.getSort())){
+ pageInfo.setSort("owner");
+ }
+ if (StringUtils.isBlank(pageInfo.getOrder())){
+ pageInfo.setOrder("desc");
+ }
+ List<Integer>list = new ArrayList<>();
+ for (int i = 1; i<=20; i++){
+ list.add(i);
+ }
+ List<StockVo> stockVos = stockInfoMapper.selectEnterpriseStockDataGrid(pageInfo.getCondition(),page,list);
+ pageInfo.setResult(stockVos);
+ pageInfo.setTotalCount(page.getTotal());
+ }
+
+ @Override
+ public List<NoEntryVo> selectNoEntryCount(Date time, Integer warnPeriod) {
+ List<Integer>list = new ArrayList<>();
+ for (int i = 1; i<=20; i++){
+ list.add(i);
+ }
+ return stockInfoMapper.selectNoEntryCount(time,list,warnPeriod);
+ }
+
+ @Override
+ public void selectNoEntryDetail(PageInfo pageInfo) {
+ Page<StockVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+ List<OrderItem> orderItems = new ArrayList<>();
+ OrderItem orderItem = new OrderItem();
+ if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+ orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+ orderItem.setColumn(pageInfo.getSort());
+ }else {
+ orderItem.setAsc(false);
+ orderItem.setColumn("modifieddate");
+ }
+ orderItems.add(orderItem);
+ page.setOrders(orderItems);
+ List<Integer>list = new ArrayList<>();
+ for (int i = 1; i<=20; i++){
+ list.add(i);
+ }
+ pageInfo.getCondition().put("list",list);
+ List<StockVo> stockVoList = stockInfoMapper.selectNoEntryDetail(page,pageInfo.getCondition());
+ pageInfo.setResult(stockVoList);
+ pageInfo.setTotalCount(page.getTotal());
+ }
+
+ @Override
+ public void doReturnBatch(UserInfo userInfo, List<EntryDetailInfo> entryDetailInfos, Date date) {
+ for (EntryDetailInfo entryDetailInfo : entryDetailInfos){
+ String directionCode = entryDetailInfo.getDirectioncode();
+ SaleOrderDetailInfo detailInfo = saleOrderService.selectOrderByDirectionReturnflag(directionCode,(byte) 0, null);
+ CustomerInfo customerInfo = customerService.getCustomerBySaleOrder(detailInfo.getOrdercode());
+ byte flag = 1;
+ detailInfo.setReturnflag(flag);
+ saleOrderDetailService.updateById(detailInfo);
+ StockInfo stockInfo = selectStockByDirection(directionCode);
+
+ if (stockInfo.getModifieddate().compareTo(date)>0){
+ WarnContentInfo warnContentInfo = warnContentService.selectByWarnTypeAndContent("多次售出",stockInfo.getDirectioncode()+"多次售出");
+ if (warnContentInfo != null){
+ warnContentService.removeById(warnContentInfo.getId());
+ }
+ }else {
+ stockInfo.setOwner(userInfo.getCompanyid().toString());
+ stockInfo.setModifieddate(new Date());
+ stockInfo.setModifiedby(userInfo.getUsername());
+ stockInfo.setStatus("");
+ updateStockInfo(stockInfo);
+ }
+ //插入流向轨迹
+ ProductLocusInfo productLocusInfo = new ProductLocusInfo(stockInfo.getDirectioncode(), new Date(), new Date(),
+ userInfo.getCompany(), customerInfo == null ? null : customerInfo.getId(), ProductLocusInfo.RETURN_ENTRY_STATUS, null);
+ productLocusService.insertProductLocus(productLocusInfo);
+ }
+ }
+
+ @Override
+ public List<StockInfo> selectStockByProductId(Long id) {
+ String slice = productService.getSlice(id);
+ List<StockInfo>stockInfos = new ArrayList<>();
+ if (StringUtils.isBlank(slice)){
+ return stockInfos;
+ }
+ return stockInfoMapper.selectStockByProductId(id,slice);
+ }
+
+ @Override
+ public PageInfoExtension<Map> selectEnterpriseSaleDataGrid(PageInfo pageInfo) {
+ Page<StockVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+ List<OrderItem> orderItems = new ArrayList<>();
+ OrderItem orderItem = new OrderItem();
+ if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+ orderItem.setAsc("ascending".equalsIgnoreCase(pageInfo.getOrder()));
+ orderItem.setColumn(pageInfo.getSort());
+ }else {
+ orderItem.setAsc(false);
+ orderItem.setColumn("companynumber");
+ }
+ orderItems.add(orderItem);
+ page.setOrders(orderItems);
+ if (StringUtils.isBlank(pageInfo.getSort())){
+ pageInfo.setSort("companynumber");
+ }
+ if (StringUtils.isBlank(pageInfo.getOrder())){
+ pageInfo.setOrder("desc");
+ }
+ List<Integer>list = new ArrayList<>();
+ for (int i = 1; i<=20; i++){
+ list.add(i);
+ }
+ List<StockVo> stockVos = stockInfoMapper.selectEnterpriseSaleDataGrid(pageInfo.getCondition(),page,list);
+ Map total = stockInfoMapper.selectEnterpriseSaleDataCount(pageInfo.getCondition(), list);
+ pageInfo.setResult(stockVos);
+ pageInfo.setTotalCount(page.getTotal());
+ PageInfoExtension<Map> extension = new PageInfoExtension<>(pageInfo);
+ extension.setExtension(total);
+ return extension;
+
+ }
+
+ @Override
+ public void selectStockDetailByItemCode(PageInfo pageInfo) {
+ Page<StockVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+ List<OrderItem> orderItems = new ArrayList<>();
+ OrderItem orderItem = new OrderItem();
+ if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+ orderItem.setAsc("ascending".equalsIgnoreCase(pageInfo.getOrder()));
+ orderItem.setColumn(pageInfo.getSort());
+ }else {
+ orderItem.setAsc(false);
+ orderItem.setColumn("stock.id");
+ }
+ orderItems.add(orderItem);
+ page.setOrders(orderItems);
+ if (StringUtils.isBlank(pageInfo.getSort())){
+ pageInfo.setSort("stock.id");
+ }
+ if (StringUtils.isBlank(pageInfo.getOrder())){
+ pageInfo.setOrder("desc");
+ }
+ String itemCode = pageInfo.getCondition().get("itemCode").toString();
+ ProductInfo productInfo = productService.selectByDirection(itemCode);
+ if (productInfo != null){
+ String slice = productService.getSlice(itemCode);
+ pageInfo.getCondition().put("slice",slice);
+ List<StockVo> stockVos = stockInfoMapper.selectStockVoByItemCode(pageInfo.getCondition(),page);
+ pageInfo.setResult(stockVos);
+ pageInfo.setTotalCount(page.getTotal());
+ }
+
+
+ }
+
+ @Override
+ public void selectSaleDetailDataGrid(PageInfo pageInfo) {
+ Page<StockVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+ List<OrderItem> orderItems = new ArrayList<>();
+ OrderItem orderItem = new OrderItem();
+ if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+ orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+ orderItem.setColumn(pageInfo.getSort());
+ }else {
+ orderItem.setAsc(false);
+ orderItem.setColumn("companynumber");
+ }
+ orderItems.add(orderItem);
+ page.setOrders(orderItems);
+ if (StringUtils.isBlank(pageInfo.getSort())){
+ pageInfo.setSort("companynumber");
+ }
+ if (StringUtils.isBlank(pageInfo.getOrder())){
+ pageInfo.setOrder("desc");
+ }
+ List<StockVo>stockVoList = stockInfoMapper.selectSaleDetailDataGrid(pageInfo.getCondition(),page);
+ pageInfo.setResult(stockVoList);
+ pageInfo.setTotalCount(page.getTotal());
+ }
+
+ @Override
+ public PageInfoExtension<StockTotal> selectDataGridExtensions(PageInfo pageInfo) {
+
+ List<Integer> slices = new ArrayList<Integer>(){{
+ for (int i = 1; i <= 20; i++) {
+ add(i);
+ }
+ }};
+
+ List<StockVo> stockVos = stockInfoMapper.selectStockDataGrid(pageInfo.getCondition(),null,slices);
+ pageInfo.setResult(stockVos);
+ pageInfo.setTotalCount((long) stockVos.size());
+ StockTotal stockTotal = new StockTotal(BigDecimal.ZERO);
+ if (stockVos.size() > 0) {
+ stockVos.forEach(item->{
+ BigDecimal toAdd = BigDecimal.ZERO;
+ if (item.getCountNum() != null )
+ toAdd = item.getCountNum();
+ stockTotal.setCountNum(stockTotal.getCountNum().add(toAdd));
+ });
+ }
+
+ PageInfoExtension<StockTotal> extension = new PageInfoExtension<>(pageInfo);
+ extension.setExtension(stockTotal);
+ return extension;
+ }
+
+ @Override
+ public PageInfoExtension<ProductVo> selectCurrentFireStatus(Integer pageIndex,Integer pageSize, Map filter, UserInfo user) {
+ String directioncode = (String) filter.get("directioncode");
+ if (StringUtils.isBlank(directioncode) || FireworkDeal.isNotDirectionCode(directioncode))
+ throw new BusinessException("请输入合法的流向码");
+
+ DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directioncode);
+
+ ProductVo productVo = productService.selectVoByDirection(directioncode);
+ if (productVo == null) throw new BusinessException("产品不存在");
+
+ //分表
+ String slice = productService.getSlice(directioncode);
+ List<ProductVo> productVos = new ArrayList<>();
+ List<StockInfo> records;
+ List<String> codes = null;
+ PageInfoExtension<ProductVo> extension = new PageInfoExtension<>();
+ //22位
+ if (FireworkDeal.is22Characters(directioncode)) {
+ FireworkDeal.getProductVos(directioncode,directionDetail,directionDetail,productVos,productVo);
+ if (productVos.size() < 1) throw new BusinessException("产品流向码出现问题");
+
+ codes = new ArrayList<String>() {{
+ for (ProductVo product : productVos) {
+ add(product.getDirectionCode());
+ }
+ }};
+ }
+ //19位
+ if (FireworkDeal.is19Characters(directioncode)) {
+ codes = new ArrayList<String>(){{
+ add(directioncode);
+ }};
+ }
+
+ //条件准备
+ Map<String, Object> params = new HashMap<>();
+ String status = (String) filter.get("status");
+ //1.已售出
+ if ("已售出".equals(status))
+ params.put("status", status);
+
+ if ("未入库".equals(status)) {
+ params.put("status", "");
+ params.put("owner", "");
+ }
+
+ if ("已入库".equals(status)) {
+ params.put("status", "");
+ params.put("owner", "库存owner");
+ }
+
+
+ params.put("directioncode", directioncode);
+ //查询结果集
+ records = stockInfoMapper.selectCurrentFireStatus(codes,params,slice);
+
+
+ extension.setExtension(productVo);
+ extension.setResult(records);
+ extension.setPageIndex(pageIndex);
+ extension.setPageSize(pageSize);
+ //总数
+ assert codes != null;
+ extension.setTotalCount((long) codes.size());
+ return extension;
+ }
+
+ @Override
+ public List<StockVo> selectEnterpriseStocks(Map<String, Object> condition) {
+ List<Integer>list = new ArrayList<>();
+ for (int i = 1; i<=20; i++){
+ list.add(i);
+ }
+ return stockInfoMapper.selectEnterpriseStocks(condition,list);
+ }
+
+ @Override
+ public void saveOrUpdateCurrentStock(String updatedBy) {
+ Map<String, Object> condition = new HashMap<>(16);
+ List<StockVo>stockVos = selectEnterpriseStocks(condition);
+ List<StaticStock>staticStocks = new ArrayList<>();
+ for (StockVo stockVo : stockVos){
+ Enterprise enterprise = enterpriseService.getById(stockVo.getOwner());
+ StaticStock staticStock = new StaticStock(Long.parseLong(stockVo.getOwner()),stockVo.getEnterpriseName(),stockVo.getEnterpriseNumber(),
+ enterprise.getSafetysupervision(),stockVo.getProvince(),stockVo.getCity(),stockVo.getDistrict(),
+ stockVo.getStockNum(), stockVo.getFirecracker(),stockVo.getSpray(),stockVo.getRotation(),stockVo.getBead(),
+ stockVo.getToy(),stockVo.getCombined(),updatedBy,new Date(),(byte)0 );
+ StaticStock staticStock1 = staticStockService.getByOwner(Long.parseLong(stockVo.getOwner()));
+ if (staticStock1 != null){
+ staticStock.setId(staticStock1.getId());
+ }
+ staticStocks.add(staticStock);
+ }
+ staticStockService.saveOrUpdateBatch(staticStocks);
+ }
+
+ @Override
+ public boolean clearStock(Enterprise enterprise) {
+ /*List<StockInfo>stocks = selectEnterpriseAllStock(enterprise);
+
+ stocks.forEach(item->{
+ item.setRemark();
+ item.setOwner("");
+ item.setModifieddate(date);
+ });*/
+ Date date = new Date();
+
+ String remark = "系统管理员清空,清空前归属:"+enterprise.getId()+",清空时间:"+new DateTime(date).toString("yyyy-MM-dd HH:mm:ss");
+
+ for (int i = 1; i<=20; i++){
+ int flag = stockInfoMapper.clearStock(enterprise.getId(),remark,date,"_slice"+i);
+ }
+
+ /*for (StockInfo stockInfo : stocks){
+ updateStockInfo(stockInfo);
+ }*/
+ StaticStock staticStock = staticStockService.getByOwner(enterprise.getId());
+ staticStock.setStockNum(new BigDecimal("0"));
+ staticStock.setFirecracker(new BigDecimal("0"));
+ staticStock.setSpray(new BigDecimal("0"));
+ staticStock.setRotation(new BigDecimal("0"));
+ staticStock.setBead(new BigDecimal("0"));
+ staticStock.setToy(new BigDecimal("0"));
+ staticStock.setCombined(new BigDecimal("0"));
+ staticStock.setUpdateat(date);
+ staticStockService.updateById(staticStock);
+ return true;
+ }
+
+ @Override
+ public boolean clearStockByItems(Enterprise enterprise, List<String> list) {
+ Date date = new Date();
+
+ String remark = "系统管理员清空,清空前归属:"+enterprise.getId()+",清空时间:"+new DateTime(date).toString("yyyy-MM-dd HH:mm:ss");
+
+ for (int i = 1; i<=20; i++){
+ int flag = stockInfoMapper.clearStockByItem(enterprise.getId(),list,remark,date,"_slice"+i);
+ }
+
+ /*StaticStock staticStock = staticStockService.getByOwner(enterprise.getId());
+ staticStock.setStockNum(new BigDecimal("0"));
+ staticStock.setFirecracker(new BigDecimal("0"));
+ staticStock.setSpray(new BigDecimal("0"));
+ staticStock.setRotation(new BigDecimal("0"));
+ staticStock.setBead(new BigDecimal("0"));
+ staticStock.setToy(new BigDecimal("0"));
+ staticStock.setCombined(new BigDecimal("0"));
+ staticStock.setUpdateat(date);
+ staticStockService.updateById(staticStock);*/
+ return true;
+ }
+
+ @Override
+ public StockInfo selectStockByDirectionAndSlice(String directionCodeStr, String slice) {
+ if (slice == null || StringUtils.isBlank(directionCodeStr)) {
+ throw new BusinessException("系统入参为空");
+ }
+ return stockInfoMapper.selectStockByDirection(directionCodeStr,slice);
+ }
+
+ @Override
+ public int insertStockInfoBySlice(StockInfo stockInfo, String slice) {
+ if (stockInfo == null || StringUtils.isBlank(slice)) {
+ throw new BusinessException("系统入参为空");
+ }
+ return stockInfoMapper.insertStockInfo(stockInfo, slice);
+ }
+
+ @Override
+ public int updateStockInfoBySlice(StockInfo stockInfo, String slice) {
+ if (stockInfo == null || StringUtils.isBlank(slice)) {
+ throw new BusinessException("系统入参为空");
+ }
+ return stockInfoMapper.updateStockInfo(stockInfo, slice);
+ }
+
+
+ private List<StockInfo> selectEnterpriseAllStock(Enterprise enterprise) {
+ List<Integer>list = new ArrayList<>();
+ for (int i = 1; i<=20; i++){
+ list.add(i);
+ }
+ return stockInfoMapper.selectEnterpriseAllStock(enterprise.getId(),list);
+ }
+
+ @Override
+ public List<StockInfo> selectEarlyWarn(Integer min, Integer max, String enterprisetype,List<Integer> slices) {
+ return stockInfoMapper.selectEarlyWarn(min, max, enterprisetype,slices);
+ }
+
+ @Override
+ public List<StockInfo> selectAlarm(Integer max, String enterprisetype, List<Integer> slices) {
+ return stockInfoMapper.selectAlarm(max, enterprisetype, slices);
+ }
+
+}
--
Gitblit v1.9.2