package com.gkhy.hazmat.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.hazmat.common.api.CommonPage; import com.gkhy.hazmat.common.config.IdTableNameHandler; import com.gkhy.hazmat.common.domain.entity.SysUser; import com.gkhy.hazmat.common.enums.CodePrexEnum; import com.gkhy.hazmat.common.enums.HazmatStatusEnum; import com.gkhy.hazmat.common.enums.OperateStatusEnum; import com.gkhy.hazmat.common.enums.UserTypeEnum; import com.gkhy.hazmat.common.exception.ApiException; import com.gkhy.hazmat.common.utils.PageUtils; import com.gkhy.hazmat.common.utils.SecurityUtils; import com.gkhy.hazmat.system.domain.*; import com.gkhy.hazmat.system.domain.vo.HzProductWarehouseVO; import com.gkhy.hazmat.system.mapper.*; import com.gkhy.hazmat.system.service.HzProductService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; /** *

* 成品表 服务实现类 *

* * @author kzy * @since 2024-08-06 16:03:53 */ @Service public class HzProductServiceImpl extends ServiceImpl implements HzProductService { @Autowired private HzProductFlowMapper productFlowMapper; @Autowired private HzProductWarehouseRecordMapper productWarehouseRecordMapper; @Autowired private HzProductBasicMapper productBasicMapper; @Autowired private HzWarehouseMapper warehouseMapper; @Override public CommonPage selectProductList(HzProduct product) { if(product.getWarehouseId()==null||product.getBasicId()==null){ throw new ApiException("仓库id或者成品基础数据id不能为空"); } SysUser currentUser = SecurityUtils.getLoginUser().getUser(); checkUserAllowed(null,currentUser); //设置分表id IdTableNameHandler.setCurrentId(currentUser.getCompanyId()); product.setCompanyId(currentUser.getCompanyId()); PageUtils.startPage(); List productList = baseMapper.selectProductList(product); IdTableNameHandler.removeCurrentId(); return CommonPage.restPage(productList); } @Override public HzProduct selectProductById(Long productId) { SysUser currentUser = SecurityUtils.getLoginUser().getUser(); checkUserAllowed(null,currentUser); //设置分表id IdTableNameHandler.setCurrentId(currentUser.getCompanyId()); HzProduct product = baseMapper.selectById(productId); IdTableNameHandler.removeCurrentId(); checkUserAllowed(product,currentUser); return product; } @Override public int deleteProductById(Long productId) { SysUser currentUser = SecurityUtils.getLoginUser().getUser(); checkUserAllowed(null,currentUser); //设置分表id IdTableNameHandler.setCurrentId(currentUser.getCompanyId()); HzProduct product=baseMapper.selectById(productId); if(product==null){ throw new ApiException("成品不存在"); } checkUserAllowed(product,currentUser); baseMapper.deleteProductById(productId); IdTableNameHandler.removeCurrentId(); return 0; } @Override public HzProduct selectProductByCode(String code) { if(!code.startsWith(CodePrexEnum.GOOD.getCode())){ throw new ApiException("该条码格式不正确"); } SysUser currentUser=SecurityUtils.getLoginUser().getUser(); checkUserAllowed(null,currentUser); //设置分表id IdTableNameHandler.setCurrentId(currentUser.getCompanyId()); HzProduct product=baseMapper.selectProductByCode(code,currentUser.getCompanyId()); IdTableNameHandler.removeCurrentId(); if(product==null){ throw new ApiException("该条码数据不存在"); } return product; } @Override @Transactional(rollbackFor = RuntimeException.class) public void productSold(Long productId) { SysUser currentUser=SecurityUtils.getLoginUser().getUser(); checkUserAllowed(null,currentUser); //设置分表id IdTableNameHandler.setCurrentId(currentUser.getCompanyId()); HzProduct product=getById(productId); if(!product.getState().equals(HazmatStatusEnum.WAREHOUSEIN.getCode())){ throw new ApiException("成品不在库中,不能进行销售操作"); } checkUserAllowed(product,currentUser); //获取变动前仓库库存 int count = baseMapper.selectProductCountOfWarehouse(product.getWarehouseId(), product.getBasicId(), currentUser.getCompanyId()); product.setState(HazmatStatusEnum.SOLD.getCode()); product.setUpdateBy(currentUser.getUsername()); updateById(product); //生成流向 HzProductFlow productFlow=new HzProductFlow(); productFlow.setProductId(productId); productFlow.setBasicId(product.getBasicId()); productFlow.setState(OperateStatusEnum.SOLD.getCode()); productFlow.setCompanyId(currentUser.getCompanyId()); productFlow.setNum(product.getRemaining().multiply(BigDecimal.valueOf(-1))); productFlow.setCreateId(currentUser.getId()); productFlowMapper.insert(productFlow); //生成库存变动记录 //新增危化品变动记录 HzProductWarehouseRecord warehouseRecord = new HzProductWarehouseRecord() .setWarehouseId(product.getWarehouseId()) .setCreateId(currentUser.getId()) .setBasicId(product.getBasicId()) .setNum(-1) .setState(OperateStatusEnum.SOLD.getCode()) .setCompanyId(currentUser.getCompanyId()) .setRemaining(count-1); productWarehouseRecordMapper.insert(warehouseRecord); IdTableNameHandler.removeCurrentId(); } @Override @Transactional(rollbackFor = RuntimeException.class) public void productDiscard(Long productId) { SysUser currentUser=SecurityUtils.getLoginUser().getUser(); checkUserAllowed(null,currentUser); //设置分表id IdTableNameHandler.setCurrentId(currentUser.getCompanyId()); HzProduct product=getById(productId); if(!product.getState().equals(HazmatStatusEnum.WAREHOUSEIN.getCode())){ throw new ApiException("危化品不在库中,不能进行作废操作"); } checkUserAllowed(product,currentUser); //获取变动前仓库库存 int count = baseMapper.selectProductCountOfWarehouse(product.getWarehouseId(), product.getBasicId(), currentUser.getCompanyId()); product.setState(HazmatStatusEnum.DISCARD.getCode()); product.setUpdateBy(currentUser.getUsername()); updateById(product); //生成流向 HzProductFlow productFlow=new HzProductFlow(); productFlow.setProductId(product.getId()); productFlow.setBasicId(product.getBasicId()); productFlow.setState(OperateStatusEnum.DISCARD.getCode()); productFlow.setCompanyId(currentUser.getCompanyId()); productFlow.setNum(product.getRemaining().multiply(BigDecimal.valueOf(-1))); productFlow.setCreateId(currentUser.getId()); productFlowMapper.insert(productFlow); //生成库存变动记录 //新增危化品变动记录 HzProductWarehouseRecord warehouseRecord = new HzProductWarehouseRecord() .setWarehouseId(product.getWarehouseId()) .setBasicId(product.getBasicId()) .setCreateId(currentUser.getId()) .setNum(-1) .setState(OperateStatusEnum.DISCARD.getCode()) .setCompanyId(currentUser.getCompanyId()) .setRemaining(count-1); productWarehouseRecordMapper.insert(warehouseRecord); IdTableNameHandler.removeCurrentId(); } @Override public void changeState(HzProduct product) { if(product.getId()==null||product.getCompanyId()==null||product.getState()==null){ throw new ApiException("参数不正确"); } SysUser currentUser=SecurityUtils.getLoginUser().getUser(); checkUserAllowed(product,currentUser); //设置分表id IdTableNameHandler.setCurrentId(currentUser.getCompanyId()); HzProduct newProduct=new HzProduct().setId(product.getId()).setState(product.getState()); newProduct.setUpdateBy(currentUser.getUsername()); updateById(newProduct); IdTableNameHandler.removeCurrentId(); } @Override public CommonPage selectProductGroupWarehouse(HzProduct product) { SysUser currentUser = SecurityUtils.getLoginUser().getUser(); checkUserAllowed(null,currentUser); //设置分表id IdTableNameHandler.setCurrentId(currentUser.getCompanyId()); product.setCompanyId(currentUser.getCompanyId()); PageUtils.startPage(); List productList = baseMapper.selectProductGroupWareHouse(product); if(!productList.isEmpty()) { List warehouseIds = productList.stream().map(HzProductWarehouseVO::getWarehouseId).collect(Collectors.toList()); List basicIds = productList.stream().map(HzProductWarehouseVO::getBasicId).collect(Collectors.toList()); List hazmatBasicList = productBasicMapper.selectProductBasicListByIds(basicIds); List warehouseList = warehouseMapper.selectWarehouseListByIds(warehouseIds); Map productBasicMap=hazmatBasicList.stream().collect(Collectors.toMap(HzProductBasic::getId, item->item)); Map warehouseMap=warehouseList.stream().collect(Collectors.toMap(HzWarehouse::getId, item->item)); for(HzProductWarehouseVO productWarehouseVO:productList){ HzProductBasic productBasic=productBasicMap.get(productWarehouseVO.getBasicId()); HzWarehouse warehouse=warehouseMap.get(productWarehouseVO.getWarehouseId()); if(productBasic!=null){ productWarehouseVO.setProductBasic(productBasic); } if(warehouse!=null){ productWarehouseVO.setWarehouseName(warehouse.getName()); } } } IdTableNameHandler.removeCurrentId(); return CommonPage.restPage(productList); } public void checkUserAllowed(HzProduct product,SysUser user) { if (user.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())) { throw new ApiException("管理员不能操作"); } if(product!=null){ if(!Objects.equals(user.getCompanyId(), product.getCompanyId())){ throw new ApiException("无权限操作其他企业数据"); } } } }