|
@@ -1,12 +1,18 @@
|
|
|
package com.ruoyi.ams.bionutrition.doc.service.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.bean.copier.CopyOptions;
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.core.lang.Assert;
|
|
|
+import cn.hutool.core.map.MapUtil;
|
|
|
import cn.hutool.core.util.ArrayUtil;
|
|
|
import cn.hutool.core.util.NumberUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.github.pagehelper.Page;
|
|
|
import com.github.pagehelper.PageInfo;
|
|
@@ -15,45 +21,81 @@ import com.ruoyi.ams.bionutrition.doc.domain.BionutritionDocHeader;
|
|
|
import com.ruoyi.ams.bionutrition.doc.dto.BionutritionDocBaseDTO;
|
|
|
import com.ruoyi.ams.bionutrition.doc.dto.BionutritionDocDetailsDTO;
|
|
|
import com.ruoyi.ams.bionutrition.doc.dto.BionutritionDocHeaderDTO;
|
|
|
+import com.ruoyi.ams.bionutrition.doc.dto.DocExcelQueryDTO;
|
|
|
import com.ruoyi.ams.bionutrition.doc.dto.detail.BionutritionDocDetailsBaseDTO;
|
|
|
import com.ruoyi.ams.bionutrition.doc.dto.header.BionutritionDocHeaderBaseDTO;
|
|
|
+import com.ruoyi.ams.bionutrition.doc.dto.header.FinishedProductReceiptHeaderDTO;
|
|
|
+import com.ruoyi.ams.bionutrition.doc.excel.BionutritionDocBaseExcel;
|
|
|
+import com.ruoyi.ams.bionutrition.doc.excel.detail.BionutritionDocDetailsBaseExcel;
|
|
|
+import com.ruoyi.ams.bionutrition.doc.excel.header.BionutritionDocHeaderBaseExcel;
|
|
|
import com.ruoyi.ams.bionutrition.doc.mapper.BionutritionDocHeaderMapper;
|
|
|
import com.ruoyi.ams.bionutrition.doc.service.BionutritionDocDetailsService;
|
|
|
import com.ruoyi.ams.bionutrition.doc.service.BionutritionDocHeaderService;
|
|
|
import com.ruoyi.ams.bionutrition.doc.util.BionutritionDocUtil;
|
|
|
+import com.ruoyi.ams.inv.domain.InvLotLocId;
|
|
|
+import com.ruoyi.ams.inv.service.IInvLotLocIdService;
|
|
|
+import com.ruoyi.ams.task.domain.WcsTask;
|
|
|
+import com.ruoyi.ams.task.dto.WcsTaskInvLotDTO;
|
|
|
+import com.ruoyi.ams.task.service.IWcsTaskService;
|
|
|
+import com.ruoyi.base.constant.Constant;
|
|
|
+import com.ruoyi.base.constant.type.BizEnum;
|
|
|
+import com.ruoyi.common.constant.base.EnumUtils;
|
|
|
import com.ruoyi.common.utils.ConvertUtils;
|
|
|
import com.ruoyi.common.utils.PageUtil;
|
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
|
+import com.ruoyi.framework.service.impl.BaseServiceImpl;
|
|
|
import com.ruoyi.framework.service.impl.CrudServiceImpl;
|
|
|
+import com.ruoyi.system.service.ISysConfigService;
|
|
|
+import com.ruoyi.system.service.impl.SysConfigServiceImpl;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.poi.ss.usermodel.*;
|
|
|
+import org.apache.poi.ss.util.CellRangeAddress;
|
|
|
+import org.apache.poi.xssf.streaming.SXSSFCell;
|
|
|
+import org.apache.poi.xssf.streaming.SXSSFRow;
|
|
|
+import org.apache.poi.xssf.streaming.SXSSFSheet;
|
|
|
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.OutputStream;
|
|
|
+import java.lang.reflect.Field;
|
|
|
+import java.lang.reflect.InvocationTargetException;
|
|
|
+import java.lang.reflect.Method;
|
|
|
import java.math.BigDecimal;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Arrays;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
+@Slf4j
|
|
|
public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<BionutritionDocHeaderMapper, BionutritionDocHeader, BionutritionDocHeaderDTO> implements BionutritionDocHeaderService {
|
|
|
|
|
|
@Autowired
|
|
|
private BionutritionDocDetailsService bionutritionDocDetailsService;
|
|
|
+ @Autowired
|
|
|
+ private ISysConfigService sysConfigService;
|
|
|
+ @Autowired
|
|
|
+ private IInvLotLocIdService invLotLocIdService;
|
|
|
+ @Autowired
|
|
|
+ private IWcsTaskService wcsTaskService;
|
|
|
|
|
|
|
|
|
* 查询单据头分页数据
|
|
|
+ *
|
|
|
* @param docHeaderDTO
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
public PageInfo<BionutritionDocHeaderDTO> getDocHeaderPageInfo(BionutritionDocHeaderDTO docHeaderDTO) {
|
|
|
- Page<BionutritionDocHeader> docEntitiesPage = (Page<BionutritionDocHeader>)baseDao.selectDocs(BeanUtil.beanToMap(docHeaderDTO));
|
|
|
- return PageUtil.convert(docEntitiesPage, BionutritionDocHeaderDTO.class) ;
|
|
|
+ Page<BionutritionDocHeader> docEntitiesPage = (Page<BionutritionDocHeader>) baseDao.selectDocs(BeanUtil.beanToMap(docHeaderDTO));
|
|
|
+ return PageUtil.convert(docEntitiesPage, BionutritionDocHeaderDTO.class);
|
|
|
}
|
|
|
|
|
|
|
|
|
* 根据单号查询单据头
|
|
|
+ *
|
|
|
* @param docNo
|
|
|
* @return
|
|
|
*/
|
|
@@ -64,85 +106,391 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
|
|
|
|
|
|
|
|
|
* 插入单据头
|
|
|
+ *
|
|
|
* @param docHeaderDTO
|
|
|
* @return
|
|
|
*/
|
|
|
+ @Transactional(rollbackFor = RuntimeException.class)
|
|
|
@Override
|
|
|
- public int insertDocHeader(BionutritionDocHeaderDTO docHeaderDTO) {
|
|
|
+ public String insertDocHeader(BionutritionDocHeaderDTO docHeaderDTO) {
|
|
|
Assert.notNull(docHeaderDTO, "不允许插入空数据");
|
|
|
- return baseDao.insert(ConvertUtils.sourceToTarget(docHeaderDTO, BionutritionDocHeader.class));
|
|
|
+ BionutritionDocHeader docHeader = ConvertUtils.sourceToTarget(docHeaderDTO, BionutritionDocHeader.class);
|
|
|
+ int result = baseDao.insert(docHeader);
|
|
|
+ return result > 0 ? docHeader.getId() : String.valueOf(result);
|
|
|
}
|
|
|
|
|
|
|
|
|
* 修改单据头
|
|
|
+ *
|
|
|
* @param docHeaderDTO
|
|
|
* @return
|
|
|
*/
|
|
|
+ @Transactional(rollbackFor = RuntimeException.class)
|
|
|
@Override
|
|
|
public int updateDoc(BionutritionDocHeaderDTO docHeaderDTO) {
|
|
|
UpdateWrapper<BionutritionDocHeader> updateWrapper = new UpdateWrapper<>();
|
|
|
- updateWrapper.lambda().eq(StringUtils.isNotBlank(docHeaderDTO.getId()),BionutritionDocHeader::getId, docHeaderDTO.getId())
|
|
|
- .eq(StringUtils.isNotBlank(docHeaderDTO.getDocNo()), BionutritionDocHeader::getDocNo, docHeaderDTO.getDocNo());
|
|
|
+ updateWrapper.lambda().eq(StringUtils.isNotBlank(docHeaderDTO.getId()), BionutritionDocHeader::getId, docHeaderDTO.getId());
|
|
|
return baseDao.update(ConvertUtils.sourceToTarget(docHeaderDTO, BionutritionDocHeader.class), updateWrapper);
|
|
|
}
|
|
|
|
|
|
|
|
|
* 根据id删除单据头
|
|
|
+ *
|
|
|
* @param ids
|
|
|
* @return
|
|
|
*/
|
|
|
+ @Transactional(rollbackFor = RuntimeException.class)
|
|
|
@Override
|
|
|
public int deleteDocByIds(String[] ids) {
|
|
|
- bionutritionDocDetailsService.deleteBatchIds(Arrays.asList(ids));
|
|
|
+ bionutritionDocDetailsService.deleteByHeaderIds(ids);
|
|
|
return baseDao.deleteBatchIds(Arrays.asList(ids));
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<BionutritionDocBaseDTO> getDocList(BionutritionDocHeaderDTO docHeaderDTO) {
|
|
|
- List<BionutritionDocHeaderDTO> docHeaderDTOList = getBionutritionDocHeaderDTOList(docHeaderDTO.getDocType());
|
|
|
+ public List<BionutritionDocBaseDTO> getDocList(DocExcelQueryDTO docExcelQueryDTO) {
|
|
|
+ List<BionutritionDocHeaderDTO> docHeaderDTOList = getBionutritionDocHeaderDTOList(docExcelQueryDTO.getDocType());
|
|
|
return buildBionutritionDocSameTypeList(docHeaderDTOList);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
|
|
|
* 根据id获取单据数据
|
|
|
+ *
|
|
|
* @param ids
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
- public List<BionutritionDocBaseDTO> getDicListByIds(String[] ids) {
|
|
|
+ public List<BionutritionDocBaseDTO> getDicListByIds(List<String> ids) {
|
|
|
List<BionutritionDocHeaderDTO> docHeaderDTOList = ArrayUtil.isNotEmpty(ids) ?
|
|
|
- getBionutritionDocHeaderDTOList(Arrays.asList(ids)) :
|
|
|
- ConvertUtils.sourceToTarget(baseDao.selectList(Wrappers.emptyWrapper()),BionutritionDocHeaderDTO.class);
|
|
|
+ getBionutritionDocHeaderDTOList(ids) :
|
|
|
+ ConvertUtils.sourceToTarget(baseDao.selectList(Wrappers.emptyWrapper()), BionutritionDocHeaderDTO.class);
|
|
|
return buildBionutritionDocDifferentTypeList(docHeaderDTOList);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ * 根据物料编码和批号获取单据信息
|
|
|
+ * @param skuCode
|
|
|
+ * @param batchNumber
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public BionutritionDocBaseDTO selectDocBySkuAndBatchNumber(String skuCode, String batchNumber, String docType) {
|
|
|
+ List<BionutritionDocDetailsDTO> docDetailsDTOList = bionutritionDocDetailsService.selectDocDetailsDTOList(skuCode, batchNumber);
|
|
|
+ Assert.isTrue(CollUtil.isNotEmpty(docDetailsDTOList), "原厂批号对应单据明细不存在");
|
|
|
+ String headerId = docDetailsDTOList.stream().map(item -> item.getDocHeaderId())
|
|
|
+ .distinct().findFirst().orElse(null);
|
|
|
+ Assert.isTrue(StringUtils.isNotBlank(headerId), "明细对应单据头id不存在");
|
|
|
+ BionutritionDocHeaderDTO bionutritionDocHeaderDTO = getBionutritionDocHeaderDTOListById(headerId);
|
|
|
+ Assert.isTrue(ObjectUtil.isNotEmpty(bionutritionDocHeaderDTO), "明细对应单据头不存在或单据类型不对应");
|
|
|
+ return buildBionutritionDocBaseDTO(bionutritionDocHeaderDTO);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BionutritionDocBaseDTO selectDocByDocNoAndDocType(String docNo, String docType) {
|
|
|
+ return buildDocBaseDTOByDocNoAndDocType(docNo, docType);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<BionutritionDocHeaderDTO> selectDocBaseByDocNoAndDocType(String docNo, String docType) {
|
|
|
+ return getBionutritionDocHeaderDTOList(null, Lists.newArrayList(docNo), docType);
|
|
|
+ }
|
|
|
+
|
|
|
+ private BionutritionDocBaseDTO buildDocBaseDTOByDocNoAndDocType(String docNo, String docType) {
|
|
|
+ BionutritionDocHeaderDTO bionutritionDocHeaderDTO = getBionutritionDocHeaderDTOListByDocNoAndDocType(docNo, docType);
|
|
|
+ return buildBionutritionDocBaseDTO(bionutritionDocHeaderDTO);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 单据导出excel
|
|
|
+ *
|
|
|
+ * @param response todo 单据单头中文
|
|
|
+ * @param docExcelQueryDTO
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public <E> void exportExcel(HttpServletResponse response, DocExcelQueryDTO docExcelQueryDTO) throws ClassNotFoundException {
|
|
|
+ List<BionutritionDocBaseDTO> list = getDocList(docExcelQueryDTO);
|
|
|
+ List<BionutritionDocBaseExcel> docBaseExcels = list.stream()
|
|
|
+ .map(item -> BionutritionDocUtil.buildBionutritionDocBaseExcel(item.getBionutritionDocHeaderBaseDTO().getDocType(), item))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+
|
|
|
+ SXSSFWorkbook workbook = new SXSSFWorkbook();
|
|
|
+ SXSSFSheet sheet = workbook.createSheet();
|
|
|
+
|
|
|
+
|
|
|
+ CellStyle cellStyle = workbook.createCellStyle();
|
|
|
+
|
|
|
+ cellStyle.setAlignment(HorizontalAlignment.CENTER);
|
|
|
+ cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
|
+
|
|
|
+ Integer startRow = 0;
|
|
|
+
|
|
|
+ Integer collLength = 0;
|
|
|
+
|
|
|
+ Assert.isTrue(StringUtils.isNotBlank(docExcelQueryDTO.getDocType()), "请选择单据类型");
|
|
|
+
|
|
|
+ BizEnum.BionutritionHeaderExcelDocTypeEnum bionutritionHeaderExcelDocTypeEnum = EnumUtils.getEnumByCode(docExcelQueryDTO.getDocType(), BizEnum.BionutritionHeaderExcelDocTypeEnum.class);
|
|
|
+ Class<E> docHeaderClass = (Class<E>) Class.forName(bionutritionHeaderExcelDocTypeEnum.getClassName());
|
|
|
+ BizEnum.BionutritionDetailsExcelDocTypeEnum bionutritionDetailsExcelDocTypeEnum = EnumUtils.getEnumByCode(docExcelQueryDTO.getDocType(), BizEnum.BionutritionDetailsExcelDocTypeEnum.class);
|
|
|
+ Class<E> docDetailsClass = (Class<E>) Class.forName(bionutritionDetailsExcelDocTypeEnum.getClassName());
|
|
|
+
|
|
|
+ Field[] headerSonFields = docHeaderClass.getDeclaredFields();
|
|
|
+ Field[] headerFatherFields = docHeaderClass.getSuperclass().getDeclaredFields();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ collLength = headerSonFields.length + headerFatherFields.length;
|
|
|
+
|
|
|
+ Field[] totalHeaderFields = new Field[collLength];
|
|
|
+ System.arraycopy(headerSonFields, 0, totalHeaderFields, 0, headerSonFields.length);
|
|
|
+ System.arraycopy(headerFatherFields, 0, totalHeaderFields, headerSonFields.length, headerFatherFields.length);
|
|
|
+
|
|
|
+ totalHeaderFields = setFieldsAccessible(totalHeaderFields);
|
|
|
+ log.info("=====单头字段长度:{}", collLength);
|
|
|
+
|
|
|
+ Field[] detailSonField = docDetailsClass.getDeclaredFields();
|
|
|
+ Field[] detailFatherFields = docDetailsClass.getSuperclass().getDeclaredFields();
|
|
|
+
|
|
|
+
|
|
|
+ Field[] totalDetailFields = new Field[detailSonField.length + detailFatherFields.length];
|
|
|
+ System.arraycopy(detailSonField, 0, totalDetailFields, 0, detailSonField.length);
|
|
|
+ System.arraycopy(detailFatherFields, 0, totalDetailFields, detailSonField.length, detailFatherFields.length);
|
|
|
+
|
|
|
+ totalDetailFields = setFieldsAccessible(totalDetailFields);
|
|
|
+
|
|
|
+ collLength = collLength + detailSonField.length + detailFatherFields.length;
|
|
|
+
|
|
|
+
|
|
|
+ Field[] totalFields = new Field[collLength];
|
|
|
+ System.arraycopy(totalHeaderFields, 0, totalFields, 0, totalHeaderFields.length);
|
|
|
+ System.arraycopy(totalDetailFields, 0, totalFields, totalHeaderFields.length, totalDetailFields.length);
|
|
|
+ log.info("==所有字段:{}", totalFields);
|
|
|
+
|
|
|
+
|
|
|
+ SXSSFRow row0 = sheet.createRow(0);
|
|
|
+ SXSSFCell cell0 = row0.createCell(0);
|
|
|
+ BizEnum.BionutritionExcelDocTitleEnum excelDocTitleEnum = EnumUtils.getEnumByCode(docExcelQueryDTO.getDocType(), BizEnum.BionutritionExcelDocTitleEnum.class);
|
|
|
+ cell0.setCellValue(excelDocTitleEnum.getTitleName());
|
|
|
+ cell0.setCellStyle(cellStyle);
|
|
|
+
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, collLength - 1));
|
|
|
+
|
|
|
+ SXSSFRow row1 = sheet.createRow(1);
|
|
|
+ SXSSFCell cell1 = row1.createCell(0);
|
|
|
+ cell1.setCellValue("单头");
|
|
|
+ cell1.setCellStyle(cellStyle);
|
|
|
+ SXSSFCell cell2 = row1.createCell(totalHeaderFields.length);
|
|
|
+ cell2.setCellValue("明细");
|
|
|
+ cell2.setCellStyle(cellStyle);
|
|
|
+
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, totalHeaderFields.length - 1));
|
|
|
+
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(1, 1, totalHeaderFields.length, collLength - 1));
|
|
|
+
|
|
|
+
|
|
|
+ SXSSFRow row2 = sheet.createRow(2);
|
|
|
+
|
|
|
+ String docFieldRemark = sysConfigService.selectConfigByKey(Constant.SYS_DOC_FIELD_REMARK);
|
|
|
+ log.info("单据字段对应配置信息:{}",docFieldRemark);
|
|
|
+ Assert.isTrue(StringUtils.isNotBlank(docFieldRemark),"单据中文字段配置信息获取失败");
|
|
|
+ Map<String, String> docFieldRemarkMap = JSONObject.parseObject(docFieldRemark, Map.class);
|
|
|
+
|
|
|
+ for (int i = 0; i < collLength; i++) {
|
|
|
+ SXSSFCell cell = row2.createCell(i);
|
|
|
+ cell.setCellStyle(cellStyle);
|
|
|
+
|
|
|
+ cell.setCellValue(docFieldRemarkMap.get(totalFields[i].getName()));
|
|
|
+ }
|
|
|
+
|
|
|
+ startRow = 3;
|
|
|
+ try {
|
|
|
+
|
|
|
+ for (BionutritionDocBaseExcel baseExcel : docBaseExcels) {
|
|
|
+
|
|
|
+ BionutritionDocHeaderBaseExcel headerExcel = baseExcel.getBionutritionDocHeaderBaseExcelDTO();
|
|
|
+ List<BionutritionDocDetailsBaseExcel> detailsExcelList = baseExcel.getBionutritionDocDetailsBaseExcelList();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ Map<String, Object> headerPropertyMap = getPropertyMap(docHeaderClass, (Object) totalHeaderFields, headerExcel);
|
|
|
+ log.info("单头字段值:{}", headerPropertyMap);
|
|
|
+
|
|
|
+ if (CollUtil.isEmpty(detailsExcelList)) {
|
|
|
+
|
|
|
+ SXSSFRow row = sheet.createRow(startRow);
|
|
|
+ Integer cellNum = 0;
|
|
|
+
|
|
|
+ setExcelField(totalHeaderFields, headerPropertyMap, row, cellNum, cellStyle);
|
|
|
+ startRow++;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (detailsExcelList.size() != 1){
|
|
|
+ mergeSameColumn(sheet, startRow, totalHeaderFields, detailsExcelList);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (BionutritionDocDetailsBaseExcel detailsExcel : detailsExcelList) {
|
|
|
+ Map<String, Object> detailPropertyMap = getDetailPropertyMap(docDetailsClass, (Object) totalDetailFields, detailsExcel);
|
|
|
+
|
|
|
+ SXSSFRow row = sheet.createRow(startRow);
|
|
|
+ Integer cellNum = 0;
|
|
|
+
|
|
|
+ cellNum = setExcelField(totalHeaderFields, headerPropertyMap, row, cellNum, cellStyle);
|
|
|
+
|
|
|
+ setExcelField(totalDetailFields, detailPropertyMap, row, cellNum, cellStyle);
|
|
|
+ startRow++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (NoSuchMethodException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ } catch (IllegalAccessException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ } catch (InvocationTargetException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ OutputStream out = null;
|
|
|
+ try {
|
|
|
+ out = response.getOutputStream();
|
|
|
+ response.setContentType("application/x-msdownload");
|
|
|
+ response.setHeader("Content-Disposition", "attachment;filename=test1");
|
|
|
+ workbook.write(out);
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void DocToMap(BionutritionDocHeaderBaseExcel headerExcel, String docType) throws ClassNotFoundException {
|
|
|
+
|
|
|
+
|
|
|
+ String docFieldRemark = sysConfigService.selectConfigByKey(Constant.SYS_DOC_FIELD_REMARK);
|
|
|
+ log.info("单据字段对应配置信息:{}",docFieldRemark);
|
|
|
+ Assert.isTrue(StringUtils.isNotBlank(docFieldRemark),"单据中文字段配置信息获取失败");
|
|
|
+ Map<String, String> docFieldRemarkMap = JSONObject.parseObject(docFieldRemark, Map.class);
|
|
|
+ Map<String, Object> remarkValueMap = docFieldRemarkMap.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, item -> map.get(item.getKey())));
|
|
|
+ remarkValueMap.forEach(item -> cell.setcell());
|
|
|
+
|
|
|
+
|
|
|
+ map.entrySet().forEach(e-> System.out.println(e.getKey()+":"+e.getValue()));*/
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 单元格合并同列不合并同行
|
|
|
+ * @param sheet
|
|
|
+ * @param startRow
|
|
|
+ * @param totalHeaderFields
|
|
|
+ * @param detailsExcelList
|
|
|
+ */
|
|
|
+ private void mergeSameColumn(SXSSFSheet sheet, Integer startRow, Field[] totalHeaderFields, List<BionutritionDocDetailsBaseExcel> detailsExcelList) {
|
|
|
+ for (int i = 0; i < totalHeaderFields.length; i++) {
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(
|
|
|
+ startRow, startRow + detailsExcelList.size() - 1, i, i));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 获取当前导出单据明细字段值
|
|
|
+ * @param docDetailsClass
|
|
|
+ * @param totalDetailFields
|
|
|
+ * @param detailsExcel
|
|
|
+ * @param <E>
|
|
|
+ * @return
|
|
|
+ * @throws NoSuchMethodException
|
|
|
+ * @throws IllegalAccessException
|
|
|
+ * @throws InvocationTargetException
|
|
|
+ */
|
|
|
+ private <E> Map<String, Object> getDetailPropertyMap(Class<E> docDetailsClass, Object totalDetailFields, BionutritionDocDetailsBaseExcel detailsExcel) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
|
|
|
+
|
|
|
+ Method getProperties = docDetailsClass.getDeclaredMethod("getProperties", Field[].class);
|
|
|
+
|
|
|
+ Map<String, Object> detailPropertyMap = (Map<String, Object>) getProperties.invoke(detailsExcel, totalDetailFields);
|
|
|
+ return detailPropertyMap;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 设置excel单元格值
|
|
|
+ * @param totalFields
|
|
|
+ * @param propertyMap
|
|
|
+ * @param row
|
|
|
+ * @param cellNum
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private Integer setExcelField(Field[] totalFields, Map<String, Object> propertyMap, SXSSFRow row, Integer cellNum, CellStyle cellStyle) {
|
|
|
+ for (Field field : totalFields) {
|
|
|
+ SXSSFCell cell = row.createCell(cellNum);
|
|
|
+ cell.setCellStyle(cellStyle);
|
|
|
+ cell.setCellValue(String.valueOf(propertyMap.get(field.getName())) );
|
|
|
+ cellNum++;
|
|
|
+ }
|
|
|
+ return cellNum;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 获取当前导出单据头的字段的值
|
|
|
+ *
|
|
|
+ * @param docHeaderClass
|
|
|
+ * @param totalHeaderFields
|
|
|
+ * @param headerExcel
|
|
|
+ * @param <E>
|
|
|
+ * @return
|
|
|
+ * @throws NoSuchMethodException
|
|
|
+ * @throws IllegalAccessException
|
|
|
+ * @throws InvocationTargetException
|
|
|
+ */
|
|
|
+ private <E> Map<String, Object> getPropertyMap(Class<E> docHeaderClass, Object totalHeaderFields, BionutritionDocHeaderBaseExcel headerExcel) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
|
|
|
+ Method getProperties = docHeaderClass.getDeclaredMethod("getProperties", Field[].class);
|
|
|
+
|
|
|
+ Map<String, Object> propertyMap = (Map<String, Object>) getProperties.invoke(headerExcel, totalHeaderFields);
|
|
|
+ return propertyMap;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 设置字段权限为可访问
|
|
|
+ * @param totalFields
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Field[] setFieldsAccessible(Field[] totalFields) {
|
|
|
+ for (Field field : totalFields) {
|
|
|
+ field.setAccessible(true);
|
|
|
+ }
|
|
|
+ return totalFields;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
* 构建类型单据内容(单个)
|
|
|
+ *
|
|
|
* @param docNo
|
|
|
* @return
|
|
|
*/
|
|
|
- public BionutritionDocBaseDTO buildBionutritionDocBaseDTOByDocNo(String docNo){
|
|
|
+ public BionutritionDocBaseDTO buildBionutritionDocBaseDTOByDocNo(String docNo) {
|
|
|
BionutritionDocHeaderDTO bionutritionDocHeaderDTO = getBionutritionDocHeaderDTOListByDocNo(docNo);
|
|
|
return buildBionutritionDocBaseDTO(bionutritionDocHeaderDTO);
|
|
|
}
|
|
|
|
|
|
|
|
|
* 构建类型单据内容(单个)
|
|
|
+ *
|
|
|
* @param id
|
|
|
* @return
|
|
|
*/
|
|
|
- public BionutritionDocBaseDTO buildBionutritionDocBaseDTOById(String id){
|
|
|
+ public BionutritionDocBaseDTO buildBionutritionDocBaseDTOById(String id) {
|
|
|
BionutritionDocHeaderDTO bionutritionDocHeaderDTO = getBionutritionDocHeaderDTOListById(id);
|
|
|
return buildBionutritionDocBaseDTO(bionutritionDocHeaderDTO);
|
|
|
}
|
|
|
|
|
|
|
|
|
* 构建类型单据内容(多个)
|
|
|
+ *
|
|
|
* @param docNoList
|
|
|
* @return
|
|
|
*/
|
|
|
- public List<BionutritionDocBaseDTO> buildBionutritionDocBaseDTOByDocNoList(List<String> docNoList){
|
|
|
+ public List<BionutritionDocBaseDTO> buildBionutritionDocBaseDTOByDocNoList(List<String> docNoList) {
|
|
|
List<BionutritionDocHeaderDTO> bionutritionDocHeaderDTOList = getBionutritionDocHeaderDTOListByDocNo(docNoList);
|
|
|
List<String> docTypeList = bionutritionDocHeaderDTOList.stream().map(item -> item.getDocType()).distinct().collect(Collectors.toList());
|
|
|
return NumberUtil.isGreater(BigDecimal.valueOf(docTypeList.size()), BigDecimal.ONE) ?
|
|
@@ -151,22 +499,37 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
|
|
|
|
|
|
|
|
|
* 构建类型单据内容(多个)
|
|
|
+ *
|
|
|
* @param idList
|
|
|
* @return
|
|
|
*/
|
|
|
- public List<BionutritionDocBaseDTO> buildBionutritionDocBaseDTOByIdList(List<String> idList){
|
|
|
+ public List<BionutritionDocBaseDTO> buildBionutritionDocBaseDTOByIdList(List<String> idList) {
|
|
|
List<BionutritionDocHeaderDTO> bionutritionDocHeaderDTOList = getBionutritionDocHeaderDTOList(idList);
|
|
|
List<String> docTypeList = bionutritionDocHeaderDTOList.stream().map(item -> item.getDocType()).distinct().collect(Collectors.toList());
|
|
|
return NumberUtil.isGreater(BigDecimal.valueOf(docTypeList.size()), BigDecimal.ONE) ?
|
|
|
buildBionutritionDocDifferentTypeList(bionutritionDocHeaderDTOList) : buildBionutritionDocSameTypeList(bionutritionDocHeaderDTOList);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ * 构建类型单据内容(多个)
|
|
|
+ * @param docNo
|
|
|
+ * @param docType
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<BionutritionDocBaseDTO> buildBionutritionDocBaseDTOByIdList(String docNo, String docType) {
|
|
|
+ List<BionutritionDocHeaderDTO> bionutritionDocHeaderDTOList = getLikeBionutritionDocHeaderDTOList(docNo, docType);
|
|
|
+ List<String> docTypeList = bionutritionDocHeaderDTOList.stream().map(item -> item.getDocType()).distinct().collect(Collectors.toList());
|
|
|
+ return NumberUtil.isGreater(BigDecimal.valueOf(docTypeList.size()), BigDecimal.ONE) ?
|
|
|
+ buildBionutritionDocDifferentTypeList(bionutritionDocHeaderDTOList) : buildBionutritionDocSameTypeList(bionutritionDocHeaderDTOList);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
* 构建类型单据内容(单个)
|
|
|
+ *
|
|
|
* @param bionutritionDocHeaderDTO
|
|
|
* @return
|
|
|
*/
|
|
|
- private BionutritionDocBaseDTO buildBionutritionDocBaseDTO(BionutritionDocHeaderDTO bionutritionDocHeaderDTO){
|
|
|
+ private BionutritionDocBaseDTO buildBionutritionDocBaseDTO(BionutritionDocHeaderDTO bionutritionDocHeaderDTO) {
|
|
|
BionutritionDocHeaderBaseDTO bionutritionDocHeaderBaseDTO = BionutritionDocUtil.buildBionutritionDocHeaderDTO(bionutritionDocHeaderDTO);
|
|
|
List<BionutritionDocDetailsDTO> bionutritionDocDetailsDTOList = bionutritionDocDetailsService.getBionutritionDocDetailsDTOList(
|
|
|
bionutritionDocHeaderBaseDTO.getId());
|
|
@@ -180,10 +543,11 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
|
|
|
|
|
|
|
|
|
* 构建类型单据内容(多个 相同类型单据)
|
|
|
+ *
|
|
|
* @param bionutritionDocHeaderDTOList
|
|
|
* @return
|
|
|
*/
|
|
|
- private List<BionutritionDocBaseDTO> buildBionutritionDocSameTypeList(List<BionutritionDocHeaderDTO> bionutritionDocHeaderDTOList){
|
|
|
+ private List<BionutritionDocBaseDTO> buildBionutritionDocSameTypeList(List<BionutritionDocHeaderDTO> bionutritionDocHeaderDTOList) {
|
|
|
List<BionutritionDocHeaderBaseDTO> bionutritionDocHeaderBaseDTOList = BionutritionDocUtil.buildBionutritionDocHeaderDTOList(bionutritionDocHeaderDTOList);
|
|
|
List<BionutritionDocDetailsDTO> bionutritionDocDetailsDTOList = bionutritionDocDetailsService.getBionutritionDocDetailsDTOList(
|
|
|
bionutritionDocHeaderDTOList.stream().map(BionutritionDocHeaderDTO::getId).distinct().collect(Collectors.toList()));
|
|
@@ -194,10 +558,11 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
|
|
|
|
|
|
|
|
|
* 构建类型单据内容(多个 不同类型单据)
|
|
|
+ *
|
|
|
* @param bionutritionDocHeaderDTOList
|
|
|
* @return
|
|
|
*/
|
|
|
- private List<BionutritionDocBaseDTO> buildBionutritionDocDifferentTypeList(List<BionutritionDocHeaderDTO> bionutritionDocHeaderDTOList){
|
|
|
+ private List<BionutritionDocBaseDTO> buildBionutritionDocDifferentTypeList(List<BionutritionDocHeaderDTO> bionutritionDocHeaderDTOList) {
|
|
|
Map<String, List<BionutritionDocHeaderBaseDTO>> bionutritionDocHeaderMap = BionutritionDocUtil.buildBionutritionDocHeaderDTOByDocTypeMap(bionutritionDocHeaderDTOList);
|
|
|
List<BionutritionDocDetailsDTO> bionutritionDocDetailsDTOList = bionutritionDocDetailsService.getBionutritionDocDetailsDTOList(
|
|
|
bionutritionDocHeaderDTOList.stream().map(BionutritionDocHeaderDTO::getId).distinct().collect(Collectors.toList()));
|
|
@@ -220,6 +585,17 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
|
|
|
}).collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ * 未查到返回对象
|
|
|
+ * @param docNo
|
|
|
+ * @param docType
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public BionutritionDocHeaderDTO getBionutritionDocHeaderDTOListByDocNoAndDocType(String docNo, String docType) {
|
|
|
+ return getBionutritionDocHeaderDTOList(null, Lists.newArrayList(docNo), docType)
|
|
|
+ .stream().findFirst().orElseGet(() -> new BionutritionDocHeaderDTO());
|
|
|
+ }
|
|
|
+
|
|
|
public BionutritionDocHeaderDTO getBionutritionDocHeaderDTOListByDocNo(String docNo) {
|
|
|
return getBionutritionDocHeaderDTOList(null, Lists.newArrayList(docNo), null)
|
|
|
.stream().findFirst().orElseGet(() -> new BionutritionDocHeaderDTO());
|
|
@@ -230,6 +606,182 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
|
|
|
.stream().findFirst().orElseGet(() -> new BionutritionDocHeaderDTO());
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ * 未查到返回null
|
|
|
+ * @param docNo
|
|
|
+ * @param docType
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public BionutritionDocHeaderDTO getDocHeaderDTOListByDocNoAndDocType(String docNo, String docType) {
|
|
|
+ return getBionutritionDocHeaderDTOList(null, Lists.newArrayList(docNo), docType)
|
|
|
+ .stream().findFirst().orElse(null);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 任务回调修改单据状态
|
|
|
+ * @param wcsTask
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void updateDocStatus(WcsTask wcsTask) {
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(wcsTask.getExt5())) return;
|
|
|
+
|
|
|
+ String ext5 = wcsTask.getExt5();
|
|
|
+ String docNo = null;
|
|
|
+ String docLineNo = null;
|
|
|
+ String businessType = null;
|
|
|
+ String docType = null;
|
|
|
+
|
|
|
+ if (StringUtils.isNotEmpty(ext5)){
|
|
|
+ String[] docParams = ext5.split(",");
|
|
|
+ docNo = docParams[0];
|
|
|
+ docLineNo = docParams[1];
|
|
|
+ businessType = docParams[2];
|
|
|
+ docType = docParams[3];
|
|
|
+ }
|
|
|
+
|
|
|
+ BionutritionDocBaseDTO bionutritionDocBaseDTO = this.selectDocByDocNoAndDocType(docNo, docType);
|
|
|
+ BionutritionDocHeaderBaseDTO bionutritionDocHeaderBaseDTO = bionutritionDocBaseDTO.getBionutritionDocHeaderBaseDTO();
|
|
|
+ BionutritionDocDetailsDTO docDetails = bionutritionDocDetailsService.selectDocDetailsByLineNo(bionutritionDocHeaderBaseDTO.getId(), docLineNo);
|
|
|
+
|
|
|
+ if (StringUtils.equals(businessType, Constant.BUSINESS_TYPE.ASN.getValue())) {
|
|
|
+ this.updateASNDocStatus(wcsTask, docNo, docType, bionutritionDocHeaderBaseDTO, docDetails);
|
|
|
+ }else {
|
|
|
+ this.updateSODocStatus(wcsTask, docNo, docType, bionutritionDocHeaderBaseDTO, docDetails);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 修改出库单状态
|
|
|
+ * @param bionutritionDocHeaderBaseDTO
|
|
|
+ * @param docDetails
|
|
|
+ */
|
|
|
+ private void updateSODocStatus(WcsTask wcsTask, String docNo, String docType, BionutritionDocHeaderBaseDTO bionutritionDocHeaderBaseDTO, BionutritionDocDetailsDTO docDetails) {
|
|
|
+
|
|
|
+
|
|
|
+ BigDecimal sub = NumberUtil.sub(docDetails.getSkuQty(), docDetails.getTransferredQty());
|
|
|
+
|
|
|
+ docDetails.setLineStatus(sub.compareTo(BigDecimal.ZERO) > 0 ? Constant.ORDER_STS.STS10.getValue() : Constant.ORDER_STS.STS20.getValue());
|
|
|
+ bionutritionDocDetailsService.updateDocDetails(docDetails);
|
|
|
+
|
|
|
+ this.updateDocHeaderStatus(bionutritionDocHeaderBaseDTO);
|
|
|
+ log.info("===更改出库单据状态,单号{},明细行号{},单头状态更改为{},明细状态更改为{}",
|
|
|
+ bionutritionDocHeaderBaseDTO.getDocNo(), docDetails.getDocLineNo()
|
|
|
+ , bionutritionDocHeaderBaseDTO.getDocStatus(), docDetails.getLineStatus());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 修改入库单状态
|
|
|
+ * @param docNo
|
|
|
+ * @param docType
|
|
|
+ * @param bionutritionDocHeaderBaseDTO
|
|
|
+ * @param docDetails
|
|
|
+ */
|
|
|
+ private void updateASNDocStatus(WcsTask wcsTask, String docNo, String docType, BionutritionDocHeaderBaseDTO bionutritionDocHeaderBaseDTO, BionutritionDocDetailsDTO docDetails) {
|
|
|
+
|
|
|
+
|
|
|
+ BigDecimal sub = NumberUtil.sub(docDetails.getSkuQty(), docDetails.getTransferredQty());
|
|
|
+
|
|
|
+ docDetails.setLineStatus(sub.compareTo(BigDecimal.ZERO) > 0 ? Constant.ASN_STS.STS30.getValue() : Constant.ASN_STS.STS40.getValue());
|
|
|
+
|
|
|
+ if (StringUtils.equals(docType, BizEnum.BionutritionHeaderDocTypeEnum.PURCHASE_ORDER.getDocType())
|
|
|
+ && StringUtils.equals(docDetails.getLineStatus(), Constant.ASN_STS.STS40.getValue())){
|
|
|
+
|
|
|
+ this.updatePurchaseReceiptDocStatus(docNo, docDetails);
|
|
|
+ }
|
|
|
+ bionutritionDocDetailsService.updateDocDetails(docDetails);
|
|
|
+
|
|
|
+ this.updateDocHeaderStatus(bionutritionDocHeaderBaseDTO);
|
|
|
+ log.info("===更改入库单据状态,单号{},明细行号{},单头状态更改为{},明细状态更改为{}",
|
|
|
+ bionutritionDocHeaderBaseDTO.getDocNo(), docDetails.getDocLineNo()
|
|
|
+ , bionutritionDocHeaderBaseDTO.getDocStatus(), docDetails.getLineStatus());
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ BigDecimal sub = NumberUtil.sub("35", "26");
|
|
|
+
|
|
|
+ boolean b = sub.compareTo(BigDecimal.ZERO) > 0;
|
|
|
+ System.out.println(b);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 比较单据的一条明细已生成任务的搬运总数量和明细需要搬运总数量大小
|
|
|
+ * @param wcsTask
|
|
|
+ * @param docDetails
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private int getQtyCompare(WcsTask wcsTask, BionutritionDocDetailsDTO docDetails) {
|
|
|
+
|
|
|
+ List<WcsTaskInvLotDTO> wcsTaskInvLots = wcsTaskService.selectWcsTaskListByExt5(wcsTask.getExt5());
|
|
|
+ long sum = wcsTaskInvLots.stream().filter(item -> StringUtils.isNotBlank(item.getQty()))
|
|
|
+ .mapToLong(item -> Long.parseLong(NumberUtil.roundStr(item.getQty(), 0))).sum();
|
|
|
+ int compare = NumberUtil.compare(Long.valueOf(docDetails.getSkuQty()), sum);
|
|
|
+ return compare;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 修改单头状态
|
|
|
+ * @param bionutritionDocHeaderBaseDTO
|
|
|
+ */
|
|
|
+ private void updateDocHeaderStatus(BionutritionDocHeaderBaseDTO bionutritionDocHeaderBaseDTO) {
|
|
|
+ List<BionutritionDocDetailsDTO> docDetailsDTOList = bionutritionDocDetailsService.getBionutritionDocDetailsDTOList(bionutritionDocHeaderBaseDTO.getId());
|
|
|
+
|
|
|
+ if (StringUtils.equals(bionutritionDocHeaderBaseDTO.getBusinessType(), Constant.BUSINESS_TYPE.ORDER.getValue())){
|
|
|
+ List<BionutritionDocDetailsDTO> collect = docDetailsDTOList.stream()
|
|
|
+ .filter(item -> !StringUtils.equals(item.getLineStatus(), Constant.ORDER_STS.STS20.getValue())).collect(Collectors.toList());
|
|
|
+
|
|
|
+ bionutritionDocHeaderBaseDTO.setDocStatus(CollUtil.isNotEmpty(collect) ?
|
|
|
+ Constant.ORDER_STS.STS10.getValue() : Constant.ORDER_STS.STS20.getValue());
|
|
|
+ } else {
|
|
|
+ List<BionutritionDocDetailsDTO> collect = docDetailsDTOList.stream()
|
|
|
+ .filter(item -> !StringUtils.equals(item.getLineStatus(), Constant.ASN_STS.STS40.getValue())).collect(Collectors.toList());
|
|
|
+
|
|
|
+ bionutritionDocHeaderBaseDTO.setDocStatus(CollUtil.isNotEmpty(collect) ?
|
|
|
+ Constant.ASN_STS.STS30.getValue() : Constant.ASN_STS.STS40.getValue());
|
|
|
+ }
|
|
|
+ this.updateDoc(ConvertUtils.sourceToTarget(bionutritionDocHeaderBaseDTO, BionutritionDocHeaderDTO.class));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 判断单据的一条明细是否完全搬运
|
|
|
+ * @param docDetails
|
|
|
+ * @param docDetailsDTOList
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean ifLessEqualQty(BionutritionDocDetailsDTO docDetails, List<BionutritionDocDetailsBaseDTO> docDetailsDTOList) {
|
|
|
+ long qty = docDetailsDTOList.stream().filter(item -> StringUtils.isNotBlank(item.getSkuQty()))
|
|
|
+ .mapToLong(item -> Long.parseLong(item.getSkuQty())).sum();
|
|
|
+
|
|
|
+ long qtySupposed = Long.parseLong(docDetails.getSkuQty());
|
|
|
+ log.info("当前已搬运数量{},剩余未搬运数量{}", qty, qtySupposed - qty);
|
|
|
+ boolean ifLessEqualQty = qtySupposed - qty > 0;
|
|
|
+ return ifLessEqualQty;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 修改采购入库单状态
|
|
|
+ * @param docNo
|
|
|
+ */
|
|
|
+ private void updatePurchaseReceiptDocStatus(String docNo, BionutritionDocDetailsDTO docDetails) {
|
|
|
+ BionutritionDocBaseDTO purchaseReceiptDoc = this.selectDocByDocNoAndDocType(docNo, BizEnum.BionutritionHeaderDocTypeEnum.PURCHASE_RECEIPT.getDocType());
|
|
|
+ List<BionutritionDocDetailsBaseDTO> docDetailsDTOList = purchaseReceiptDoc.getBionutritionDocDetailsBaseDTOList();
|
|
|
+
|
|
|
+
|
|
|
+ item.setLineStatus(Constant.ASN_STS.STS40.getValue());
|
|
|
+ bionutritionDocDetailsService.updateDocDetails(ConvertUtils.sourceToTarget(item, BionutritionDocDetailsDTO.class));
|
|
|
+ });*/
|
|
|
+
|
|
|
+ docDetailsDTOList.stream().filter(item->StringUtils.equals(item.getBelongDetailsId(), docDetails.getId())).collect(Collectors.toList())
|
|
|
+ .forEach(item->{
|
|
|
+ item.setLineStatus(Constant.ASN_STS.STS40.getValue());
|
|
|
+ bionutritionDocDetailsService.updateDocDetails(ConvertUtils.sourceToTarget(item, BionutritionDocDetailsDTO.class));
|
|
|
+ });
|
|
|
+
|
|
|
+ this.updateDocHeaderStatus(purchaseReceiptDoc.getBionutritionDocHeaderBaseDTO());
|
|
|
+ }
|
|
|
+
|
|
|
public List<BionutritionDocHeaderDTO> getBionutritionDocHeaderDTOListByDocNo(List<String> docNoList) {
|
|
|
return getBionutritionDocHeaderDTOList(null, docNoList, null);
|
|
|
}
|
|
@@ -242,6 +794,13 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
|
|
|
return getBionutritionDocHeaderDTOList(null, null, docType);
|
|
|
}
|
|
|
|
|
|
+ private List<BionutritionDocHeaderDTO> getLikeBionutritionDocHeaderDTOList(String docNo, String docType) {
|
|
|
+ List<BionutritionDocHeader> bionutritionDocHeaderList = baseDao.selectList(Wrappers.<BionutritionDocHeader>lambdaQuery()
|
|
|
+ .like(StringUtils.isNotEmpty(docNo), BionutritionDocHeader::getDocNo, docNo)
|
|
|
+ .eq(StringUtils.isNotBlank(docType), BionutritionDocHeader::getDocType, docType));
|
|
|
+ return ConvertUtils.sourceToTarget(bionutritionDocHeaderList, BionutritionDocHeaderDTO.class);
|
|
|
+ }
|
|
|
+
|
|
|
private List<BionutritionDocHeaderDTO> getBionutritionDocHeaderDTOList(List<String> idList, List<String> docNoList, String docType) {
|
|
|
List<BionutritionDocHeader> bionutritionDocHeaderList = baseDao.selectList(Wrappers.<BionutritionDocHeader>lambdaQuery()
|
|
|
.in(CollectionUtil.isNotEmpty(idList), BionutritionDocHeader::getId, idList)
|