Browse Source

基础数据生产物料关系管理

master
廉洪喜 2 years ago
parent
commit
872407c939
  1. 16
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionlineitem/ProductionlineitemController.java
  2. 52
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionlineitem/vo/ProductionlineItemImportErrorVO.java
  3. 4
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productionlineitem/ProductionlineitemConvert.java
  4. 6
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productionlineitem/ProductionlineitemMapper.java
  5. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionlineitem/ProductionlineitemService.java
  6. 54
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionlineitem/ProductionlineitemServiceImpl.java

16
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionlineitem/ProductionlineitemController.java

@ -8,11 +8,8 @@ import com.win.framework.excel.core.util.ExcelUtils;
import com.win.framework.operatelog.core.annotations.OperateLog;
import com.win.module.system.api.user.AdminUserApi;
import com.win.module.system.api.user.dto.AdminUserRespDTO;
import com.win.module.wms.controller.itembasic.vo.ItembasicExcelVO;
import com.win.module.wms.controller.productionlineitem.vo.*;
import com.win.module.wms.convert.itembasic.ItembasicConvert;
import com.win.module.wms.convert.productionlineitem.ProductionlineitemConvert;
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO;
import com.win.module.wms.dal.dataobject.productionlineitem.ProductionlineitemDO;
import com.win.module.wms.enums.DictTypeConstants;
import com.win.module.wms.service.productionlineitem.ProductionlineitemService;
@ -127,7 +124,7 @@ public class ProductionlineitemController {
List<ProductionlineItemImportExcelVO> list = Arrays.asList();
Map<Integer, String[]> mapDropDown = new HashMap<>();
String[] available = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRUE_FALSE);
mapDropDown.put(3, available);;
mapDropDown.put(4, available);
// 输出
ExcelUtils.write(response, "生产线物料关系导入模板.xls", "生产线物料关系列表", ProductionlineItemImportExcelVO.class, list,mapDropDown);
}
@ -140,18 +137,19 @@ public class ProductionlineitemController {
@Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true")
})
@PreAuthorize("@ss.hasPermission('wms:productionlineitem:import')")
public void importExcel(HttpServletResponse response,
@RequestParam("file") MultipartFile file,
@RequestParam(value = "mode") Integer mode,
@RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception {
public CommonResult<Map<String, Object>> importExcel(HttpServletResponse response,
@RequestParam("file") MultipartFile file,
@RequestParam(value = "mode") Integer mode,
@RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception {
List<ProductionlineItemImportExcelVO> list = ExcelUtils.read(file, ProductionlineItemImportExcelVO.class);
List<ProductionlineItemImportExcelVO> errorList = productionlineitemService.importProductionlineItemList(list, mode, updatePart);
List<ProductionlineItemImportErrorVO> errorList = productionlineitemService.importProductionlineItemList(list, mode, updatePart);
Map<String, Object> returnMap = new HashMap<>();
returnMap.put("errorCount", errorList.size());
if(!errorList.isEmpty()) {
String url = ExcelUtils.writeLocalFile("库位导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xls", "错误列表", errorList);
returnMap.put("errorFile", url);
}
return success(returnMap);
}
@PostMapping("/senior")

52
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionlineitem/vo/ProductionlineItemImportErrorVO.java

@ -0,0 +1,52 @@
package com.win.module.wms.controller.productionlineitem.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.win.framework.excel.core.annotations.DictFormat;
import com.win.framework.excel.core.convert.DictConvert;
import com.win.module.wms.enums.DictTypeConstants;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@Builder
@ToString(callSuper = true)
public class ProductionlineItemImportErrorVO {
@ExcelProperty("完工收货库位")
private String fgLocationCode;
@ExcelProperty("原料库位")
private String rawLocationCode;
@ExcelProperty("产线代码")
private String productionLineCode;
@ExcelProperty("物品代码")
private String itemCode;
@ExcelProperty(value = "是否可用", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String available;
@ExcelProperty(value = "生效时间")
@ColumnWidth(value = 16)
private LocalDateTime activeTime;
@ExcelProperty(value = "失效时间")
@ColumnWidth(value = 16)
private LocalDateTime expireTime;
@ExcelProperty("备注")
private String remark;
@ExcelProperty(value = "导入状态", index = 0)
private String importStatus;
@ExcelProperty(value = "导入说明", index = 1)
private String importRemark;
}

4
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productionlineitem/ProductionlineitemConvert.java

@ -31,4 +31,8 @@ public interface ProductionlineitemConvert {
List<ProductionlineitemExcelVO> convertList02(List<ProductionlineitemDO> list);
ProductionlineitemDO convert(ProductionlineItemImportExcelVO productionlineItem);
ProductionlineItemImportErrorVO convert2(ProductionlineitemDO bean);
}

6
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productionlineitem/ProductionlineitemMapper.java

@ -7,6 +7,7 @@ import com.win.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.win.framework.mybatis.core.util.QueryWrapperUtils;
import com.win.module.wms.controller.productionlineitem.vo.ProductionlineitemExportReqVO;
import com.win.module.wms.controller.productionlineitem.vo.ProductionlineitemPageReqVO;
import com.win.module.wms.dal.dataobject.bom.BomDO;
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO;
import com.win.module.wms.dal.dataobject.productionlineitem.ProductionlineitemDO;
import org.apache.ibatis.annotations.Mapper;
@ -21,6 +22,11 @@ import java.util.List;
@Mapper
public interface ProductionlineitemMapper extends BaseMapperX<ProductionlineitemDO> {
default ProductionlineitemDO selectByProductItemCode(String itemCode){
return selectOne(ProductionlineitemDO::getItemCode, itemCode);
}
default PageResult<ProductionlineitemDO> selectPage(ProductionlineitemPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ProductionlineitemDO>()
.eqIfPresent(ProductionlineitemDO::getFgLocationCode, reqVO.getFgLocationCode())

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionlineitem/ProductionlineitemService.java

@ -70,7 +70,7 @@ public interface ProductionlineitemService {
*/
List<ProductionlineitemDO> getProductionlineitemList(ProductionlineitemExportReqVO exportReqVO);
List<ProductionlineItemImportExcelVO> importProductionlineItemList(List<ProductionlineItemImportExcelVO> productionlineItems, Integer mode, Boolean updatePart);
List<ProductionlineItemImportErrorVO> importProductionlineItemList(List<ProductionlineItemImportExcelVO> productionlineItems, Integer mode, Boolean updatePart);
/**
* 零件生产线关系有效
* BQ-----QPLI

54
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionlineitem/ProductionlineitemServiceImpl.java

@ -8,8 +8,11 @@ import com.win.framework.common.exception.ServiceException;
import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.pojo.PageResult;
import com.win.framework.datapermission.core.util.DataPermissionUtils;
import com.win.module.wms.controller.bom.vo.BomImportErrorVO;
import com.win.module.wms.controller.productionlineitem.vo.*;
import com.win.module.wms.convert.bom.BomConvert;
import com.win.module.wms.convert.productionlineitem.ProductionlineitemConvert;
import com.win.module.wms.dal.dataobject.bom.BomDO;
import com.win.module.wms.dal.dataobject.owner.OwnerDO;
import com.win.module.wms.dal.dataobject.productionlineitem.ProductionlineitemDO;
import com.win.module.wms.dal.mysql.productionlineitem.ProductionlineitemMapper;
@ -86,37 +89,46 @@ public class ProductionlineitemServiceImpl implements ProductionlineitemService
return productionlineitemMapper.selectList(exportReqVO);
}
private String validateProductionlineItemImport( ProductionlineitemDO productionlineItem ){
StringBuilder message = new StringBuilder();
try {
validateProcessForCreateOrUpdate(null, productionlineItem.getFgLocationCode(), productionlineItem.getProductionLineCode(), productionlineItem.getItemCode(), productionlineItem.getAvailable());
} catch (ServiceException ex) {
message.append(ex.getMessage()).append(",");
}
return message.toString();
}
@Override
public List<ProductionlineItemImportExcelVO> importProductionlineItemList(List<ProductionlineItemImportExcelVO> productionlineItems, Integer mode, Boolean updatePart) {
public List<ProductionlineItemImportErrorVO> importProductionlineItemList(List<ProductionlineItemImportExcelVO> productionlineItems, Integer mode, Boolean updatePart) {
if (CollUtil.isEmpty(productionlineItems)) {
throw exception(PRODUCTIONLINEITEM_IMPORT_LIST_IS_EMPTY);
}
List<ProductionlineItemImportExcelVO> errorList = new ArrayList<>();
List<ProductionlineItemImportErrorVO> errorList = new ArrayList<>();
productionlineItems.forEach(productionlineItem -> {
// 校验,判断是否有不符合的原因
try {
if (mode != null) {
validateProcessForCreateOrUpdate(null, productionlineItem.getFgLocationCode(), productionlineItem.getProductionLineCode()
, productionlineItem.getItemCode(), productionlineItem.getAvailable());
}
} catch (ServiceException ex) {
errorList.add(productionlineItem);
return;
ProductionlineitemDO productionlineitemDO = ProductionlineitemConvert.INSTANCE.convert(productionlineItem);
String message = this.validateProductionlineItemImport(productionlineitemDO);
boolean flag = true;
if(!message.isEmpty()){
ProductionlineItemImportErrorVO importErrorVO = ProductionlineitemConvert.INSTANCE.convert2(productionlineitemDO);
importErrorVO.setImportStatus("失败");
importErrorVO.setImportRemark(message.substring(0, message.length() - 1));
errorList.add(importErrorVO);
flag = false;
}
// 判断如果不存在,在进行插入
OwnerDO existConfigurationSetting = null;
if (existConfigurationSetting == null && mode != 3) {
productionlineitemMapper.insert(ProductionlineitemConvert.INSTANCE.convert(productionlineItem));
} else if (existConfigurationSetting != null && mode != 2) {// 如果存在,判断是否允许更新
ProductionlineitemDO productionlineItemDo = ProductionlineitemConvert.INSTANCE.convert(productionlineItem);
productionlineItemDo.setId(existConfigurationSetting.getId());
productionlineitemMapper.updateById(productionlineItemDo);
if(flag) {
ProductionlineitemDO existAccountcalendar = productionlineitemMapper.selectByProductItemCode(productionlineitemDO.getItemCode());
if (existAccountcalendar == null && mode != 3) {
productionlineitemMapper.insert(productionlineitemDO);
} else if (existAccountcalendar != null && mode != 2) {
// 如果存在,判断是否允许更新
productionlineitemDO.setId(existAccountcalendar.getId());
productionlineitemMapper.updateById(productionlineitemDO);
}
}
});
//错误不为空并非部分更新,手工回滚
if(!errorList.isEmpty() && !updatePart) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
return errorList;
}
private void validateProcessForCreateOrUpdate(Long id, String fgLocationCode,String productionLineCode,String itemCode,String available) {

Loading…
Cancel
Save