|
@@ -1,22 +1,51 @@
|
|
|
package com.fjhx.victoriatourist.service.quality.impl;
|
|
|
|
|
|
-import com.fjhx.purchase.entity.arrival.vo.ArrivalDetailVo;
|
|
|
-import com.fjhx.supply.entity.supplier.po.SupplierInfo;
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.fjhx.item.service.product.ProductInfoService;
|
|
|
+import com.fjhx.kd100.entity.company.po.CompanyInfo;
|
|
|
+import com.fjhx.kd100.service.company.CompanyInfoService;
|
|
|
import com.fjhx.supply.service.supplier.SupplierInfoService;
|
|
|
+import com.fjhx.victoriatourist.entity.quality.dto.QualityInfoDto;
|
|
|
+import com.fjhx.victoriatourist.entity.quality.dto.QualityInfoSelectDto;
|
|
|
+import com.fjhx.victoriatourist.entity.quality.po.QualityDetails;
|
|
|
import com.fjhx.victoriatourist.entity.quality.po.QualityInfo;
|
|
|
+import com.fjhx.victoriatourist.entity.quality.vo.QualityDetailsVo;
|
|
|
+import com.fjhx.victoriatourist.entity.quality.vo.QualityInfoVo;
|
|
|
import com.fjhx.victoriatourist.mapper.quality.QualityInfoMapper;
|
|
|
+import com.fjhx.victoriatourist.service.deliver.DeliverGoodsService;
|
|
|
+import com.fjhx.victoriatourist.service.quality.QualityDetailsService;
|
|
|
import com.fjhx.victoriatourist.service.quality.QualityInfoService;
|
|
|
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.fjhx.wms.entity.arrival.po.ArrivalStockRecords;
|
|
|
+import com.fjhx.wms.entity.arrival.po.ArrivalStockRecordsDetails;
|
|
|
+import com.fjhx.wms.entity.stock.emums.JournalType;
|
|
|
+import com.fjhx.wms.entity.stock.po.Stock;
|
|
|
+import com.fjhx.wms.entity.stock.po.StockJournal;
|
|
|
+import com.fjhx.wms.entity.stock.po.StockJournalDetails;
|
|
|
+import com.fjhx.wms.entity.stock.po.StockWait;
|
|
|
+import com.fjhx.wms.service.arrival.ArrivalStockRecordsDetailsService;
|
|
|
+import com.fjhx.wms.service.arrival.ArrivalStockRecordsService;
|
|
|
+import com.fjhx.wms.service.stock.StockJournalDetailsService;
|
|
|
+import com.fjhx.wms.service.stock.StockJournalService;
|
|
|
+import com.fjhx.wms.service.stock.StockService;
|
|
|
+import com.fjhx.wms.service.stock.StockWaitService;
|
|
|
+import com.obs.services.internal.ServiceException;
|
|
|
+import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
+import com.ruoyi.system.utils.UserUtil;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
-import com.fjhx.victoriatourist.entity.quality.vo.QualityInfoVo;
|
|
|
-import com.fjhx.victoriatourist.entity.quality.dto.QualityInfoSelectDto;
|
|
|
-import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
-import com.fjhx.victoriatourist.entity.quality.dto.QualityInfoDto;
|
|
|
-import cn.hutool.core.bean.BeanUtil;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -24,24 +53,69 @@ import java.util.List;
|
|
|
* 质检 服务实现类
|
|
|
* </p>
|
|
|
*
|
|
|
- * @author
|
|
|
+ * @author
|
|
|
* @since 2023-04-26
|
|
|
*/
|
|
|
@Service
|
|
|
public class QualityInfoServiceImpl extends ServiceImpl<QualityInfoMapper, QualityInfo> implements QualityInfoService {
|
|
|
@Autowired
|
|
|
- SupplierInfoService supplierInfoService;
|
|
|
+ private SupplierInfoService supplierInfoService;
|
|
|
+ @Autowired
|
|
|
+ private DeliverGoodsService deliverGoodsService;
|
|
|
+ @Autowired
|
|
|
+ private CompanyInfoService companyInfoService;
|
|
|
+ @Autowired
|
|
|
+ private QualityDetailsService qualityDetailsService;
|
|
|
+ @Autowired
|
|
|
+ private ProductInfoService productInfoService;
|
|
|
+ @Autowired
|
|
|
+ private StockService stockService;
|
|
|
+ @Autowired
|
|
|
+ private StockJournalService stockJournalService;
|
|
|
+ @Autowired
|
|
|
+ private StockJournalDetailsService stockJournalDetailsService;
|
|
|
+ @Autowired
|
|
|
+ private StockWaitService stockWaitService;
|
|
|
+ @Autowired
|
|
|
+ private ArrivalStockRecordsDetailsService arrivalStockRecordsDetailsService;
|
|
|
+ @Autowired
|
|
|
+ private ArrivalStockRecordsService arrivalStockRecordsService;
|
|
|
|
|
|
@Override
|
|
|
public Page<QualityInfoVo> getPage(QualityInfoSelectDto dto) {
|
|
|
IWrapper<QualityInfo> wrapper = getWrapper();
|
|
|
wrapper.orderByDesc("qi", QualityInfo::getId);
|
|
|
Page<QualityInfoVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
|
|
|
+ return page;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 维多利亚获取已入库待质检分页
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Page<QualityInfoVo> getPage1(QualityInfoSelectDto dto) {
|
|
|
+ IWrapper<QualityInfo> wrapper = getWrapper();
|
|
|
+ wrapper.orderByDesc("qi", QualityInfo::getId);
|
|
|
+ Page<QualityInfoVo> page = this.baseMapper.getPage1(dto.getPage(), wrapper);
|
|
|
List<QualityInfoVo> records = page.getRecords();
|
|
|
+ if (ObjectUtil.isEmpty(records)) {
|
|
|
+ return page;
|
|
|
+ }
|
|
|
//赋值供应商名称
|
|
|
supplierInfoService.attributeAssign(records, QualityInfoVo::getSupplyId, (item, supplier) -> {
|
|
|
item.setSupplyName(supplier.getName());
|
|
|
});
|
|
|
+ //赋值物流公司名称
|
|
|
+ List<String> logisticsCompanyCodes = records.stream().map(QualityInfoVo::getLogisticsCompanyCode).distinct()
|
|
|
+ .filter(ObjectUtil::isNotNull).collect(Collectors.toList());
|
|
|
+ if (ObjectUtil.isEmpty(logisticsCompanyCodes)) {
|
|
|
+ return page;
|
|
|
+ }
|
|
|
+ Map<String, String> stringStringMap = companyInfoService.mapKV(CompanyInfo::getCode, CompanyInfo::getName,
|
|
|
+ q -> q.in(CompanyInfo::getCode, logisticsCompanyCodes));
|
|
|
+ records.forEach(item -> item.setLogisticsCompanyName(stringStringMap.get(item.getLogisticsCompanyCode())));
|
|
|
+ //赋值采购员名称
|
|
|
+ UserUtil.assignmentNickName(records, QualityInfoVo::getPurchaseUserId, QualityInfoVo::setPurchaseUserName);
|
|
|
return page;
|
|
|
}
|
|
|
|
|
@@ -52,9 +126,80 @@ public class QualityInfoServiceImpl extends ServiceImpl<QualityInfoMapper, Quali
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ @DSTransactional
|
|
|
@Override
|
|
|
public void add(QualityInfoDto qualityInfoDto) {
|
|
|
+ qualityInfoDto.setStatus(2);//质检完成
|
|
|
+ ArrivalStockRecords arrivalStockRecords = arrivalStockRecordsService.getById(qualityInfoDto.getArrivalStockRecordsId());
|
|
|
+ arrivalStockRecords.setQualityStatus(2);//质检完成
|
|
|
+
|
|
|
+ qualityInfoDto.setWarehouseId(arrivalStockRecords.getWarehouseId());
|
|
|
+ //查询入库明细
|
|
|
+ List<ArrivalStockRecordsDetails> arrivalStockRecordsDetailsList = arrivalStockRecordsDetailsService.list(q -> q.eq(ArrivalStockRecordsDetails::getArrivalStockRecordsId, qualityInfoDto.getArrivalStockRecordsId()));
|
|
|
+ Map<Long, ArrivalStockRecordsDetails> arrivalStockRecordsDetailsMap = arrivalStockRecordsDetailsList.stream().collect(Collectors.toMap(ArrivalStockRecordsDetails::getId,Function.identity()));
|
|
|
+ //创建质检记录
|
|
|
+ qualityInfoDto.setBussinessId(qualityInfoDto.getArrivalStockRecordsId());
|
|
|
+ //创建质检明细
|
|
|
+ List<QualityDetails> qualityDetailsList = qualityInfoDto.getQualityDetailsList();
|
|
|
+ for (QualityDetails qualityDetails : qualityDetailsList) {
|
|
|
+ qualityDetails.setQualityInfoId(qualityInfoDto.getId());
|
|
|
+ ArrivalStockRecordsDetails arrivalStockRecordsDetails = arrivalStockRecordsDetailsMap.get(qualityDetails.getArrivalStockRecordsDetailsId());
|
|
|
+ BigDecimal quantity = arrivalStockRecordsDetails.getQuantity();
|
|
|
+ qualityDetails.setTotalQuantity(quantity);
|
|
|
+
|
|
|
+ BigDecimal count = qualityDetails.getQualifiedQuantity().add(qualityDetails.getDisqualificationQuantity());
|
|
|
+ //统计已经质检的数量
|
|
|
+ arrivalStockRecordsDetails.setQualityQuantity(arrivalStockRecordsDetails.getQuantity().add(count));
|
|
|
+ if(quantity.compareTo(count)!=0){
|
|
|
+ qualityInfoDto.setStatus(1);//修改为部分质检
|
|
|
+ arrivalStockRecords.setQualityStatus(1);//修改为部分质检
|
|
|
+ }
|
|
|
+ }
|
|
|
this.save(qualityInfoDto);
|
|
|
+ arrivalStockRecordsService.updateById(arrivalStockRecords);
|
|
|
+ arrivalStockRecordsDetailsService.updateBatchById(arrivalStockRecordsDetailsList);
|
|
|
+
|
|
|
+ qualityDetailsService.saveBatch(qualityDetailsList);
|
|
|
+ //操作库存
|
|
|
+ //创建出入库记录
|
|
|
+ StockJournal stockJournal = new StockJournal();
|
|
|
+ stockJournal.setType(JournalType.ARRIVAL_QUALITY.getDetailType());
|
|
|
+ stockJournal.setOpType(1);//入库;
|
|
|
+ stockJournal.setBusinessId(qualityInfoDto.getId());
|
|
|
+ stockJournal.setWarehouseId(arrivalStockRecords.getWarehouseId());
|
|
|
+ stockJournalService.save(stockJournal);
|
|
|
+ List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
|
|
|
+
|
|
|
+ List<Stock> stockList = new ArrayList<>();
|
|
|
+ for (QualityDetails qualityDetails : qualityDetailsList) {
|
|
|
+ Stock stock = stockService.getOne(q -> q.eq(Stock::getProductId, qualityDetails.getProductInfoId()).eq(Stock::getWarehouseId, qualityInfoDto.getWarehouseId()));
|
|
|
+ if (ObjectUtil.isEmpty(stock)) {
|
|
|
+ stock = new Stock();
|
|
|
+ stock.setProductId(qualityDetails.getProductInfoId());
|
|
|
+ stock.setWarehouseId(arrivalStockRecords.getWarehouseId());
|
|
|
+ stock.setQuantity(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ String victoriatouristJson = stock.getVictoriatouristJson();
|
|
|
+ JSONObject json = ObjectUtil.isEmpty(victoriatouristJson) ? new JSONObject() : JSONObject.parseObject(victoriatouristJson);
|
|
|
+
|
|
|
+ BigDecimal defectiveQuantity = json.getBigDecimal("defectiveQuantity");//次品库存
|
|
|
+ defectiveQuantity = ObjectUtil.isEmpty(defectiveQuantity) ? BigDecimal.ZERO : defectiveQuantity;
|
|
|
+
|
|
|
+ stock.setQuantity(stock.getQuantity().add(qualityDetails.getQualifiedQuantity()));
|
|
|
+ defectiveQuantity.add(qualityDetails.getDisqualificationQuantity());
|
|
|
+
|
|
|
+ json.put("defectiveQuantity", defectiveQuantity);
|
|
|
+ stock.setVictoriatouristJson(json.toJSONString());
|
|
|
+ stockList.add(stock);
|
|
|
+
|
|
|
+ StockJournalDetails stockJournalDetails = new StockJournalDetails();
|
|
|
+ stockJournalDetails.setStockJournalId(stockJournal.getId());
|
|
|
+ stockJournalDetails.setProductId(qualityDetails.getProductInfoId());
|
|
|
+ stockJournalDetails.setQuantity(qualityDetails.getQualifiedQuantity().add(qualityDetails.getDisqualificationQuantity()));
|
|
|
+ stockJournalDetailsList.add(stockJournalDetails);
|
|
|
+ }
|
|
|
+ stockService.saveOrUpdateBatch(stockList);
|
|
|
+ stockJournalDetailsService.saveBatch(stockJournalDetailsList);
|
|
|
}
|
|
|
|
|
|
@Override
|