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 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 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 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 deliveryDetailInfos, UserInfo userInfo) { ListproductVos = new ArrayList<>(); ListproductLocusInfos = 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 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 productLocuses = new ArrayList<>(); List soldNoStockInfos = new ArrayList<>(); List 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 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 page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize()); List 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"); } Listlist = new ArrayList<>(); for (int i = 1; i<=20; i++){ list.add(i); } List 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 page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize()); List 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"); } Listlist = new ArrayList<>(); for (int i = 1; i<=20; i++){ list.add(i); } List stockVos = stockInfoMapper.selectEnterpriseStockDataGrid(pageInfo.getCondition(),page,list); pageInfo.setResult(stockVos); pageInfo.setTotalCount(page.getTotal()); } @Override public List selectNoEntryCount(Date time, Integer warnPeriod) { Listlist = 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 page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize()); List 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); Listlist = new ArrayList<>(); for (int i = 1; i<=20; i++){ list.add(i); } pageInfo.getCondition().put("list",list); List stockVoList = stockInfoMapper.selectNoEntryDetail(page,pageInfo.getCondition()); pageInfo.setResult(stockVoList); pageInfo.setTotalCount(page.getTotal()); } @Override public void doReturnBatch(UserInfo userInfo, List 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 selectStockByProductId(Long id) { String slice = productService.getSlice(id); ListstockInfos = new ArrayList<>(); if (StringUtils.isBlank(slice)){ return stockInfos; } return stockInfoMapper.selectStockByProductId(id,slice); } @Override public PageInfoExtension selectEnterpriseSaleDataGrid(PageInfo pageInfo) { Page page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize()); List 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"); } Listlist = new ArrayList<>(); for (int i = 1; i<=20; i++){ list.add(i); } List stockVos = stockInfoMapper.selectEnterpriseSaleDataGrid(pageInfo.getCondition(),page,list); Map total = stockInfoMapper.selectEnterpriseSaleDataCount(pageInfo.getCondition(), list); pageInfo.setResult(stockVos); pageInfo.setTotalCount(page.getTotal()); PageInfoExtension extension = new PageInfoExtension<>(pageInfo); extension.setExtension(total); return extension; } @Override public void selectStockDetailByItemCode(PageInfo pageInfo) { Page page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize()); List 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 stockVos = stockInfoMapper.selectStockVoByItemCode(pageInfo.getCondition(),page); pageInfo.setResult(stockVos); pageInfo.setTotalCount(page.getTotal()); } } @Override public void selectSaleDetailDataGrid(PageInfo pageInfo) { Page page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize()); List 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"); } ListstockVoList = stockInfoMapper.selectSaleDetailDataGrid(pageInfo.getCondition(),page); pageInfo.setResult(stockVoList); pageInfo.setTotalCount(page.getTotal()); } @Override public PageInfoExtension selectDataGridExtensions(PageInfo pageInfo) { List slices = new ArrayList(){{ for (int i = 1; i <= 20; i++) { add(i); } }}; List 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 extension = new PageInfoExtension<>(pageInfo); extension.setExtension(stockTotal); return extension; } @Override public PageInfoExtension 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 productVos = new ArrayList<>(); List records; List codes = null; PageInfoExtension 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() {{ for (ProductVo product : productVos) { add(product.getDirectionCode()); } }}; } //19位 if (FireworkDeal.is19Characters(directioncode)) { codes = new ArrayList(){{ add(directioncode); }}; } //条件准备 Map 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 selectEnterpriseStocks(Map condition) { Listlist = new ArrayList<>(); for (int i = 1; i<=20; i++){ list.add(i); } return stockInfoMapper.selectEnterpriseStocks(condition,list); } @Override public void saveOrUpdateCurrentStock(String updatedBy) { Map condition = new HashMap<>(16); ListstockVos = selectEnterpriseStocks(condition); ListstaticStocks = 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) { /*Liststocks = 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 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 selectEnterpriseAllStock(Enterprise enterprise) { Listlist = new ArrayList<>(); for (int i = 1; i<=20; i++){ list.add(i); } return stockInfoMapper.selectEnterpriseAllStock(enterprise.getId(),list); } @Override public List selectEarlyWarn(Integer min, Integer max, String enterprisetype,List slices) { return stockInfoMapper.selectEarlyWarn(min, max, enterprisetype,slices); } @Override public List selectAlarm(Integer max, String enterprisetype, List slices) { return stockInfoMapper.selectAlarm(max, enterprisetype, slices); } }