物料资料

pull/451/head
starrysky 2019-08-24 15:46:37 +08:00
parent 2ce170501d
commit ff5ec90246
9 changed files with 231 additions and 42 deletions

View File

@ -0,0 +1,55 @@
package me.zhengjie.modules.wms.bd.request;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import lombok.Data;
import me.zhengjie.modules.wms.bd.domain.MaterialInfo;
import java.io.Serializable;
import java.util.List;
/**
* @author
* @date 2019-08-24
*/
@Data
public class CreateMaterialInfoRequest implements Serializable {
// 所属物料分类主键
private Long materialCategoryId;
// 物料分类名称
private String materialCategoryName;
// 物料名称
private String name;
// 物料编码
private String materialCode;
// 物料规格
private String specifications;
// 所属计量单位主键
private Long measureUnitId;
// 所属计量单位名称
private String measureUnitName;
// 产品库存预警
private List<MaterialInventoryWarning> materialInventoryWarningList;
// 产品期初设置
private List<MaterialInitialSetup> materialInitialSetupList;
// 物料期初合计期初总价格
private Integer materialInitialSetupTotalPrice;
// 物料期初合计总数量
private String materialInitialSetupTotalNumber;
private Boolean status;
public void copy(MaterialInfo source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}

View File

@ -0,0 +1,41 @@
package me.zhengjie.modules.wms.bd.request;
import lombok.Data;
import java.io.Serializable;
/**
* @author
* @date 2019-08-22
* //[{“sort”:””,”ware_house_code”:””,”ware_house_name”:””,”ware_house_type_code”:””,“ ware_house_type_name”:””,
* //“material_code”:””,“material_name”:””,“specifications”:””,“unit_price”:””,“total_price”:””,
* //”minimum_inventory”:””,”highest_inventory”:””}]
*/
@Data
public class MaterialInitialSetup implements Serializable {
private Integer sort;
private String wareHouseCode;
private String wareHouseName;
private String wareHouseTypeCode;
private String wareHouseTypeName;
private String materialCode;
private String materialName;
private String specifications;
private Long unitPrice;
private Long totalPrice;
private String minimumInventory;
private String highestInventory;
}

View File

@ -1,4 +1,4 @@
package me.zhengjie.modules.wms.bd.cons; package me.zhengjie.modules.wms.bd.request;
import lombok.Data; import lombok.Data;

View File

@ -7,6 +7,9 @@ import java.io.Serializable;
/** /**
* @author * @author
* @date 2019-08-22 * @date 2019-08-22
* //[{“sort”:””,”ware_house_code”:””,”ware_house_name”:””,”ware_house_type_code”:””,“ ware_house_type_name”:””,
* //“material_code”:””,“material_name”:””,“specifications”:””,“unit_price”:””,“total_price”:””,
* //”minimum_inventory”:””,”highest_inventory”:””}]
*/ */
@Data @Data
public class ProductInitialSetup implements Serializable { public class ProductInitialSetup implements Serializable {
@ -20,4 +23,19 @@ public class ProductInitialSetup implements Serializable {
private String wareHouseTypeCode; private String wareHouseTypeCode;
private String wareHouseTypeName; private String wareHouseTypeName;
private String materialCode;
private String materialName;
private String specifications;
private Long unitPrice;
private Long totalPrice;
private String minimumInventory;
private String highestInventory;
} }

View File

@ -1,8 +1,21 @@
package me.zhengjie.modules.wms.bd.request; package me.zhengjie.modules.wms.bd.request;
import lombok.Data;
import java.io.Serializable;
/** /**
* @author * @author
* @date 2019-08-21 * @date 2019-08-21
*/ */
public class ProductInventoryWarning { @Data
public class ProductInventoryWarning implements Serializable {
private String wareHouseCode;
private String wareHouseName;
private String minimumInventory;
private String highestInventory;
} }

View File

@ -2,6 +2,7 @@ package me.zhengjie.modules.wms.bd.rest;
import me.zhengjie.aop.log.Log; import me.zhengjie.aop.log.Log;
import me.zhengjie.modules.wms.bd.domain.MaterialInfo; import me.zhengjie.modules.wms.bd.domain.MaterialInfo;
import me.zhengjie.modules.wms.bd.request.CreateMaterialInfoRequest;
import me.zhengjie.modules.wms.bd.service.MaterialInfoService; import me.zhengjie.modules.wms.bd.service.MaterialInfoService;
import me.zhengjie.modules.wms.bd.service.dto.MaterialInfoQueryCriteria; import me.zhengjie.modules.wms.bd.service.dto.MaterialInfoQueryCriteria;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -27,7 +28,7 @@ public class MaterialInfoController {
@Log("分页查询物料资料") @Log("分页查询物料资料")
@ApiOperation(value = "分页查询物料资料") @ApiOperation(value = "分页查询物料资料")
@GetMapping(value = "/materialInfo") @GetMapping(value = "/queryMaterialInfoPage")
public ResponseEntity queryMaterialInfoPage(MaterialInfoQueryCriteria criteria, Pageable pageable){ public ResponseEntity queryMaterialInfoPage(MaterialInfoQueryCriteria criteria, Pageable pageable){
return new ResponseEntity(materialInfoService.queryAll(criteria,pageable),HttpStatus.OK); return new ResponseEntity(materialInfoService.queryAll(criteria,pageable),HttpStatus.OK);
} }
@ -42,13 +43,13 @@ public class MaterialInfoController {
@Log("新增物料资料") @Log("新增物料资料")
@ApiOperation(value = "新增物料资料") @ApiOperation(value = "新增物料资料")
@PostMapping(value = "/materialInfo") @PostMapping(value = "/materialInfo")
public ResponseEntity create(@Validated @RequestBody MaterialInfo resources){ public ResponseEntity create(@RequestBody CreateMaterialInfoRequest createMaterialInfoRequest){
return new ResponseEntity(materialInfoService.create(resources),HttpStatus.CREATED); return new ResponseEntity(materialInfoService.create(createMaterialInfoRequest),HttpStatus.CREATED);
} }
@Log("修改物料资料") @Log("修改物料资料")
@ApiOperation(value = "修改物料资料") @ApiOperation(value = "修改物料资料")
@PutMapping(value = "/materialInfo") @PutMapping(value = "/materialInfo/update")
public ResponseEntity update(@Validated @RequestBody MaterialInfo resources){ public ResponseEntity update(@Validated @RequestBody MaterialInfo resources){
materialInfoService.update(resources); materialInfoService.update(resources);
return new ResponseEntity(HttpStatus.NO_CONTENT); return new ResponseEntity(HttpStatus.NO_CONTENT);

View File

@ -1,7 +1,9 @@
package me.zhengjie.modules.wms.bd.service; package me.zhengjie.modules.wms.bd.service;
import me.zhengjie.modules.wms.bd.domain.MaterialInfo; import me.zhengjie.modules.wms.bd.domain.MaterialInfo;
import me.zhengjie.modules.wms.bd.request.CreateMaterialInfoRequest;
import me.zhengjie.modules.wms.bd.service.dto.MaterialInfoDTO; import me.zhengjie.modules.wms.bd.service.dto.MaterialInfoDTO;
import me.zhengjie.modules.wms.bd.service.dto.MaterialInfoDetailDTO;
import me.zhengjie.modules.wms.bd.service.dto.MaterialInfoQueryCriteria; import me.zhengjie.modules.wms.bd.service.dto.MaterialInfoQueryCriteria;
//import org.springframework.cache.annotation.CacheConfig; //import org.springframework.cache.annotation.CacheConfig;
//import org.springframework.cache.annotation.CacheEvict; //import org.springframework.cache.annotation.CacheEvict;
@ -38,15 +40,15 @@ public interface MaterialInfoService {
* @return * @return
*/ */
//@Cacheable(key = "#p0") //@Cacheable(key = "#p0")
MaterialInfoDTO findById(Long id); MaterialInfoDetailDTO findById(Long id);
/** /**
* create * create
* @param resources * @param createMaterialInfoRequest
* @return * @return
*/ */
//@CacheEvict(allEntries = true) //@CacheEvict(allEntries = true)
MaterialInfoDTO create(MaterialInfo resources); MaterialInfoDetailDTO create(CreateMaterialInfoRequest createMaterialInfoRequest);
/** /**
* update * update

View File

@ -0,0 +1,22 @@
package me.zhengjie.modules.wms.bd.service.dto;
import lombok.Data;
import me.zhengjie.modules.wms.bd.request.MaterialInitialSetup;
import me.zhengjie.modules.wms.bd.request.MaterialInventoryWarning;
import java.io.Serializable;
import java.util.List;
/**
* @author jie
* @date 2019-08-03
*/
@Data
public class MaterialInfoDetailDTO extends ProductInfoDTO implements Serializable {
private List<MaterialInventoryWarning> materialInventoryWarningList;
private List<MaterialInitialSetup> materialInitialSetupList;
}

View File

@ -1,17 +1,18 @@
package me.zhengjie.modules.wms.bd.service.impl; package me.zhengjie.modules.wms.bd.service.impl;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import me.zhengjie.exception.BadRequestException; import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.wms.bd.domain.MaterialCategory; import me.zhengjie.modules.wms.bd.domain.*;
import me.zhengjie.modules.wms.bd.domain.MaterialInfo;
import me.zhengjie.modules.wms.bd.domain.MeasureUnit;
import me.zhengjie.modules.wms.bd.repository.MaterialCategoryRepository; import me.zhengjie.modules.wms.bd.repository.MaterialCategoryRepository;
import me.zhengjie.modules.wms.bd.repository.MeasureUnitRepository; import me.zhengjie.modules.wms.bd.repository.MeasureUnitRepository;
import me.zhengjie.modules.wms.bd.request.*;
import me.zhengjie.modules.wms.bd.service.dto.*;
import me.zhengjie.utils.ValidationUtil; import me.zhengjie.utils.ValidationUtil;
import me.zhengjie.modules.wms.bd.repository.MaterialInfoRepository; import me.zhengjie.modules.wms.bd.repository.MaterialInfoRepository;
import me.zhengjie.modules.wms.bd.service.MaterialInfoService; import me.zhengjie.modules.wms.bd.service.MaterialInfoService;
import me.zhengjie.modules.wms.bd.service.dto.MaterialInfoDTO;
import me.zhengjie.modules.wms.bd.service.dto.MaterialInfoQueryCriteria;
import me.zhengjie.modules.wms.bd.service.mapper.MaterialInfoMapper; import me.zhengjie.modules.wms.bd.service.mapper.MaterialInfoMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -125,44 +126,80 @@ public class MaterialInfoServiceImpl implements MaterialInfoService {
} }
@Override @Override
public MaterialInfoDTO findById(Long id) { public MaterialInfoDetailDTO findById(Long id) {
Optional<MaterialInfo> bdMaterialInfo = materialInfoRepository.findById(id); MaterialInfoDetailDTO materialInfoDetailDTO = new MaterialInfoDetailDTO();
ValidationUtil.isNull(bdMaterialInfo, "BdMaterialInfo", "id", id);
return materialInfoMapper.toDto(bdMaterialInfo.get()); Optional<MaterialInfo> materialInfoOptional = materialInfoRepository.findById(id);
MaterialInfo materialInfo = materialInfoOptional.get();
MaterialInfoDTO materialInfoDTO = materialInfoMapper.toDto(materialInfo);
if(null != materialInfoDTO){
BeanUtils.copyProperties( materialInfoDTO, materialInfoDetailDTO);
String productInventoryWarningStr = materialInfo.getMaterialInventoryWarning();
if(StringUtils.hasLength(productInventoryWarningStr)){
List<MaterialInventoryWarning> materialInventoryWarningList = new Gson().fromJson(productInventoryWarningStr,new TypeToken<ArrayList<MaterialInventoryWarning>>() {}.getType());
materialInfoDetailDTO.setMaterialInventoryWarningList(materialInventoryWarningList);
}
String materialInitialSetupStr = materialInfo.getMaterialInitialSetup();
if(StringUtils.hasLength(materialInitialSetupStr)){
List<MaterialInitialSetup> materialInitialSetupList = new Gson().fromJson(materialInitialSetupStr,new TypeToken<ArrayList<MaterialInitialSetup>>() {}.getType());
materialInfoDetailDTO.setMaterialInitialSetupList(materialInitialSetupList);
}
}
return materialInfoDetailDTO;
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public MaterialInfoDTO create(MaterialInfo resources) { public MaterialInfoDetailDTO create(CreateMaterialInfoRequest createMaterialInfoRequest) {
Long materialCategoryId = resources.getMaterialCategoryId(); Long measureUnitId = createMaterialInfoRequest.getMeasureUnitId();
String materialCategoryName = resources.getMaterialCategoryName(); if(null == measureUnitId){
if (null == materialCategoryId || StringUtils.isEmpty(materialCategoryName)) {
throw new BadRequestException("物料类别不能为空!");
}
MaterialCategory materialCategory = materialCategoryRepository.findByIdAndStatusTrue(materialCategoryId);
if (null == materialCategory) {
throw new BadRequestException("物料类别不存在!");
}
Long measureUnitId = resources.getMeasureUnitId();
String measureUnitName = resources.getMeasureUnitName();
if (null == measureUnitId || StringUtils.isEmpty(measureUnitName)) {
throw new BadRequestException("计量单位不能为空!"); throw new BadRequestException("计量单位不能为空!");
} }
Optional<MeasureUnit> measureUnitOptional = measureUnitRepository.findById(measureUnitId);
MeasureUnit measureUnit = measureUnitRepository.findByIdAndStatusTrue(measureUnitId); MeasureUnit measureUnit = measureUnitOptional.get();
if (null == measureUnit) { if(null == measureUnit){
throw new BadRequestException("计量单位不存在!"); throw new BadRequestException("计量单位不存在!");
} }
// 物料编码 Long materialCategoryId = createMaterialInfoRequest.getMaterialCategoryId();
String materialCode = resources.getMaterialCode(); if(null == materialCategoryId){
MaterialInfo byMaterialCodeAndStatusTrue = materialInfoRepository.findByMaterialCodeAndStatusTrue(materialCode); throw new BadRequestException("物料类别不能为空!");
if (null != byMaterialCodeAndStatusTrue) {
throw new BadRequestException("物料编码已存在!");
} }
return materialInfoMapper.toDto(materialInfoRepository.save(resources)); Optional<MaterialCategory> materialCategoryOptional = materialCategoryRepository.findById(materialCategoryId);
MaterialCategory materialCategory = materialCategoryOptional.get();
if(null == materialCategory){
throw new BadRequestException("物料类别不存在!");
}
MaterialInfoDetailDTO materialInfoDetailDTO = new MaterialInfoDetailDTO();
MaterialInfo materialInfo = new MaterialInfo();
BeanUtils.copyProperties(createMaterialInfoRequest, materialInfo);
materialInfo.setStatus(true);
List<MaterialInventoryWarning> materialInventoryWarningList = createMaterialInfoRequest.getMaterialInventoryWarningList();
if(!CollectionUtils.isEmpty(materialInventoryWarningList)){
String materialInventoryWarningStr = new Gson().toJson(materialInventoryWarningList);
materialInfo.setMaterialInventoryWarning(materialInventoryWarningStr);
materialInfoDetailDTO.setMaterialInventoryWarningList(materialInventoryWarningList);
}
List<MaterialInitialSetup> materialInitialSetupList = createMaterialInfoRequest.getMaterialInitialSetupList();
if(!CollectionUtils.isEmpty(materialInitialSetupList)){
String materialInitialSetupStr = new Gson().toJson(materialInitialSetupList);
materialInfo.setMaterialInitialSetup(materialInitialSetupStr);
materialInfoDetailDTO.setMaterialInitialSetupList(materialInitialSetupList);
}
materialInfo.setMaterialCategoryName(materialCategory.getName());
materialInfo.setMeasureUnitName(measureUnit.getName());
materialInfo = materialInfoRepository.save(materialInfo);
MaterialInfoDTO materialInfoDTO = materialInfoMapper.toDto(materialInfo);
BeanUtils.copyProperties(materialInfoDTO, materialInfoDetailDTO);
return materialInfoDetailDTO;
} }
@Override @Override