From 2fcd97552d16718cc7997629fd637a73a5a4483f Mon Sep 17 00:00:00 2001
From: 郑永安 <zyazyz250@sina.com>
Date: 星期一, 19 六月 2023 14:44:19 +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