|
|
@@ -26,8 +26,7 @@ import com.usoftchina.saas.document.mapper.DataImportMapper;
|
|
|
import com.usoftchina.saas.document.mapper.ProductDetailMapper;
|
|
|
import com.usoftchina.saas.document.mapper.ProductMapper;
|
|
|
import com.usoftchina.saas.document.mapper.WarehouseMapper;
|
|
|
-import com.usoftchina.saas.document.service.ProductService;
|
|
|
-import com.usoftchina.saas.document.service.WarehouseService;
|
|
|
+import com.usoftchina.saas.document.service.*;
|
|
|
import com.usoftchina.saas.exception.BizException;
|
|
|
import com.usoftchina.saas.page.PageRequest;
|
|
|
import com.usoftchina.saas.utils.CollectionUtils;
|
|
|
@@ -55,6 +54,12 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
|
|
|
private DataImportMapper dataImportMapper;
|
|
|
@Autowired
|
|
|
private WarehouseMapper warehouseMapper;
|
|
|
+ @Autowired
|
|
|
+ private ProductbrandService productbrandService;
|
|
|
+ @Autowired
|
|
|
+ private ProductunitService productunitService;
|
|
|
+ @Autowired
|
|
|
+ private ProducttypeService producttypeService;
|
|
|
|
|
|
@Override
|
|
|
public PageInfo<ProductDTO> getProductsByCondition(PageRequest page, ListReqDTO listReqDTO) {
|
|
|
@@ -103,14 +108,17 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
|
|
|
|
|
|
String prCode = product.getPr_code().trim().toUpperCase();
|
|
|
prCode = RegexpUtils.replaceSpecCharacter(prCode);
|
|
|
- String code = pushMaxnubmer(prCode, product.getId());
|
|
|
+ if (productListDTO.isCodeModified()) {
|
|
|
+ prCode = pushMaxnubmer(prCode, product.getId());
|
|
|
+ }
|
|
|
+
|
|
|
if(product.getId() == 0){
|
|
|
//保存
|
|
|
product.setCompanyId(companyId);
|
|
|
product.setCreatorId(userId);
|
|
|
product.setCreateTime(new Date());
|
|
|
product.setCreatorName(userName);
|
|
|
- product.setPr_code(code);
|
|
|
+ product.setPr_code(prCode);
|
|
|
//保存主表
|
|
|
getMapper().insertSelective(product);
|
|
|
//保存明细表数据
|
|
|
@@ -125,10 +133,11 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
|
|
|
|
|
|
productDetailMapper.batchInsert(productDetailList);
|
|
|
}
|
|
|
+ productDetailMapper.updatePd_price(product.getId());
|
|
|
//生成库存初始化数据并过账
|
|
|
generateProdIOPost(product, productDetailList);
|
|
|
|
|
|
- docBaseDTO = generateMsgObj(product.getId(), code);
|
|
|
+ docBaseDTO = generateMsgObj(product.getId(), prCode);
|
|
|
//记录LOG
|
|
|
messageLogService.save(docBaseDTO);
|
|
|
}else{
|
|
|
@@ -186,7 +195,7 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
|
|
|
|
|
|
product.setUpdaterId(BaseContextHolder.getUserId());
|
|
|
product.setUpdateTime(new Date());
|
|
|
- product.setPr_code(code);
|
|
|
+ product.setPr_code(prCode);
|
|
|
getMapper().updateByPrimaryKeySelective(product);
|
|
|
docBaseDTO = generateMsgObj(product.getId(), product.getPr_code());
|
|
|
//记录LOG
|
|
|
@@ -336,16 +345,14 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
|
|
|
if (!Status.ENABLE.getDisplay().equals(product.getPr_status())){
|
|
|
throw new BizException(BizExceptionCode.BIZ_BANNED);
|
|
|
}
|
|
|
- String code = getMapper().getCodeById(id);
|
|
|
- product = new Product();
|
|
|
- product.setId(id);
|
|
|
+ beforeClose(id);
|
|
|
product.setPr_status(Status.BANNED.getDisplay());
|
|
|
product.setPr_statuscode(Status.BANNED.name());
|
|
|
product.setUpdaterId(BaseContextHolder.getUserId());
|
|
|
product.setUpdateTime(new Date());
|
|
|
getMapper().updateByPrimaryKeySelective(product);
|
|
|
//记录LOG
|
|
|
- docBaseDTO = generateMsgObj(id, code);
|
|
|
+ docBaseDTO = generateMsgObj(id, product.getPr_code());
|
|
|
messageLogService.customizeLog(docBaseDTO, Operation.BANNED);
|
|
|
return docBaseDTO;
|
|
|
}else{
|
|
|
@@ -353,6 +360,33 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 物料禁用前校验
|
|
|
+ * @param id
|
|
|
+ */
|
|
|
+ private void beforeClose(Long id){
|
|
|
+ //1.库存大于0
|
|
|
+ int count = getMapper().selectStockById(id);
|
|
|
+ if (count > 0){
|
|
|
+ throw new BizException(BizExceptionCode.PRODUCT_HASSTOCK);
|
|
|
+ }
|
|
|
+ //2.存在未审核出入库单据
|
|
|
+ count = getMapper().selectProdIOCount(id);
|
|
|
+ if (count > 0){
|
|
|
+ throw new BizException(BizExceptionCode.PRODUCT_EXISTS_PRODIO);
|
|
|
+ }
|
|
|
+ //3.存在未关闭且状态非已出库销售订单
|
|
|
+ count = getMapper().selectSale(id);
|
|
|
+ if (count > 0){
|
|
|
+ throw new BizException(BizExceptionCode.PRODUCT_EXISTS_SALE);
|
|
|
+ }
|
|
|
+ //4.存在未关闭且状态非已入库采购订单
|
|
|
+ count = getMapper().selectPurchase(id);
|
|
|
+ if (count > 0){
|
|
|
+ throw new BizException(BizExceptionCode.PRODUCT_EXISTS_PURCHASE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public DocBaseDTO open(Long id) {
|
|
|
DocBaseDTO docBaseDTO = null;
|
|
|
@@ -365,7 +399,6 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
|
|
|
if (!Status.BANNED.getDisplay().equals(product.getPr_status())){
|
|
|
throw new BizException(BizExceptionCode.BIZ_ENABLE);
|
|
|
}else{
|
|
|
- product.setId(id);
|
|
|
product.setPr_statuscode(Status.ENABLE.name());
|
|
|
product.setPr_status(Status.ENABLE.getDisplay());
|
|
|
product.setUpdaterId(BaseContextHolder.getUserId());
|
|
|
@@ -415,8 +448,15 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
|
|
|
validProductOperation(id, BizExceptionCode.BIZ_RELDELETE_DELETEPROD);
|
|
|
//校验是否存在关联单据
|
|
|
validEnableDel(id);
|
|
|
-
|
|
|
String code = getMapper().getCodeById(id);
|
|
|
+
|
|
|
+ //找到原始单据,反过账并删除
|
|
|
+ String inoutCode = getMapper().selectProdIOCode(code, BaseContextHolder.getCompanyId(), "库存初始化");
|
|
|
+ if (!StringUtils.isEmpty(inoutCode)) {
|
|
|
+ post(inoutCode, "反过账");
|
|
|
+ getMapper().deleteProdIODetailByCode(inoutCode, BaseContextHolder.getCompanyId());
|
|
|
+ getMapper().deleteProdIOByCode(inoutCode, BaseContextHolder.getCompanyId());
|
|
|
+ }
|
|
|
productDetailMapper.deleteByProdId(id);
|
|
|
getMapper().deleteByPrimaryKey(id);
|
|
|
DocBaseDTO docBaseDTO = generateMsgObj(id, code);
|
|
|
@@ -573,25 +613,61 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
|
|
|
if (!CollectionUtils.isEmpty(details)) {
|
|
|
Map<String, List<DataImportDetail>> datas = CollectionUtils.groupBy(details, DataImportDetail::getDd_codevalue);
|
|
|
Integer detno = null;
|
|
|
+ String brand = null;
|
|
|
+ String unit = null;
|
|
|
+ String kind = null;
|
|
|
for (String code : datas.keySet()) {
|
|
|
listDTO = new ProductListDTO();
|
|
|
List<ProductDetail> productDetails = new ArrayList<>();
|
|
|
int i = getMapper().validateCodeWhenInsert(code, companyId);
|
|
|
List<DataImportDetail> data = datas.get(code);
|
|
|
DataImportDetail main = dataImportMapper.selectMainBycode(code, id, companyId);
|
|
|
+ //数据验证
|
|
|
+ if (StringUtils.isEmpty(main)) {
|
|
|
+ throw new BizException(BizExceptionCode.BIZ_REPORT_NOTCORRECT);
|
|
|
+ }
|
|
|
Product product = JSONObject.parseObject(main.getDd_maindata(), Product.class);
|
|
|
Warehouse warehouse = null;
|
|
|
//验证仓库
|
|
|
if (!StringUtils.isEmpty(product.getPr_whcode())) {
|
|
|
warehouse = warehouseMapper.selectWareHouse(product.getPr_whcode(), companyId);
|
|
|
if (null == warehouse) {
|
|
|
- err.append("物料编号为: " + product.getPr_code() + " 的物料仓库: "+ product.getPr_whname() +" 在系统中不存在,请确认数据是否正确");
|
|
|
+ err.append("物料编号为: " + product.getPr_code() + " 的物料仓库: "+ product.getPr_whname() +" 在系统中不存在");
|
|
|
break;
|
|
|
}
|
|
|
product.setPr_whid(warehouse.getId());
|
|
|
- product.setPr_status(Status.ENABLE.getDisplay());
|
|
|
- product.setPr_statuscode(Status.ENABLE.name());
|
|
|
+ product.setPr_whname(warehouse.getWh_description());
|
|
|
+ }
|
|
|
+ //验证品牌
|
|
|
+ brand = product.getPr_brand();
|
|
|
+ if (!StringUtils.isEmpty(brand)) {
|
|
|
+ Productbrand pr_brand = productbrandService.getComboByName(brand);
|
|
|
+ if (null == pr_brand) {
|
|
|
+ err.append("物料编号为: " + product.getPr_code() + " 的品牌: "+ product.getPr_brand() +" 在系统中不存在");
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
+ //验证单位
|
|
|
+ unit = product.getPr_unit();
|
|
|
+ if (!StringUtils.isEmpty(unit)) {
|
|
|
+ Productunit pr_unit = productunitService.getComboByName(unit);
|
|
|
+ if (null == pr_unit) {
|
|
|
+ err.append("物料编号为: " + product.getPr_code() + " 的单位: "+ product.getPr_unit() +" 在系统中不存在");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //验证类型
|
|
|
+ kind = product.getPr_kind();
|
|
|
+ if (!StringUtils.isEmpty(kind)) {
|
|
|
+ Producttype pr_kind = producttypeService.getTypeByName(kind);
|
|
|
+ if (null == pr_kind) {
|
|
|
+ err.append("物料编号为: " + product.getPr_code() + " 的类型: "+ product.getPr_kind() +" 在系统中不存在");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ product.setPr_status(Status.ENABLE.getDisplay());
|
|
|
+ product.setPr_statuscode(Status.ENABLE.name());
|
|
|
+
|
|
|
//编号不存在
|
|
|
if (i == 0) {
|
|
|
product.setId(0l);
|