package doumeemes.service.business.impl;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.fasterxml.jackson.databind.util.JSONPObject;
|
import doumeemes.biz.system.SystemDictDataBiz;
|
import doumeemes.core.constants.ResponseStatus;
|
import doumeemes.core.exception.BusinessException;
|
import doumeemes.core.model.ApiResponse;
|
import doumeemes.core.model.LoginUserInfo;
|
import doumeemes.core.model.PageData;
|
import doumeemes.core.model.PageWrap;
|
import doumeemes.core.utils.Constants;
|
import doumeemes.core.utils.DateUtil;
|
import doumeemes.core.utils.Utils;
|
import doumeemes.core.utils.redis.RedisUtil;
|
import doumeemes.dao.business.*;
|
import doumeemes.dao.business.model.*;
|
import doumeemes.dao.ext.*;
|
import doumeemes.dao.ext.bean.*;
|
import doumeemes.dao.ext.beanDto.*;
|
import doumeemes.dao.ext.dto.QueryWorkorderUserExtDTO;
|
import doumeemes.dao.ext.dto.ScanWTransferExtDTO;
|
import doumeemes.dao.ext.vo.CompanyExtListVO;
|
import doumeemes.dao.ext.vo.DepartmentExtListVO;
|
import doumeemes.dao.ext.vo.WorkorderRecordExtListVO;
|
import doumeemes.dao.system.SystemDictDataMapper;
|
import doumeemes.dao.system.model.SystemDictData;
|
import doumeemes.service.business.WOutboundService;
|
import doumeemes.service.business.WTransferService;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import doumeemes.service.ext.NoticesExtService;
|
import doumeemes.service.ext.WStockRecordExtService;
|
import net.sf.json.JSONArray;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.shiro.SecurityUtils;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.CollectionUtils;
|
|
import java.math.BigDecimal;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* 仓库管理-换库单信息表Service实现
|
* @author 江蹄蹄
|
* @date 2022/04/20 09:37
|
*/
|
@Service
|
public class WTransferServiceImpl implements WTransferService {
|
@Autowired
|
private RedisTemplate<String, Object> redisTemplate;
|
|
@Autowired
|
private WTransferMapper wTransferMapper;
|
|
@Autowired
|
private WTransferExtMapper wTransferExtMapper;
|
|
@Autowired
|
private WarehouseMapper warehouseMapper;
|
|
@Autowired
|
private WTransferDetailMapper wTransferDetailMapper;
|
|
@Autowired
|
private WTransferDetailExtMapper wTransferDetailExtMapper;
|
|
@Autowired
|
private WOutboundExtMapper wOutboundExtMapper;
|
@Autowired
|
private WOutboundMapper wOutboundMapper;
|
|
|
@Autowired
|
private WorkorderRecordExtMapper workorderRecordExtMapper;
|
|
@Autowired
|
private WOutboundRecordMapper wOutboundRecordMapper;
|
|
@Autowired
|
private CompanyUserExtMapper companyUserExtMapper;
|
|
@Autowired
|
private DepartmentExtMapper departmentExtMapper;
|
|
@Autowired
|
private WorkorderExtMapper workorderExtMapper;
|
|
@Autowired
|
private WOutboundService wOutboundService;
|
|
@Autowired
|
private DeviceExtMapper deviceExtMapper;
|
|
@Autowired
|
private WOutboundDetailExtMapper wOutboundDetailExtMapper;
|
|
@Autowired
|
private WOutboundDetailMapper wOutboundDetailMapper;
|
|
@Autowired
|
private WOutboundRecordExtMapper wOutboundRecordExtMapper;
|
|
@Autowired
|
private AppliancesExtMapper appliancesExtMapper;
|
|
@Autowired
|
private AppliancesMapper appliancesMapper;
|
|
@Autowired
|
private WStockExtMapper wStockExtMapper;
|
|
@Autowired
|
private DeviceMapper deviceMapper;
|
|
@Autowired
|
private NoticesExtService noticesExtService;
|
@Autowired
|
private CompanyUserMapper companyUserMapper;
|
@Autowired
|
private SystemDictDataBiz systemDictDataBiz;
|
@Autowired
|
private WStockMapper wStockMapper;
|
|
@Autowired
|
private WHistoryMapper wHistoryMapper;
|
|
@Autowired
|
private WorkorderUserExtMapper workorderUserExtMapper;
|
|
|
@Autowired
|
private SystemDictDataMapper systemDictDataMapper;
|
|
@Autowired
|
private WStockRecordExtService wStockRecordExtService;
|
|
|
|
@Autowired
|
private MaterialDistributeMapper materialDistributeMapper;
|
|
@Override
|
public Integer create(WTransfer wTransfer) {
|
wTransferMapper.insert(wTransfer);
|
return wTransfer.getId();
|
}
|
|
@Override
|
public void deleteById(Integer id) {
|
wTransferMapper.deleteById(id);
|
}
|
|
@Override
|
public void delete(WTransfer wTransfer) {
|
UpdateWrapper<WTransfer> deleteWrapper = new UpdateWrapper<>(wTransfer);
|
wTransferMapper.delete(deleteWrapper);
|
}
|
|
@Override
|
public void deleteByIdInBatch(List<Integer> ids) {
|
if (CollectionUtils.isEmpty(ids)) {
|
return;
|
}
|
wTransferMapper.deleteBatchIds(ids);
|
}
|
|
@Override
|
public void updateById(WTransfer wTransfer) {
|
wTransferMapper.updateById(wTransfer);
|
}
|
|
@Override
|
public void updateByIdInBatch(List<WTransfer> wTransfers) {
|
if (CollectionUtils.isEmpty(wTransfers)) {
|
return;
|
}
|
for (WTransfer wTransfer: wTransfers) {
|
this.updateById(wTransfer);
|
}
|
}
|
|
@Override
|
public WTransfer findById(Integer id) {
|
return wTransferMapper.selectById(id);
|
}
|
|
@Override
|
public WTransfer findOne(WTransfer wTransfer) {
|
QueryWrapper<WTransfer> wrapper = new QueryWrapper<>(wTransfer);
|
return wTransferMapper.selectOne(wrapper);
|
}
|
|
@Override
|
public List<WTransfer> findList(WTransfer wTransfer) {
|
QueryWrapper<WTransfer> wrapper = new QueryWrapper<>(wTransfer);
|
return wTransferMapper.selectList(wrapper);
|
}
|
|
@Override
|
public PageData<WTransfer> findPage(PageWrap<WTransfer> pageWrap) {
|
IPage<WTransfer> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
|
QueryWrapper<WTransfer> queryWrapper = new QueryWrapper<>();
|
Utils.MP.blankToNull(pageWrap.getModel());
|
if (pageWrap.getModel().getId() != null) {
|
queryWrapper.lambda().eq(WTransfer::getId, pageWrap.getModel().getId());
|
}
|
if (pageWrap.getModel().getDeleted() != null) {
|
queryWrapper.lambda().eq(WTransfer::getDeleted, pageWrap.getModel().getDeleted());
|
}
|
if (pageWrap.getModel().getCreateUser() != null) {
|
queryWrapper.lambda().eq(WTransfer::getCreateUser, pageWrap.getModel().getCreateUser());
|
}
|
if (pageWrap.getModel().getCreateTime() != null) {
|
queryWrapper.lambda().ge(WTransfer::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime()));
|
queryWrapper.lambda().le(WTransfer::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime()));
|
}
|
if (pageWrap.getModel().getUpdateUser() != null) {
|
queryWrapper.lambda().eq(WTransfer::getUpdateUser, pageWrap.getModel().getUpdateUser());
|
}
|
if (pageWrap.getModel().getUpdateTime() != null) {
|
queryWrapper.lambda().ge(WTransfer::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime()));
|
queryWrapper.lambda().le(WTransfer::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime()));
|
}
|
if (pageWrap.getModel().getRemark() != null) {
|
queryWrapper.lambda().eq(WTransfer::getRemark, pageWrap.getModel().getRemark());
|
}
|
if (pageWrap.getModel().getRootDepartId() != null) {
|
queryWrapper.lambda().eq(WTransfer::getRootDepartId, pageWrap.getModel().getRootDepartId());
|
}
|
if (pageWrap.getModel().getCode() != null) {
|
queryWrapper.lambda().eq(WTransfer::getCode, pageWrap.getModel().getCode());
|
}
|
if (pageWrap.getModel().getOrigin() != null) {
|
queryWrapper.lambda().eq(WTransfer::getOrigin, pageWrap.getModel().getOrigin());
|
}
|
if (pageWrap.getModel().getValidDate() != null) {
|
queryWrapper.lambda().ge(WTransfer::getValidDate, Utils.Date.getStart(pageWrap.getModel().getValidDate()));
|
queryWrapper.lambda().le(WTransfer::getValidDate, Utils.Date.getEnd(pageWrap.getModel().getValidDate()));
|
}
|
if (pageWrap.getModel().getOriginType() != null) {
|
queryWrapper.lambda().eq(WTransfer::getOriginType, pageWrap.getModel().getOriginType());
|
}
|
if (pageWrap.getModel().getOriginCode() != null) {
|
queryWrapper.lambda().eq(WTransfer::getOriginCode, pageWrap.getModel().getOriginCode());
|
}
|
if (pageWrap.getModel().getOriginId() != null) {
|
queryWrapper.lambda().eq(WTransfer::getOriginId, pageWrap.getModel().getOriginId());
|
}
|
if (pageWrap.getModel().getAbstracts() != null) {
|
queryWrapper.lambda().eq(WTransfer::getAbstracts, pageWrap.getModel().getAbstracts());
|
}
|
if (pageWrap.getModel().getOutDepartId() != null) {
|
queryWrapper.lambda().eq(WTransfer::getOutDepartId, pageWrap.getModel().getOutDepartId());
|
}
|
if (pageWrap.getModel().getOutUserId() != null) {
|
queryWrapper.lambda().eq(WTransfer::getOutUserId, pageWrap.getModel().getOutUserId());
|
}
|
if (pageWrap.getModel().getOutWarehouseId() != null) {
|
queryWrapper.lambda().eq(WTransfer::getOutWarehouseId, pageWrap.getModel().getOutWarehouseId());
|
}
|
if (pageWrap.getModel().getOutPlandate() != null) {
|
queryWrapper.lambda().ge(WTransfer::getOutPlandate, Utils.Date.getStart(pageWrap.getModel().getOutPlandate()));
|
queryWrapper.lambda().le(WTransfer::getOutPlandate, Utils.Date.getEnd(pageWrap.getModel().getOutPlandate()));
|
}
|
if (pageWrap.getModel().getOutActdate() != null) {
|
queryWrapper.lambda().ge(WTransfer::getOutActdate, Utils.Date.getStart(pageWrap.getModel().getOutActdate()));
|
queryWrapper.lambda().le(WTransfer::getOutActdate, Utils.Date.getEnd(pageWrap.getModel().getOutActdate()));
|
}
|
if (pageWrap.getModel().getInDepartId() != null) {
|
queryWrapper.lambda().eq(WTransfer::getInDepartId, pageWrap.getModel().getInDepartId());
|
}
|
if (pageWrap.getModel().getInUserId() != null) {
|
queryWrapper.lambda().eq(WTransfer::getInUserId, pageWrap.getModel().getInUserId());
|
}
|
if (pageWrap.getModel().getInWarehouseId() != null) {
|
queryWrapper.lambda().eq(WTransfer::getInWarehouseId, pageWrap.getModel().getInWarehouseId());
|
}
|
if (pageWrap.getModel().getInPlandate() != null) {
|
queryWrapper.lambda().ge(WTransfer::getInPlandate, Utils.Date.getStart(pageWrap.getModel().getInPlandate()));
|
queryWrapper.lambda().le(WTransfer::getInPlandate, Utils.Date.getEnd(pageWrap.getModel().getInPlandate()));
|
}
|
if (pageWrap.getModel().getInActdate() != null) {
|
queryWrapper.lambda().ge(WTransfer::getInActdate, Utils.Date.getStart(pageWrap.getModel().getInActdate()));
|
queryWrapper.lambda().le(WTransfer::getInActdate, Utils.Date.getEnd(pageWrap.getModel().getInActdate()));
|
}
|
if (pageWrap.getModel().getStatus() != null) {
|
queryWrapper.lambda().eq(WTransfer::getStatus, pageWrap.getModel().getStatus());
|
}
|
for(PageWrap.SortData sortData: pageWrap.getSorts()) {
|
if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
|
queryWrapper.orderByDesc(sortData.getProperty());
|
} else {
|
queryWrapper.orderByAsc(sortData.getProperty());
|
}
|
}
|
return PageData.from(wTransferMapper.selectPage(page, queryWrapper));
|
}
|
|
@Override
|
public long count(WTransfer wTransfer) {
|
QueryWrapper<WTransfer> wrapper = new QueryWrapper<>(wTransfer);
|
return wTransferMapper.selectCount(wrapper);
|
}
|
|
public String sub(WTransferDetailBean i){
|
StringBuffer sub = new StringBuffer();
|
sub.append(i.getMaterialId()
|
+i.getUnitId()
|
+i.getQualityType()
|
);
|
if(!Objects.isNull(i.getOutWarehouseId())){
|
sub.append(i.getOutWarehouseId());
|
}
|
if(!Objects.isNull(i.getInWarehouseId())){
|
sub.append(i.getInWarehouseId());
|
}
|
// if(!Objects.isNull(i.getOutLocationId())){
|
// sub.append(i.getOutLocationId());
|
// }
|
// if(!Objects.isNull(i.getInLocationId())){
|
// sub.append(i.getInLocationId());
|
// }
|
if(!Objects.isNull(i.getBatch())){
|
sub.append(i.getBatch());
|
}
|
if(!Objects.isNull(i.getProcedureId())){
|
sub.append(i.getProcedureId());
|
}
|
return sub.toString();
|
}
|
|
|
@Override
|
@Transactional
|
public ApiResponse saveBean(WTransferBean wTransferBean, LoginUserInfo loginUserInfo){
|
WTransfer wTransfer = new WTransfer();
|
wTransfer.setRootDepartId(loginUserInfo.getRootDepartment().getId());
|
wTransfer.setOrigin(wTransferBean.getOrigin());
|
wTransfer.setOriginType(wTransferBean.getOriginType());
|
wTransfer.setOriginCode(wTransferBean.getOriginCode());
|
wTransfer.setOriginId(wTransferBean.getOriginId());
|
wTransfer.setOutDepartId(wTransferBean.getOutDepartId());
|
wTransfer.setInDepartId(wTransferBean.getInDepartId());
|
wTransfer.setOutWarehouseId(wTransferBean.getOutWarehouseId());
|
wTransfer.setInWarehouseId(wTransferBean.getInWarehouseId());
|
wTransfer.setOutUserId(wTransferBean.getOutUserId());
|
wTransfer.setInUserId(wTransferBean.getInUserId());
|
wTransfer.setOutPlandate(wTransferBean.getOutPlandate());
|
wTransfer.setInPlandate(wTransferBean.getInPlandate());
|
wTransfer.setType(wTransferBean.getType());
|
wTransfer.setCreateTime(new Date());
|
wTransfer.setAbstracts(wTransferBean.getAbstracts());
|
wTransfer.setCreateUser(loginUserInfo.getId());
|
wTransfer.setCode(getNextCode(loginUserInfo.getCompany().getId()));
|
wTransfer.setValidDate(new Date());
|
wTransfer.setBackorderId(wTransferBean.getBackOrderId());
|
|
Warehouse warehouseOut = warehouseMapper.selectById(wTransferBean.getOutWarehouseId());
|
if(Objects.isNull(warehouseOut)){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "转出仓库信息异常");
|
}
|
wTransfer.setOutDepartId(warehouseOut.getDepartId());
|
wTransfer.setOutUserId(warehouseOut.getManagerId());
|
Warehouse warehouseIn = warehouseMapper.selectById(wTransferBean.getInWarehouseId());
|
if(Objects.isNull(warehouseIn)){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "转入仓库信息异常");
|
}
|
wTransfer.setInDepartId(warehouseIn.getDepartId());
|
wTransfer.setStatus(Constants.ZERO);
|
wTransferMapper.insert(wTransfer);
|
//处理明细数据
|
List<WTransferDetailBean> wTransferDetailBeanList = wTransferBean.getWTransferDetailBeanList();
|
if(wTransferDetailBeanList.size()<=0){
|
throw new BusinessException(ResponseStatus.ITEM_ERR_STATUS.getCode(), "请选择转库物料信息");
|
}
|
|
Map<String, List<WTransferDetailBean>> wTransferDetailBeanMap = wTransferDetailBeanList.stream()
|
.collect(Collectors.groupingBy(i -> this.sub(i)));
|
Iterator<String> iter = wTransferDetailBeanMap.keySet().iterator();
|
while(iter.hasNext()) {
|
String key = iter.next();
|
//获取当前行处理数据
|
List<WTransferDetailBean> wOutboundInBodyBeanList = wTransferDetailBeanMap.get(key);
|
BigDecimal sumNum = BigDecimal.ZERO;
|
if(wOutboundInBodyBeanList.size()>0){
|
for (WTransferDetailBean wTransferDetailBean:wOutboundInBodyBeanList) {
|
sumNum = sumNum.add(wTransferDetailBean.getOutPlanNum());
|
}
|
WTransferDetailBean w = wOutboundInBodyBeanList.get(Constants.ZERO);
|
WTransferDetail wTransferDetail = new WTransferDetail();
|
wTransferDetail.setUnitId(w.getUnitId());
|
wTransferDetail.setMaterialId(w.getMaterialId());
|
wTransferDetail.setBatch(w.getBatch());
|
wTransferDetail.setOutPlannum(sumNum);
|
wTransferDetail.setOutWarehouseId(wTransferBean.getOutWarehouseId());
|
wTransferDetail.setInWarehouseId(wTransferBean.getInWarehouseId());
|
// if(Objects.isNull(wTransferDetail.getBatch())||Objects.isNull(wTransferDetail.getOutPlannum())
|
// ||Objects.isNull(wTransferDetail.getMaterialId())||Objects.isNull(wTransferDetail.getUnitId())){
|
// throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "入参数据异常");
|
// }
|
if(Objects.isNull(wTransferDetail.getOutPlannum())
|
||Objects.isNull(wTransferDetail.getMaterialId())||Objects.isNull(wTransferDetail.getUnitId())){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "入参数据异常");
|
}
|
wTransferDetail.setCreateUser(loginUserInfo.getId());
|
wTransferDetail.setRootDepartId(loginUserInfo.getRootDepartment().getId());
|
wTransferDetail.setTransferId(wTransfer.getId());
|
wTransferDetail.setOutDepartId(wTransfer.getOutDepartId());
|
wTransferDetail.setOutWarehouseId(wTransfer.getOutWarehouseId());
|
wTransferDetail.setOutLocationId(w.getOutLocationId());
|
wTransferDetail.setInDepartId(wTransfer.getInDepartId());
|
wTransferDetail.setInWarehouseId(wTransfer.getInWarehouseId());
|
wTransferDetail.setInLcoationId(w.getInLocationId());
|
wTransferDetail.setQualityType(w.getQualityType());
|
wTransferDetail.setProcedureId(w.getProcedureId());
|
wTransferDetailExtMapper.insert(wTransferDetail);
|
}
|
|
}
|
|
// wTransferDetailBeanList.forEach(i->{
|
// WTransferDetail wTransferDetail = new WTransferDetail();
|
// wTransferDetail.setUnitId(i.getUnitId());
|
// wTransferDetail.setMaterialId(i.getMaterialId());
|
// wTransferDetail.setBatch(i.getBatch());
|
// wTransferDetail.setOutPlannum(i.getOutPlanNum());
|
// wTransferDetail.setOutWarehouseId(wTransferBean.getOutWarehouseId());
|
// wTransferDetail.setInWarehouseId(wTransferBean.getInWarehouseId());
|
//// if(Objects.isNull(wTransferDetail.getBatch())||Objects.isNull(wTransferDetail.getOutPlannum())
|
//// ||Objects.isNull(wTransferDetail.getMaterialId())||Objects.isNull(wTransferDetail.getUnitId())){
|
//// throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "入参数据异常");
|
//// }
|
// if(Objects.isNull(wTransferDetail.getOutPlannum())
|
// ||Objects.isNull(wTransferDetail.getMaterialId())||Objects.isNull(wTransferDetail.getUnitId())){
|
// throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "入参数据异常");
|
// }
|
// wTransferDetail.setCreateUser(loginUserInfo.getId());
|
// wTransferDetail.setRootDepartId(loginUserInfo.getRootDepartment().getId());
|
// wTransferDetail.setTransferId(wTransfer.getId());
|
// wTransferDetail.setOutDepartId(wTransfer.getOutDepartId());
|
// wTransferDetail.setOutWarehouseId(wTransfer.getOutWarehouseId());
|
// wTransferDetail.setInDepartId(wTransfer.getInDepartId());
|
// wTransferDetail.setInWarehouseId(wTransfer.getInWarehouseId());
|
// wTransferDetail.setInLcoationId(i.getInLocationId());
|
// wTransferDetail.setQualityType(i.getQualityType());
|
// wTransferDetail.setProcedureId(i.getProcedureId());
|
// wTransferDetailExtMapper.insert(wTransferDetail);
|
// });
|
|
CompanyUser companyUser = companyUserMapper.selectOne(new QueryWrapper<CompanyUser>()
|
.eq("USER_ID",wTransfer.getOutUserId())
|
.eq("DELETED",0)
|
.eq("ROOT_DEPART_ID",wTransfer.getRootDepartId())
|
);
|
if(Objects.isNull(companyUser)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到出库仓管员信息【"+wTransfer.getOutUserId()+"】");
|
}
|
|
Constants.Notices_Type_Transfer notices_type_transfer = Constants.Notices_Type_Transfer.checkEnum(wTransfer.getType());
|
if(Objects.isNull(notices_type_transfer)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转库单类型信息【"+wTransfer.getType()+"】");
|
}
|
|
|
sendOutNotice(companyUser.getId(),wTransfer.getId(),wTransfer.getCode(),notices_type_transfer,Constants.getNoticeUrl(loginUserInfo.getCompany(),Constants.DINGDING_NOTICE_URL.out));
|
|
//记录操作记录
|
WHistory wHistory = wTransfer.toWHistory(loginUserInfo);
|
wHistoryMapper.insert(wHistory);
|
|
return ApiResponse.success(wTransfer);
|
}
|
|
|
public void sendOutNotice(Integer userId ,Integer billId , String billCode ,Constants.Notices_Type_Transfer notices_type_transfer,String url){
|
|
//发送通知
|
Notices notices = new Notices();
|
notices.setCompanyUserId(userId);
|
notices.setType(notices_type_transfer.getNoticeOutType());
|
notices.setContent("【"+billCode+"】"+ notices_type_transfer.getContent().replace("{optType}","出库"));
|
notices.setTitle(notices_type_transfer.getTitle());
|
notices.setObjId(billId);
|
if(!Objects.isNull(url)){
|
notices.setUrl(url.replace("{id}",billId.toString()));
|
}
|
noticesExtService.sendNotice(notices);
|
}
|
public void sendOutNotice(LoginUserInfo user,Integer userId ,Integer billId , String billCode ,Constants.Notices_Type_Transfer notices_type_transfer,String url){
|
|
//发送通知
|
Notices notices = new Notices();
|
notices.setCompanyUserId(userId);
|
notices.setType(notices_type_transfer.getNoticeOutType());
|
notices.setContent("【"+billCode+"】"+ notices_type_transfer.getContent().replace("{optType}","出库"));
|
notices.setTitle(notices_type_transfer.getTitle());
|
notices.setObjId(billId);
|
if(!Objects.isNull(url)){
|
notices.setUrl(url.replace("{id}",billId.toString()));
|
}
|
noticesExtService.sendNoticeNologin(notices,user);
|
}
|
|
public void sendInNotice(Integer userId ,Integer billId , String billCode ,Constants.Notices_Type_Transfer notices_type_transfer,String url){
|
|
//发送通知
|
Notices notices = new Notices();
|
notices.setCompanyUserId(userId);
|
notices.setType(notices_type_transfer.getNoticeInType());
|
notices.setContent("【"+billCode+"】"+ notices_type_transfer.getContent().replace("{optType}","入库"));
|
notices.setTitle(notices_type_transfer.getTitle());
|
notices.setObjId(billId);
|
if(!Objects.isNull(url)){
|
notices.setUrl(url.replace("{id}",billId.toString()));
|
}
|
noticesExtService.sendNotice(notices);
|
}
|
|
@Override
|
public WTransfer getBeanById(Integer id){
|
WTransfer wTransfer = wTransferExtMapper.wTransferById(id);
|
wTransfer.setWTransferDetailList(wTransferDetailExtMapper.wTransferDetailListById(id));
|
return wTransfer;
|
}
|
|
|
|
@Override
|
public synchronized String getNextCode(Integer comId){
|
String prefix = "ZK-" + DateUtil.getDate(new Date(),"yyyyMMdd") +"-";
|
Integer countNum = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_TRANSFER_KEY+comId,Integer.class);
|
countNum = Constants.formatIntegerNum(countNum)+1;
|
//更新缓存
|
RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_TRANSFER_KEY+comId,countNum);
|
String nextIndex =Integer.toString( countNum);
|
return prefix + StringUtils.leftPad(nextIndex,4,"0");
|
}
|
|
|
@Override
|
@Transactional
|
public ApiResponse cancel(Integer id,String detail,LoginUserInfo loginUserInfo){
|
WTransfer wTransfer = wTransferExtMapper.selectById(id);
|
if(Objects.isNull(wTransfer)){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "未查询到对象信息");
|
}
|
if(1 ==wTransfer.getStatus()||2 == wTransfer.getStatus()){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "单据已处理,无法取消");
|
}else if(3 == wTransfer.getStatus()){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "单据已取消");
|
}
|
wTransfer.setStatus(3);
|
wTransfer.setCancelDate(new Date());
|
wTransfer.setCancelInfo(detail);
|
wTransfer.setCancelUserId(loginUserInfo.getId());
|
wTransferExtMapper.updateById(wTransfer);
|
|
//记录操作记录
|
WHistory wHistory = wTransfer.toWHistory(loginUserInfo);
|
wHistoryMapper.insert(wHistory);
|
|
//取消通知
|
noticesExtService.dealNotice(wTransfer.getId(),Constants.Notices_Type_Transfer.checkEnum(wTransfer.getType()).getNoticeOutType(),null);
|
return ApiResponse.success(wTransfer);
|
}
|
|
@Override
|
public ApiResponse<WTransferConfirmBean> wTransferConfirm(Integer id){
|
WTransfer wTransfer = wTransferExtMapper.selectOne(new QueryWrapper<WTransfer>().eq("id",id));
|
if(Objects.isNull(wTransfer)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转库单对象信息");
|
}
|
if(wTransfer.getStatus()!=Constants.ONE){
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "单据状态错误无法进行备料确认,请检查单据状态");
|
}
|
if(wTransfer.getType()!=Constants.THREE){
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "单据类型错误");
|
}
|
CompanyUser companyUser = companyUserExtMapper.selectOne(
|
new QueryWrapper<CompanyUser>()
|
.eq("USER_ID",wTransfer.getInUserId())
|
.eq("ROOT_DEPART_ID",wTransfer.getRootDepartId())
|
.eq("deleted","0")
|
);
|
if(Objects.isNull(companyUser)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到操作员工信息");
|
}
|
Department department = departmentExtMapper.selectById(companyUser.getDepartmentId());
|
if(Objects.isNull(department)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到操作员工班组信息");
|
}
|
WTransferConfirmBean wTransferConfirmBean = new WTransferConfirmBean();
|
wTransferConfirmBean.setTransferNo(wTransfer.getCode());
|
wTransferConfirmBean.setValidDate(wTransfer.getValidDate());
|
wTransferConfirmBean.setWorker(companyUser.getName());
|
wTransferConfirmBean.setGroupName(department.getName());
|
|
// wTransferConfirmBean.setDeviceList(deviceMapper.selectList(new QueryWrapper<Device>()
|
// .apply(" PRODUCE_WAREHOUSE_LOCATION_ID in ( select w.IN_LCOATION_ID from w_transfer_detail w where w.TRANSFER_ID = "+wTransfer.getId()+" )")
|
// ));
|
|
wTransferConfirmBean.setDeviceList(deviceMapper.selectList(new QueryWrapper<Device>()
|
.apply(" id in ( select w.PRO_GROUP_ID from workorder w where FIND_IN_SET(w.id,'"+wTransfer.getOriginId()+"') ) ")
|
));
|
|
wTransferConfirmBean.setQualifiedBeanList(
|
wTransferDetailExtMapper.wTransferConfirmDetail(wTransfer.getId(),Integer.toString(Constants.QUALITIY_TYPE.normal))
|
);
|
wTransferConfirmBean.setRejectsBeanList(
|
wTransferDetailExtMapper.wTransferConfirmDetail(wTransfer.getId(),Integer.toString(Constants.QUALITIY_TYPE.unqulified))
|
);
|
wTransferConfirmBean.setScrapBeanList(
|
wTransferDetailExtMapper.wTransferConfirmDetail(wTransfer.getId(),Integer.toString(Constants.QUALITIY_TYPE.scrap))
|
);
|
|
// wTransferConfirmBean.setQualifiedBeanList(
|
// wTransferDetailExtMapper.wTransferConfirmDetail(wTransfer.getId(),Constants.APPLIANCES_TYPE_LABLE.qualified)
|
// );
|
// wTransferConfirmBean.setRejectsBeanList(
|
// wTransferDetailExtMapper.wTransferConfirmDetail(wTransfer.getId(),Constants.APPLIANCES_TYPE_LABLE.rejects)
|
// );
|
// wTransferConfirmBean.setScrapBeanList(
|
// wTransferDetailExtMapper.wTransferConfirmDetail(wTransfer.getId(),Constants.APPLIANCES_TYPE_LABLE.scrap)
|
// );
|
// wTransferConfirmBean.setMixBeanList(
|
// wTransferDetailExtMapper.wTransferConfirmDetail(wTransfer.getId(),Constants.APPLIANCES_TYPE_LABLE.mix)
|
// );
|
|
List<WTransferConfirmWorkOrderBean> wTransferConfirmWorkOrderBeanList =
|
workorderExtMapper.workOrderForWTransferConfirm(wTransfer.getOriginId().toString());
|
if(!Objects.isNull(wTransferConfirmWorkOrderBeanList)){
|
wTransferConfirmWorkOrderBeanList.forEach(i->{
|
QueryWorkorderUserExtDTO dto = new QueryWorkorderUserExtDTO();
|
dto.setWorkorderId(i.getId());
|
i.setWorkOrderUserList(workorderUserExtMapper.selectListByOrderId(dto));
|
});
|
}
|
|
wTransferConfirmBean.setWTransferConfirmWorkOrderBeanList(wTransferConfirmWorkOrderBeanList);
|
return ApiResponse.success(wTransferConfirmBean);
|
}
|
|
|
|
@Override
|
@Transactional
|
public ApiResponse acceptWTransfer(Integer id,LoginUserInfo loginUserInfo){
|
WTransfer wTransfer = wTransferExtMapper.selectOne(new QueryWrapper<WTransfer>().eq("id",id));
|
if(Objects.isNull(wTransfer)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转库单对象信息");
|
}
|
if(wTransfer.getStatus()!=Constants.ONE){
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "单据状态错误无法进行备料确认,请检查单据状态");
|
}
|
if(wTransfer.getType()!=Constants.THREE){
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "单据类型错误");
|
}
|
CompanyUser companyUser = companyUserExtMapper.selectOne(
|
new QueryWrapper<CompanyUser>().eq("USER_ID",wTransfer.getInUserId())
|
.eq("ROOT_DEPART_ID",wTransfer.getRootDepartId())
|
.eq("DELETED",0));
|
if(Objects.isNull(companyUser)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到操作员工信息");
|
}
|
Department department = departmentExtMapper.selectById(companyUser.getDepartmentId());
|
if(Objects.isNull(department)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到操作员工班组信息");
|
}
|
List<WTransferDetail> wTransferDetailList = wTransferDetailMapper.selectList(
|
new QueryWrapper<WTransferDetail>().eq("TRANSFER_ID",wTransfer.getId())
|
);
|
if(wTransferDetailList.size()==Constants.ZERO){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转库单明细信息");
|
}
|
//仓库数据
|
Warehouse warehouse = warehouseMapper.selectById(wTransfer.getInWarehouseId());
|
if(Objects.isNull(warehouse)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到入库仓库数据");
|
}
|
|
List<WOutbound> wOutboundOutList = wOutboundMapper.selectList(new QueryWrapper<WOutbound>()
|
.eq("ORIGIN_ID",wTransfer.getId())
|
.eq("ORIGIN_TYPE",3)
|
);
|
if(wOutboundOutList.size() == Constants.ZERO){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转库单对应出库单数据!");
|
}else if(wOutboundOutList.size() > Constants.ONE){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "转库单对应出库单数据异常");
|
}
|
WOutbound wOutboundOut = wOutboundOutList.get(Constants.ZERO);
|
// List<WOutboundRecord> wOutboundRecordOutList = wOutboundRecordMapper.selectList(
|
// new QueryWrapper<WOutboundRecord>().eq("OUTBOUND_ID",wOutboundOut.getId())
|
// );
|
//1、由于生成转库单是根据操作人 仓位分组, 所以转库单上只会有一个入库仓库
|
//2、生成入库单单头
|
WOutbound wOutbound = new WOutbound();
|
wOutbound.setCreateUser(loginUserInfo.getId());
|
wOutbound.setCreateTime(new Date());
|
wOutbound.setRootDepartId(loginUserInfo.getRootDepartment().getId());
|
wOutbound.setDepartId(loginUserInfo.getComDepartment().getId());
|
wOutbound.setCode(wOutboundService.getNextInCode(loginUserInfo.getCompany().getId()));//单据编码 RK-20220519-0001
|
wOutbound.setOrigin(Constants.ONE);
|
wOutbound.setValidDate(new Date());
|
wOutbound.setType(Constants.ONE);
|
wOutbound.setOriginType(3);
|
wOutbound.setOriginCode(wTransfer.getCode());
|
wOutbound.setOriginId(wTransfer.getId());
|
wOutbound.setUserId(loginUserInfo.getId());
|
wOutbound.setWarehouseId(wTransfer.getInWarehouseId());
|
wOutbound.setDealDate(new Date());
|
wOutbound.setStatus(Constants.ONE);
|
wOutbound.setPlanDate(wTransfer.getInPlandate());
|
wOutbound.setBillType(wTransfer.getType());
|
wOutboundExtMapper.insert(wOutbound);
|
|
List<WOutboundDetail> wOutboundDetailOutList = wOutboundDetailMapper.selectList(
|
new QueryWrapper<WOutboundDetail>().eq("OUTBOUND_ID",wOutboundOut.getId()));
|
|
for (WOutboundDetail wOutboundDetail:wOutboundDetailOutList) {
|
WOutboundDetail wOutboundInDetail = new WOutboundDetail();
|
wOutboundInDetail.setId(null);
|
wOutboundInDetail.setOutboundId(wOutbound.getId());
|
wOutboundInDetail.setDeleted(Constants.ZERO);
|
wOutboundInDetail.setCreateUser(loginUserInfo.getId());
|
wOutboundInDetail.setCreateTime(new Date());
|
wOutboundInDetail.setRootDepartId(loginUserInfo.getRootDepartment().getId());
|
wOutboundInDetail.setMaterialId(wOutboundDetail.getMaterialId());
|
wOutboundInDetail.setUnitId(wOutboundDetail.getUnitId());
|
wOutboundInDetail.setBatch(wOutboundDetail.getBatch());
|
wOutboundInDetail.setNum(wOutboundDetail.getDoneNum());
|
wOutboundInDetail.setDoneDate(new Date());
|
wOutboundInDetail.setDoneNum(wOutboundDetail.getDoneNum());
|
wOutboundInDetail.setWarehouseId(wOutbound.getWarehouseId());
|
wOutboundInDetail.setStatus(Constants.ONE);
|
wOutboundInDetail.setQualityType(wOutboundDetail.getQualityType());
|
wOutboundInDetail.setProcedureId(wOutboundDetail.getProcedureId());
|
for (WTransferDetail wTransferDetail:wTransferDetailList) {
|
if(StringUtils.equals(wTransferDetail.getMaterialId().toString(),wOutboundDetail.getMaterialId().toString())){
|
wOutboundInDetail.setLocationId(wTransferDetail.getInLcoationId());
|
wTransferDetail.setInActdate(new Date());
|
wTransferDetail.setInActnum(wOutboundDetail.getDoneNum());
|
wTransferDetailMapper.updateById(wTransferDetail);
|
}
|
}
|
wOutboundDetailExtMapper.insert(wOutboundInDetail);
|
|
//记录库存变动记录
|
wStockRecordExtService.saveRecord(Constants.ONE,wOutboundDetail.getId(),loginUserInfo);
|
|
|
List<WOutboundRecord> wOutboundRecordOutListByDetail = wOutboundRecordMapper.selectList(
|
new QueryWrapper<WOutboundRecord>().eq("DETAIL_ID",wOutboundDetail.getId())
|
);
|
for (WOutboundRecord wOutboundRecord:wOutboundRecordOutListByDetail) {
|
WOutboundRecord wOutboundRecordIn = wOutboundRecord;
|
wOutboundRecordIn.setId(null);
|
wOutboundRecordIn.setCreateUser(loginUserInfo.getId());
|
wOutboundRecordIn.setCreateTime(new Date());
|
wOutboundRecordIn.setWarehouseId(wOutbound.getWarehouseId());
|
wOutboundRecordIn.setOutboundId(wOutboundInDetail.getOutboundId());
|
wOutboundRecordIn.setDetailId(wOutboundInDetail.getId());
|
wOutboundRecordIn.setLocationId(wOutboundInDetail.getLocationId());
|
wOutboundRecordIn.setQualityType(wOutboundRecord.getQualityType());
|
wOutboundRecordIn.setProcedureId(wOutboundRecord.getProcedureId());
|
wOutboundRecordExtMapper.insert(wOutboundRecordIn);
|
//更新工装器具数据
|
Appliances appliances = appliancesExtMapper.selectById(wOutboundRecordIn.getAppliancesId());
|
if(!Objects.isNull(appliances)){
|
appliances.setCurObjType(Constants.ZERO);
|
appliances.setCurObjId(wOutbound.getId());
|
appliances.setWarehouseId(wOutboundInDetail.getWarehouseId());
|
appliances.setLocationId(wOutboundInDetail.getLocationId());
|
appliancesExtMapper.updateById(appliances);
|
}
|
}
|
QueryWrapper wrapper = new QueryWrapper<WStock>();
|
wrapper.eq("ROOT_DEPART_ID", wOutbound.getRootDepartId());
|
wrapper.eq("MATERIAL_ID", wOutboundInDetail.getMaterialId());
|
wrapper.eq("WAREHOUSE_ID", wOutbound.getWarehouseId());
|
wrapper.eq("QUALITY_TYPE", wOutboundInDetail.getQualityType());
|
if(!Objects.isNull(wOutboundInDetail.getProcedureId())){
|
wrapper.eq("PROCEDURE_ID" , wOutboundInDetail.getProcedureId());
|
}else{
|
wrapper.apply("PROCEDURE_ID is null ");
|
}
|
if(StringUtils.isNotBlank(wOutboundInDetail.getBatch())){
|
wrapper.eq("BATCH" , wOutboundInDetail.getBatch());
|
}else{
|
wrapper.apply("BATCH is null ");
|
}
|
wrapper.eq(!Objects.isNull(wOutboundInDetail.getLocationId())&&warehouse.getUseLocation()==Constants.ONE,"LOCATION_ID", wOutboundInDetail.getLocationId());
|
wrapper.eq("DELETED",0);
|
//更新库存
|
WStock wStock = wStockExtMapper.selectOne(wrapper);
|
if (Objects.isNull(wStock)) {
|
WStock newWStock = new WStock();
|
newWStock.setCreateTime(new Date());
|
newWStock.setCreateUser(loginUserInfo.getId());
|
newWStock.setRootDepartId(wOutboundInDetail.getRootDepartId());
|
newWStock.setMaterialId(wOutboundInDetail.getMaterialId());
|
newWStock.setBatch(wOutboundInDetail.getBatch());
|
newWStock.setDeleted(Constants.ZERO);
|
newWStock.setWarehouseId(warehouse.getId());
|
newWStock.setProcedureId(wOutboundInDetail.getProcedureId());
|
newWStock.setQualityType(wOutboundInDetail.getQualityType());
|
//此仓库 开启仓位
|
if(warehouse.getUseLocation()==Constants.ONE){
|
newWStock.setLocationId(wOutboundInDetail.getLocationId());
|
}
|
newWStock.setUnitId(wOutboundInDetail.getUnitId());
|
newWStock.setNum(wOutboundInDetail.getDoneNum());
|
wStockExtMapper.insert(newWStock);
|
}else{
|
wStock.setNum(wStock.getNum().add(wOutboundInDetail.getDoneNum()));
|
wStockExtMapper.updateById(wStock);
|
}
|
}
|
|
wTransfer.setStatus(Constants.TWO);
|
wTransfer.setInActdate(new Date());
|
wTransferMapper.updateById(wTransfer);
|
|
//记录操作记录 1、转库单 2、出入库单
|
WHistory wHistoryTransfer = wTransfer.toWHistory(loginUserInfo);
|
wHistoryMapper.insert(wHistoryTransfer);
|
WHistory wHistory = wOutbound.toWHistory(loginUserInfo.getId());
|
wHistoryMapper.insert(wHistory);
|
|
noticesExtService.dealNotice(wTransfer.getId(),Constants.Notices_Type_Transfer.checkEnum(wTransfer.getType()).getNoticeInType(),null);
|
|
return ApiResponse.success("备料成功");
|
}
|
|
|
/**
|
* 转库单 进行出入库操作
|
* @param id 转库单主键
|
* @param wTransferType 转库单类别 0:转出操作;1:转入操作
|
* @param optType 操作类别:1 添加 2 移除
|
* @param jsonBean 添加移除 扫描条码类
|
* @return
|
*/
|
@Override
|
@Transactional
|
public WTransferRedisBean wTransferForInOut(Integer id, Integer wTransferType ,Integer optType, String jsonBean){
|
WTransferRedisBean wTransferRedisBean = new WTransferRedisBean();
|
WTransfer wTransfer = wTransferExtMapper.wTransferById(id);
|
if(Objects.isNull(wTransfer)){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "未查询到转库单对象信息");
|
}
|
if(!StringUtils.equals(wTransfer.getStatus().toString(),wTransferType.toString())){
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "转库单数据状态错误");
|
}
|
//获取明细所有仓库信息(分组)
|
List<WTransferWarehouse> wTransferWarehouses = new ArrayList<>();
|
if(wTransferType == Constants.ZERO ){
|
wTransferWarehouses = wTransferDetailExtMapper.wTransferOutWarehouseListById(id);
|
}else{
|
wTransferWarehouses = wTransferDetailExtMapper.wTransferInWarehouseListById(id);
|
}
|
if(Objects.isNull(wTransferWarehouses)||wTransferWarehouses.size()==Constants.ZERO){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到仓库信息");
|
}
|
//获取明细所有物料信息
|
List<WTransferDetail> wTransferDetailList = wTransferDetailExtMapper.wTransferDetailListById(id);
|
for (int i = 0; i < wTransferDetailList.size(); i++) {
|
WTransferDetail wTransferDetail = wTransferDetailList.get(i);
|
if(wTransferType == Constants.ONE&&wTransferDetail.getOutActnum().compareTo(BigDecimal.ZERO)==Constants.ZERO){
|
wTransferDetailList.remove(i);
|
}
|
if(wTransferType == Constants.ZERO&&wTransferDetail.getOutPlannum().compareTo(BigDecimal.ZERO)==Constants.ZERO){
|
wTransferDetailList.remove(i);
|
}
|
}
|
if(Objects.isNull(wTransferDetailList)||wTransferDetailList.size()==Constants.ZERO){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到仓库下物料信息");
|
}
|
for (WTransferDetail wTransferDetail:wTransferDetailList ) {
|
QueryWStockDto queryWStockDto = new QueryWStockDto();
|
queryWStockDto.setRootDepartId(wTransferDetail.getRootDepartId());
|
queryWStockDto.setMaterialId(wTransferDetail.getMaterialId());
|
queryWStockDto.setWarehouseId(wTransferDetail.getOutWarehouseId());
|
queryWStockDto.setUnitId(wTransferDetail.getUnitId());
|
queryWStockDto.setBatch(wTransferDetail.getBatch());
|
queryWStockDto.setQualityType(wTransferDetail.getQualityType());
|
if(!Objects.isNull(wTransferDetail.getProcedureId())){
|
queryWStockDto.setProcedureId(wTransferDetail.getProcedureId());
|
}
|
//获取仓库信息 根据
|
Warehouse warehouse = warehouseMapper.selectById(wTransferDetail.getOutWarehouseId());
|
if(Objects.isNull(warehouse)){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "未查询到仓库信息");
|
}else{
|
if(Constants.ZERO == warehouse.getUseLocation()){
|
wTransferDetail.setWStockExtListVOList(wStockExtMapper.choiceStockListNoLocation(queryWStockDto));
|
}else{
|
wTransferDetail.setWStockExtListVOList(wStockExtMapper.choiceStockList(queryWStockDto));
|
}
|
}
|
}
|
|
//TODO 根据主键查询redis 整理返回数据
|
List<WTransferRedisCodeBean> wTransferRedisCodeBeanList = new ArrayList<>();
|
String jsonArray = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_WOUTBOUND_WTRANSFER_KEY+wTransfer.getId(),String.class);
|
List<WTransferRedisCodeBean> redisWTransferRedisCodeBeanList = JSON.parseArray(jsonArray,WTransferRedisCodeBean.class);
|
|
if(!Objects.isNull(redisWTransferRedisCodeBeanList)&&redisWTransferRedisCodeBeanList.size()>Constants.ZERO){
|
//TODO 特殊处理 批次为null redis 转义后 变为“”
|
for (WTransferRedisCodeBean wTransferRedisCodeBean:redisWTransferRedisCodeBeanList) {
|
if(StringUtils.isEmpty(wTransferRedisCodeBean.getBatch())){
|
wTransferRedisCodeBean.setBatch(null);
|
}
|
//TODO redis 自动转换 null = > 0
|
if(wTransferRedisCodeBean.getProcedureId()==0){
|
wTransferRedisCodeBean.setProcedureId(null);
|
}
|
}
|
wTransferRedisCodeBeanList.addAll(redisWTransferRedisCodeBeanList);
|
}
|
if(!Objects.isNull(optType)&&StringUtils.isNotBlank(jsonBean)){
|
WTransferRedisCodeBean codeBean = JSON.parseObject(jsonBean,WTransferRedisCodeBean.class);
|
if(StringUtils.isEmpty(codeBean.getBatch())){
|
codeBean.setBatch(null);
|
}
|
if(Objects.isNull(codeBean.getProcedureId())){
|
codeBean.setProcedureId(null);
|
}
|
if(wTransferType == Constants.ZERO && optType==Constants.ONE){
|
if(workorderRecordExtMapper.checkIsWork(codeBean.getAppliancesId().toString()).size()>Constants.ZERO){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "当前篮筐处于投料中");
|
};
|
}
|
this.updateRedisCode(wTransferRedisCodeBeanList,optType,codeBean,wTransferType);
|
}
|
wTransferRedisBean.setWTransferRedisCodeBeanList(wTransferRedisCodeBeanList);
|
for (WTransferWarehouse wTransferWarehouse:wTransferWarehouses) {
|
List<WTransferDetail> detail = new ArrayList<>();
|
for (WTransferDetail wTransferDetail:wTransferDetailList ) {
|
Integer warehouseId = wTransferType==Constants.ZERO?wTransferDetail.getOutWarehouseId():wTransferDetail.getInWarehouseId();
|
if(StringUtils.equals(wTransferWarehouse.getWarehouseId().toString(),warehouseId.toString())){
|
detail.add(wTransferDetail);
|
}
|
}
|
wTransferWarehouse.setWTransferDetailList(detail);
|
if(!Objects.isNull(wTransferType)){
|
//TODO 整理出入库数据
|
this.handleWTransferOutCode(wTransferWarehouse,wTransferRedisCodeBeanList,wTransferType);
|
}
|
}
|
wTransferRedisBean.setWTransferWarehouseList(wTransferWarehouses);
|
if(!Objects.isNull(optType)){
|
//TODO 更新至 Redis
|
RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_WOUTBOUND_WTRANSFER_KEY+wTransfer.getId(),JSONArray.fromObject(wTransferRedisCodeBeanList).toString());
|
}
|
wTransferRedisBean.setWTransfer(wTransfer);
|
return wTransferRedisBean;
|
}
|
|
|
@Override
|
@Transactional
|
public void dealScrapApply(Backorder backorder,CompanyExtListVO com){
|
// LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
|
WTransfer wTransfer = backorder.toWTransfer();
|
wTransfer.setCreateUser(backorder.getCreateUser());
|
wTransfer.setCode(this.getNextCode(backorder.getOrderDepartId()));
|
Warehouse outWarehouse = warehouseMapper.selectById(backorder.getWarehouseOutId());
|
if(Objects.isNull(outWarehouse)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转出仓库对象信息");
|
}
|
wTransfer.setOutDepartId(outWarehouse.getDepartId());
|
wTransfer.setOutUserId(outWarehouse.getManagerId());
|
Warehouse inWarehouse = warehouseMapper.selectById(backorder.getWarehouseId());
|
if(Objects.isNull(inWarehouse)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转入仓库对象信息");
|
}
|
wTransfer.setInDepartId(inWarehouse.getDepartId());
|
wTransfer.setInUserId(inWarehouse.getManagerId());
|
wTransfer.setBackorderId(backorder.getId());
|
wTransferMapper.insert(wTransfer);
|
List<WTransferDetail> wTransferDetailList = wTransferDetailExtMapper.wTransferDetailListByBackOrderId(backorder.getId());
|
if(Objects.isNull(wTransferDetailList)||wTransferDetailList.size()<=0){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转仓明细行信息");
|
}
|
for (WTransferDetail w:wTransferDetailList ) {
|
w.setCreateTime(new Date());
|
w.setCreateUser(backorder.getCreateUser());
|
w.setRootDepartId(wTransfer.getRootDepartId());
|
w.setTransferId(wTransfer.getId());
|
w.setOutPlannum(w.getOutPlannum());
|
w.setOutDepartId(wTransfer.getOutDepartId());
|
w.setOutWarehouseId(wTransfer.getOutWarehouseId());
|
w.setOutActdate(new Date());
|
w.setInWarehouseId(wTransfer.getInWarehouseId());
|
w.setInDepartId(wTransfer.getInDepartId());
|
w.setInActdate(new Date());
|
w.setProcedureId(backorder.getProcedureId());
|
wTransferDetailMapper.insert(w);
|
}
|
CompanyUser companyUser = companyUserMapper.selectOne(new QueryWrapper<CompanyUser>()
|
.eq("USER_ID",wTransfer.getOutUserId())
|
.eq("DELETED",0)
|
.eq("ROOT_DEPART_ID",wTransfer.getRootDepartId())
|
);
|
if(Objects.isNull(companyUser)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到出库仓管员信息【"+wTransfer.getOutUserId()+"】");
|
}
|
Constants.Notices_Type_Transfer notices_type_transfer = Constants.Notices_Type_Transfer.checkEnum(wTransfer.getType());
|
if(Objects.isNull(notices_type_transfer)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转库单类型信息【"+wTransfer.getType()+"】");
|
}
|
LoginUserInfo user = new LoginUserInfo();
|
user.setRootDepartment(new DepartmentExtListVO());
|
user.getRootDepartment().setId(backorder.getRootDepartId());
|
user.setCurComDepartment(new DepartmentExtListVO());
|
user.getCurComDepartment().setId(backorder.getOrderDepartId());
|
user.setId(backorder.getCreateUser());
|
user.setCompany(com);
|
|
//发送通知
|
this.sendOutNotice(user,companyUser.getId(),wTransfer.getId(),wTransfer.getCode(),notices_type_transfer,Constants.getNoticeUrl(user.getCompany(),Constants.DINGDING_NOTICE_URL.woutOut));
|
}
|
|
|
|
|
|
@Override
|
@Transactional
|
public void wTransferForInOutUpload(Integer id, Integer wTransferType,LoginUserInfo loginUserInfo){
|
WTransferRedisBean wTransferRedisBean = new WTransferRedisBean();
|
WTransfer wTransfer = wTransferExtMapper.wTransferById(id);
|
if(Objects.isNull(wTransfer)){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "未查询到转库单对象信息");
|
}
|
if(!StringUtils.equals(wTransfer.getStatus().toString(),wTransferType.toString())){
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "转库单数据状态错误");
|
}
|
//获取明细所有仓库信息(分组)
|
List<WTransferWarehouse> wTransferWarehouses = new ArrayList<>();
|
if(wTransferType == Constants.ZERO ){
|
wTransferWarehouses = wTransferDetailExtMapper.wTransferOutWarehouseListById(id);
|
}else{
|
wTransferWarehouses = wTransferDetailExtMapper.wTransferInWarehouseListById(id);
|
}
|
if(Objects.isNull(wTransferWarehouses)||wTransferWarehouses.size()==Constants.ZERO){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到仓库信息");
|
}
|
//获取明细所有物料信息
|
List<WTransferDetail> wTransferDetailList = wTransferDetailExtMapper.wTransferDetailListById(id);
|
if(Objects.isNull(wTransferDetailList)||wTransferDetailList.size()==Constants.ZERO){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到仓库下物料信息");
|
}
|
//TODO 根据主键查询redis 整理返回数据
|
List<WTransferRedisCodeBean> wTransferRedisCodeBeanList = new ArrayList<>();
|
String jsonArray = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_WOUTBOUND_WTRANSFER_KEY+wTransfer.getId(),String.class);
|
List<WTransferRedisCodeBean> redisWTransferRedisCodeBeanList = JSON.parseArray(jsonArray,WTransferRedisCodeBean.class);
|
|
if(Objects.isNull(redisWTransferRedisCodeBeanList)||redisWTransferRedisCodeBeanList.size()==Constants.ZERO){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "Redis未读取到操作数据");
|
}
|
|
//2022年9月26日11:23:29 加入 验证所有篮筐必须处于未投料状态
|
if(wTransferType==Constants.ZERO){
|
List<String> idList = redisWTransferRedisCodeBeanList.stream().map(x -> x.getAppliancesId().toString()).collect(Collectors.toList());
|
String ids = StringUtils.join(idList.toArray(), ",");
|
List<WorkorderRecordExtListVO> workorderRecordExtListVOList = workorderRecordExtMapper.checkIsWork(ids);
|
if(workorderRecordExtListVOList.size()>Constants.ZERO){
|
List<String> useIdList = workorderRecordExtListVOList.stream().map(x -> x.getAppliancesId().toString()).collect(Collectors.toList());
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(),"【" + StringUtils.join(useIdList.toArray(), ",") + "】篮筐处于投料中");
|
}
|
|
// 所有篮筐必须与出库单据仓库一致
|
redisWTransferRedisCodeBeanList.forEach(i->{
|
WTransferDetail wTransferDetail = wTransferDetailExtMapper.selectById(i.getWTransferDetailId());
|
Appliances appliances = appliancesExtMapper.selectById(i.getAppliancesId());
|
if(Objects.isNull(appliances.getWarehouseId())){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(),"【" + i.getScanCode() + "】篮筐归属仓库信息错误");
|
}
|
|
if(!Objects.equals(appliances.getWarehouseId().toString(),wTransferDetail.getOutWarehouseId().toString())){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(),"【" + i.getScanCode() + "】篮筐归属仓库信息错误");
|
}
|
});
|
}else{
|
//入库的篮筐不能有仓库信息
|
redisWTransferRedisCodeBeanList.forEach(i->{
|
Appliances appliances = appliancesExtMapper.selectById(i.getAppliancesId());
|
if(!Objects.isNull(appliances.getWarehouseId())||!Objects.isNull(appliances.getLocationId())){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(),"【" + i.getScanCode() + "】篮筐存在归属仓库信息");
|
}
|
});
|
}
|
|
//限制入库数据数量 必须等于已出库数量
|
if(wTransferType==Constants.ONE){
|
List<WTransferDetail> detailList = wTransferDetailMapper.selectList(new QueryWrapper<WTransferDetail>().eq("TRANSFER_ID",id));
|
for (WTransferDetail wTransferDetail:detailList) {
|
BigDecimal scanNum = BigDecimal.ZERO;
|
for (WTransferRedisCodeBean wTransferRedisCodeBean:redisWTransferRedisCodeBeanList) {
|
if(Objects.equals(wTransferRedisCodeBean.getWTransferDetailId(),wTransferDetail.getId())){
|
scanNum = scanNum.add(wTransferRedisCodeBean.getNum());
|
}
|
}
|
if(wTransferDetail.getOutActnum().compareTo(scanNum)!=Constants.ZERO){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "入库数量应与待入库数量相同");
|
}
|
}
|
}
|
|
if(!Objects.isNull(redisWTransferRedisCodeBeanList)&&redisWTransferRedisCodeBeanList.size()>Constants.ZERO){
|
//TODO 特殊处理 批次为null redis 转义后 变为“”
|
for (WTransferRedisCodeBean wTransferRedisCodeBean:redisWTransferRedisCodeBeanList) {
|
if(StringUtils.isEmpty(wTransferRedisCodeBean.getBatch())){
|
wTransferRedisCodeBean.setBatch(null);
|
}
|
//TODO redis 自动转换 null = > 0
|
if(wTransferRedisCodeBean.getProcedureId()==0){
|
wTransferRedisCodeBean.setProcedureId(null);
|
}
|
}
|
wTransferRedisCodeBeanList.addAll(redisWTransferRedisCodeBeanList);
|
}
|
|
wTransferRedisBean.setWTransferRedisCodeBeanList(wTransferRedisCodeBeanList);
|
for (WTransferWarehouse wTransferWarehouse:wTransferWarehouses) {
|
List<WTransferDetail> detail = new ArrayList<>();
|
for (WTransferDetail wTransferDetail:wTransferDetailList ) {
|
if(StringUtils.equals(wTransferWarehouse.getWarehouseId().toString(),wTransferDetail.getInWarehouseId().toString())){
|
detail.add(wTransferDetail);
|
}
|
}
|
if(!Objects.isNull(wTransferType)){
|
//TODO 整理出入库数据
|
this.handleWTransferOutCode(wTransferWarehouse,wTransferRedisCodeBeanList,wTransferType);
|
}
|
}
|
wTransferRedisBean.setWTransferWarehouseList(wTransferWarehouses);
|
|
|
|
this.uploadWTransfer(wTransfer,wTransferRedisBean,wTransferType,loginUserInfo);
|
}
|
|
@Transactional
|
public void handleWTransferOutCode(WTransferWarehouse wTransferWarehouse , List<WTransferRedisCodeBean> wTransferRedisCodeBeanList,Integer wTransferType){
|
//TODO 获取当前仓库下所有出库条码
|
List<WTransferRedisCodeBean> warehouseCode = new ArrayList<>();
|
for (WTransferRedisCodeBean wTransferRedisCodeBean:wTransferRedisCodeBeanList) {
|
if(StringUtils.equals(wTransferWarehouse.getWarehouseId().toString(),wTransferRedisCodeBean.getWarehouseId().toString())){
|
warehouseCode.add(wTransferRedisCodeBean);
|
}
|
}
|
//TODO 整理当前仓库下所有出库的物料数据 根据条码数据添加
|
wTransferWarehouse.setWtScanMaterialBeanList(this.handleWtScanMaterial(warehouseCode,wTransferType));
|
}
|
|
|
|
@Transactional
|
public List<WtScanMaterialBean> handleWtScanMaterial(List<WTransferRedisCodeBean> warehouseCode,Integer wTransferType){
|
List<WtScanMaterialBean> wtScanMaterialBeanList = new ArrayList<>();
|
//TODO 获取仓库下已扫描物料类别
|
for (WTransferRedisCodeBean wTransferRedisCodeBean:warehouseCode) {
|
if(wtScanMaterialBeanList.size()==Constants.ZERO || !isRepeatMaterialData(wTransferRedisCodeBean,wtScanMaterialBeanList)){
|
wtScanMaterialBeanList.add(wTransferRedisCodeBean.toWtScanMaterialBean());
|
}
|
}
|
//TODO 已扫描物料数据 绑定已扫描条码 更新已扫描数量
|
for (WtScanMaterialBean wtScanMaterialBean:wtScanMaterialBeanList) {
|
BigDecimal scanNum = BigDecimal.ZERO;
|
List<WTransferRedisCodeBean> wTransferRedisCodeBeanList = new ArrayList<>();
|
for (WTransferRedisCodeBean wTransferRedisCodeBean:warehouseCode) {
|
if(StringUtils.equals(wtScanMaterialBean.getWTransferDetailId().toString(),wTransferRedisCodeBean.getWTransferDetailId().toString())
|
&&StringUtils.equals(wtScanMaterialBean.getMaterialId().toString(),wTransferRedisCodeBean.getMaterialId().toString())
|
&& StringUtils.equals(wtScanMaterialBean.getLocationId().toString(),wTransferRedisCodeBean.getLocationId().toString())
|
&& wtScanMaterialBean.getQualityType().intValue() == wTransferRedisCodeBean.getQualityType().intValue()
|
){
|
//&& StringUtils.equals(wtScanMaterialBean.getBatch(),wTransferRedisCodeBean.getBatch())){
|
//TODO 判断工序是否都不为空
|
if(!Objects.isNull(wtScanMaterialBean.getProcedureId())&&!Objects.isNull(wTransferRedisCodeBean.getProcedureId())){
|
if(wtScanMaterialBean.getProcedureId() != wTransferRedisCodeBean.getProcedureId()){
|
continue;
|
}
|
}else if(Objects.isNull(wtScanMaterialBean.getProcedureId())&&!Objects.isNull(wTransferRedisCodeBean.getProcedureId())){
|
continue;
|
}else if(!Objects.isNull(wtScanMaterialBean.getProcedureId())&&Objects.isNull(wTransferRedisCodeBean.getProcedureId())){
|
continue;
|
}
|
//TODO 若批次为 null /“” 则不验证批次,否则验证
|
if(StringUtils.isNotEmpty(wtScanMaterialBean.getBatch())){
|
if(StringUtils.equals(wtScanMaterialBean.getBatch(),wTransferRedisCodeBean.getBatch())) {
|
wTransferRedisCodeBeanList.add(wTransferRedisCodeBean);
|
scanNum = scanNum.add(wTransferRedisCodeBean.getNum());
|
}
|
}else{
|
wTransferRedisCodeBeanList.add(wTransferRedisCodeBean);
|
scanNum = scanNum.add(wTransferRedisCodeBean.getNum());
|
}
|
|
}
|
}
|
WTransferDetail wTransferDetail = wTransferDetailExtMapper.selectById(wtScanMaterialBean.getWTransferDetailId());
|
if(wTransferType==Constants.ZERO&&scanNum.compareTo(wTransferDetail.getOutPlannum())>Constants.ZERO){
|
throw new BusinessException(ResponseStatus.EXCEED_PLAN_NUM.getCode(), "超出计划数量,扫描失败");
|
}else if(wTransferType==Constants.ONE&&scanNum.compareTo(wTransferDetail.getOutActnum())>Constants.ZERO){
|
throw new BusinessException(ResponseStatus.EXCEED_PLAN_NUM.getCode(), "超出计划数量,扫描失败");
|
}
|
wtScanMaterialBean.setScanNum(scanNum);
|
wtScanMaterialBean.setWTransferRedisCodeBeanList(wTransferRedisCodeBeanList);
|
}
|
return wtScanMaterialBeanList;
|
}
|
private boolean isRepeatMaterialData(WTransferRedisCodeBean wTransferRedisCodeBean, List<WtScanMaterialBean> wtScanMaterialBeanList) {
|
|
//TODO 物料/批次/货位是否相同 相同则跳过,否则加入数据
|
for (WtScanMaterialBean wtScanMaterialBean:wtScanMaterialBeanList) {
|
if(StringUtils.equals(wtScanMaterialBean.getWTransferDetailId().toString(),wTransferRedisCodeBean.getWTransferDetailId().toString())
|
&&StringUtils.equals(wtScanMaterialBean.getMaterialId().toString(),wTransferRedisCodeBean.getMaterialId().toString())
|
&& StringUtils.equals(wtScanMaterialBean.getLocationId().toString(),wTransferRedisCodeBean.getLocationId().toString())
|
&& wtScanMaterialBean.getQualityType().intValue() == wTransferRedisCodeBean.getQualityType().intValue()
|
) {
|
// 物料/批次/货位相同
|
//TODO 判断工序是否都不为空
|
//TODO 若批次为 null /“” 则不验证批次,否则验证
|
if(StringUtils.isNotEmpty(wtScanMaterialBean.getBatch())&&!StringUtils.equals(wtScanMaterialBean.getBatch(),wTransferRedisCodeBean.getBatch())){
|
return false;
|
}else if(StringUtils.isEmpty(wtScanMaterialBean.getBatch()) && StringUtils.isNotEmpty(wTransferRedisCodeBean.getBatch()) ){
|
return false;
|
}else if(StringUtils.isNotEmpty(wtScanMaterialBean.getBatch()) && StringUtils.isEmpty(wTransferRedisCodeBean.getBatch()) ){
|
return false;
|
}
|
//TODO 判断工序是否都不为空
|
if(!Objects.isNull(wtScanMaterialBean.getProcedureId())&&!Objects.isNull(wTransferRedisCodeBean.getProcedureId())&&!Constants.equalsInteger(wtScanMaterialBean.getProcedureId(),wTransferRedisCodeBean.getProcedureId())){
|
return false;
|
}else if(Objects.isNull(wtScanMaterialBean.getProcedureId())&&!Objects.isNull(wTransferRedisCodeBean.getProcedureId())){
|
return false;
|
}else if(!Objects.isNull(wtScanMaterialBean.getProcedureId())&&Objects.isNull(wTransferRedisCodeBean.getProcedureId())){
|
return false;
|
}
|
|
return true;
|
}
|
}
|
return false;
|
}
|
|
/**
|
* 更新条码列表
|
* @param wTransferRedisCodeBeanList 所有条码列表
|
* @param optType 1:添加;2:删除
|
* @param codeBean 工装器具
|
*/
|
@Transactional
|
public void updateRedisCode(List<WTransferRedisCodeBean> wTransferRedisCodeBeanList,Integer optType,WTransferRedisCodeBean codeBean,Integer wTransferType){
|
if(Objects.isNull(optType)&&optType!=Constants.ONE&&optType!=Constants.TWO){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "更新操作类别异常");
|
}else if(optType==Constants.ONE){
|
//TODO 校验 工装器具数据是否已扫描
|
for (WTransferRedisCodeBean wTransferRedisCodeBean:wTransferRedisCodeBeanList) {
|
if(StringUtils.equals(wTransferRedisCodeBean.getAppliancesId().toString(),codeBean.getAppliancesId().toString())){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "工装器具数据已扫描,无法重复扫描");
|
}
|
}
|
//TODO 判断条码是是否在当前转库单中
|
WTransferDetail wTransferDetail = wTransferDetailExtMapper.selectById(codeBean.getWTransferDetailId());
|
Integer warehouseId = wTransferType==Constants.ZERO?wTransferDetail.getOutWarehouseId():wTransferDetail.getInWarehouseId();
|
|
//2022-9-14 13:41:33 处理 添加验证篮筐属性与仓库属性
|
Warehouse warehouse = warehouseMapper.selectById(warehouseId);
|
//获取仓库属性 判断扫描篮筐数据属性
|
SystemDictData systemDictData = systemDictDataMapper.selectById(warehouse.getSystemDicDataId());
|
if(Objects.isNull(systemDictData)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到仓库类型数据");
|
}
|
// 0合格 1不良 2报废 ;
|
Integer wareHouseQualityType = 3 ;
|
if(systemDictData.getLabel().equals(Constants.APPLIANCES_TYPE_LABLE.qualified)){
|
wareHouseQualityType = 0 ;
|
}else if(systemDictData.getLabel().equals(Constants.APPLIANCES_TYPE_LABLE.rejects)){
|
wareHouseQualityType = 1 ;
|
}else if(systemDictData.getLabel().equals(Constants.APPLIANCES_TYPE_LABLE.scrap)){
|
wareHouseQualityType = 2 ;
|
}
|
if(wareHouseQualityType != 3){
|
if(codeBean.getQualityType()!=wareHouseQualityType){
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "篮筐质量属性与仓库属性不一致");
|
}
|
}
|
|
if(StringUtils.equals(wTransferDetail.getMaterialId().toString(),codeBean.getMaterialId().toString())
|
&&StringUtils.equals(warehouseId.toString(),codeBean.getWarehouseId().toString())
|
&&wTransferDetail.getQualityType().intValue() == codeBean.getQualityType().intValue()
|
){
|
if(!Objects.isNull(wTransferDetail.getProcedureId())&&!Objects.isNull( codeBean.getProcedureId())){
|
if(!wTransferDetail.getProcedureId().equals(codeBean.getProcedureId())){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "添加条码数据工序数据不匹配");
|
}
|
}else if(Objects.isNull(wTransferDetail.getProcedureId())&&!Objects.isNull( codeBean.getProcedureId())){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "添加条码数据工序数据不匹配");
|
}else if(!Objects.isNull(wTransferDetail.getProcedureId())&&Objects.isNull( codeBean.getProcedureId())){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "添加条码数据工序数据不匹配");
|
}
|
if(StringUtils.isNotBlank(wTransferDetail.getBatch())){
|
if(!wTransferDetail.getBatch().equals(codeBean.getBatch())){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "添加条码数据批次不匹配");
|
}
|
}
|
if(wTransferType==Constants.ZERO){
|
if(!Objects.isNull(wTransferDetail.getOutLocationId())){
|
if(wTransferDetail.getOutLocationId()!= codeBean.getLocationId()){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "添加条码数据货位不匹配");
|
}
|
}
|
}else if(wTransferType==Constants.ONE){
|
if(!Objects.isNull(wTransferDetail.getInLcoationId())){
|
if(wTransferDetail.getInLcoationId()!= codeBean.getLocationId()){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "添加条码数据货位不匹配");
|
}
|
}
|
}
|
|
}else{
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "添加条码数据不匹配");
|
}
|
|
wTransferRedisCodeBeanList.add(codeBean);
|
}else if(optType==Constants.TWO){
|
//TODO 是否在当前单据数据内
|
Boolean isHave = true;
|
for (WTransferRedisCodeBean wTransferRedisCodeBean:wTransferRedisCodeBeanList) {
|
if (StringUtils.equals(wTransferRedisCodeBean.getAppliancesId().toString(), codeBean.getAppliancesId().toString())) {
|
wTransferRedisCodeBeanList.remove(wTransferRedisCodeBean);
|
isHave = false;
|
break;
|
}
|
}
|
if(isHave){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "扫描条码未存在当前单据内");
|
}
|
}
|
}
|
|
|
/**
|
* 创建WOutbound数据
|
* @param wTransferRedisBean
|
* @param wTransferType
|
*/
|
@Transactional
|
public void uploadWTransfer(WTransfer wTransfer,WTransferRedisBean wTransferRedisBean,Integer wTransferType, LoginUserInfo loginUserInfo){
|
List<WTransferWarehouse> wTransferWarehouseList = wTransferRedisBean.getWTransferWarehouseList();
|
for (WTransferWarehouse wTransferWarehouse:wTransferWarehouseList) {
|
Warehouse warehouse = warehouseMapper.selectById(wTransferWarehouse.getWarehouseId());
|
List<WtScanMaterialBean> wtScanMaterialBeanList = wTransferWarehouse.getWtScanMaterialBeanList();
|
if(Objects.isNull(wtScanMaterialBeanList)||wtScanMaterialBeanList.size()==Constants.ZERO){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(),"仓库:【" + warehouse.getName() + "】未扫描数据");
|
}
|
// TODO 根据转库单 单头 创建数据
|
WOutbound wOutbound = wTransfer.toWOutbound(wTransferType);
|
if(Objects.isNull(warehouse)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到生成仓库信息数据");
|
}
|
wOutbound.setRootDepartId(warehouse.getRootDepartId());
|
wOutbound.setDepartId(warehouse.getDepartId());
|
wOutbound.setUserId(warehouse.getManagerId());
|
wOutbound.setWarehouseId(warehouse.getId());
|
wOutbound.setCode(
|
wTransferType==Constants.ZERO
|
?wOutboundService.getNextOutCode(loginUserInfo.getCompany().getId())
|
:wOutboundService.getNextInCode(loginUserInfo.getCompany().getId()) );
|
wOutboundMapper.insert(wOutbound);
|
for (WtScanMaterialBean wtScanMaterialBean:wtScanMaterialBeanList) {
|
WOutboundDetail wOutboundDetail = new WOutboundDetail();
|
wOutboundDetail.setDeleted(Constants.ZERO);
|
wOutboundDetail.setCreateUser(loginUserInfo.getId());
|
wOutboundDetail.setCreateTime(new Date());
|
wOutboundDetail.setOutboundId(wOutbound.getId());
|
wOutboundDetail.setMaterialId(wtScanMaterialBean.getMaterialId());
|
wOutboundDetail.setUnitId(wtScanMaterialBean.getUnitId());
|
wOutboundDetail.setBatch(wtScanMaterialBean.getBatch());
|
wOutboundDetail.setWarehouseId(wOutbound.getWarehouseId());
|
wOutboundDetail.setLocationId(wtScanMaterialBean.getLocationId());
|
wOutboundDetail.setNum(wtScanMaterialBean.getScanNum());
|
wOutboundDetail.setDoneNum(wtScanMaterialBean.getScanNum());
|
wOutboundDetail.setDoneDate(new Date());
|
wOutboundDetail.setStatus(Constants.ONE);
|
wOutboundDetail.setQualityType(wtScanMaterialBean.getQualityType());
|
wOutboundDetail.setProcedureId(wtScanMaterialBean.getProcedureId());
|
wOutboundDetail.setRootDepartId(wOutbound.getRootDepartId());
|
wOutboundDetailMapper.insert(wOutboundDetail);
|
|
|
//记录库存变动记录
|
wStockRecordExtService.saveRecord(wTransferType,wOutboundDetail.getId(),loginUserInfo);
|
//TODO 更新篮筐数据
|
this.updateAppliances(wtScanMaterialBean.getWTransferRedisCodeBeanList(),wOutbound,wOutboundDetail,loginUserInfo);
|
//TODO 更新库存
|
this.updateStock(wOutbound,wOutboundDetail,warehouse,loginUserInfo);
|
|
// //TODO 更新转库单数据
|
// WTransferDetail wTransferDetail = wTransferDetailMapper.selectById(wtScanMaterialBean.getWTransferDetailId());
|
// if(wTransferType == Constants.ZERO){
|
// wTransferDetail.setOutActdate(new Date());
|
// wTransferDetail.setOutActnum(wtScanMaterialBean.getScanNum());
|
// }else{
|
// wTransferDetail.setInActdate(new Date());
|
// wTransferDetail.setInActnum(wtScanMaterialBean.getScanNum());
|
// }
|
// wTransferDetailMapper.updateById(wTransferDetail);
|
}
|
//更新转库单数据
|
Map<String, List<WtScanMaterialBean>> wTScanMaterialBeanMap = wtScanMaterialBeanList.stream()
|
.collect(Collectors.groupingBy(i -> i.getWTransferDetailId().toString()));
|
Iterator<String> iter = wTScanMaterialBeanMap.keySet().iterator();
|
while(iter.hasNext()) {
|
String key = iter.next();
|
//获取当前行处理数据
|
List<WtScanMaterialBean> wtScanMaterialBeans = wTScanMaterialBeanMap.get(key);
|
WTransferDetail wTransferDetail = wTransferDetailMapper.selectById(wtScanMaterialBeans.get(Constants.ZERO).getWTransferDetailId());
|
if(wTransferType == Constants.ZERO){
|
wTransferDetail.setOutActdate(new Date());
|
wTransferDetail.setOutActnum(wtScanMaterialBeans.stream().map(s -> s.getScanNum()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
}else{
|
wTransferDetail.setInActdate(new Date());
|
wTransferDetail.setInActnum(wtScanMaterialBeans.stream().map(s -> s.getScanNum()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
}
|
wTransferDetailMapper.updateById(wTransferDetail);
|
}
|
|
//TODO 发送钉钉通知
|
CompanyUser companyUser = companyUserMapper.selectOne(new QueryWrapper<CompanyUser>()
|
.eq("USER_ID",wTransfer.getInUserId())
|
.eq("ROOT_DEPART_ID",wTransfer.getRootDepartId())
|
.eq("DELETED",0)
|
);
|
//出入库单操作记录
|
WHistory wHistory = wOutbound.toWHistory(loginUserInfo.getId());
|
wHistoryMapper.insert(wHistory);
|
//处理通知
|
Constants.Notices_Type_Transfer notices_type_transfer = Constants.Notices_Type_Transfer.checkEnum(wTransfer.getType());
|
if(Objects.isNull(notices_type_transfer)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转库单类型信息【"+wTransfer.getType()+"】");
|
}
|
if(wTransferType == Constants.ZERO){
|
noticesExtService.dealNotice(wTransfer.getId(),notices_type_transfer.getNoticeOutType(),null);
|
String url = Constants.getNoticeUrl(loginUserInfo.getCompany(),Constants.DINGDING_NOTICE_URL.in);
|
if(notices_type_transfer.getType() == 3){
|
url =Constants.getNoticeUrl(loginUserInfo.getCompany(),Constants.DINGDING_NOTICE_URL.finish);
|
}
|
sendInNotice(companyUser.getId(),wTransfer.getId(),wTransfer.getCode(),notices_type_transfer,url);
|
}else{
|
noticesExtService.dealNotice(wTransfer.getId(),notices_type_transfer.getNoticeInType(),null);
|
}
|
}
|
//TODO 更新转库单状态
|
if(wTransferType == Constants.ZERO){
|
wTransfer.setStatus(Constants.ONE);
|
wTransfer.setOutActdate(new Date());
|
}else{
|
wTransfer.setStatus(Constants.TWO);
|
wTransfer.setInActdate(new Date());
|
}
|
wTransferMapper.updateById(wTransfer);
|
//转库单操作记录
|
WHistory wHistoryTransfer = wTransfer.toWHistory(loginUserInfo);
|
wHistoryMapper.insert(wHistoryTransfer);
|
// TODO 清除redis记录
|
RedisUtil.deleteObject(redisTemplate,Constants.RedisKeys.COM_WOUTBOUND_WTRANSFER_KEY+wTransfer.getId());
|
|
}
|
|
/**
|
* 更新篮筐数据 添加操作记录
|
* @param wTransferRedisCodeBeanList
|
* @param wOutbound
|
* @param wOutboundDetail
|
*/
|
@Transactional
|
public void updateAppliances(List<WTransferRedisCodeBean> wTransferRedisCodeBeanList,WOutbound wOutbound,WOutboundDetail wOutboundDetail,LoginUserInfo loginUserInfo){
|
for (WTransferRedisCodeBean wTransferRedisCodeBean:wTransferRedisCodeBeanList) {
|
Appliances appliances = appliancesMapper.selectById(wTransferRedisCodeBean.getAppliancesId());
|
appliances.setCurObjId(wOutbound.getId());
|
appliances.setCurObjType(Constants.ZERO);
|
if(wOutbound.getType()==Constants.ZERO){
|
if(!Objects.isNull(appliances)){
|
appliances.setWarehouseId(null);
|
appliances.setLocationId(null);
|
}
|
}else if(wOutbound.getType()==Constants.ONE){
|
appliances.setWarehouseId(wOutboundDetail.getWarehouseId());
|
appliances.setLocationId(wOutboundDetail.getLocationId());
|
}
|
appliancesMapper.updateById(appliances);
|
WOutboundRecord wOutboundRecord = wOutboundDetail.toRecord(appliances,loginUserInfo);
|
if(wOutbound.getType()==Constants.ONE){
|
wOutboundRecord.setLocationId(appliances.getLocationId());
|
}
|
wOutboundRecordMapper.insert(wOutboundRecord);
|
}
|
}
|
|
|
/**
|
* 更新库存信息
|
* @param wOutbound
|
* @param wOutboundDetail
|
* @param loginUserInfo
|
*/
|
@Transactional
|
public void updateStock(WOutbound wOutbound,WOutboundDetail wOutboundDetail,Warehouse warehouse,LoginUserInfo loginUserInfo){
|
//TODO 查询库存数据
|
QueryWrapper wrapper = new QueryWrapper<WStock>();
|
wrapper.eq("ROOT_DEPART_ID", wOutbound.getRootDepartId());
|
wrapper.eq("MATERIAL_ID", wOutboundDetail.getMaterialId());
|
wrapper.eq("WAREHOUSE_ID", wOutboundDetail.getWarehouseId());
|
wrapper.eq("QUALITY_TYPE", wOutboundDetail.getQualityType());
|
wrapper.eq(!Objects.isNull(wOutboundDetail.getProcedureId()),"procedure_id",wOutboundDetail.getProcedureId());
|
wrapper.apply(Objects.isNull(wOutboundDetail.getProcedureId())," procedure_id is null ");
|
if(StringUtils.isNotBlank(wOutboundDetail.getBatch())){
|
wrapper.eq("BATCH" , wOutboundDetail.getBatch());
|
}else{
|
wrapper.apply("BATCH is null ");
|
}
|
wrapper.eq(!Objects.isNull(wOutboundDetail.getLocationId())&&warehouse.getUseLocation()==Constants.ONE,"LOCATION_ID", wOutboundDetail.getLocationId());
|
wrapper.eq("DELETED",0);
|
List<WStock> wStockList = wStockMapper.selectList(wrapper);
|
if(wOutbound.getType()==Constants.ZERO){
|
if(Objects.isNull(wStockList)||wStockList.size()==Constants.ZERO){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "库存信息异常:【"+warehouse.getId()+"】 - 【"+wOutboundDetail.getLocationId()+"】 - 【"+wOutboundDetail.getMaterialId()+"】- 【"+wOutboundDetail.getBatch()+"】");
|
}
|
WStock wStock = wStockList.get(0);
|
if (wStock.getNum().compareTo(wOutboundDetail.getNum()) < Constants.ZERO) {
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "当前货位库存数量不足;剩余数量【" + wStock.getNum().toString() + "】;出库数量【" + wOutboundDetail.getNum().toString() + "】");
|
}
|
wStock.setNum(wStock.getNum().subtract(wOutboundDetail.getNum()));
|
wStockMapper.updateById(wStock);
|
}else{
|
if(Objects.isNull(wStockList)||wStockList.size()==Constants.ZERO){
|
WStock newWStock = new WStock();
|
newWStock.setCreateTime(new Date());
|
newWStock.setCreateUser(loginUserInfo.getId());
|
newWStock.setRootDepartId(wOutbound.getRootDepartId());
|
newWStock.setWarehouseId(wOutbound.getWarehouseId());
|
newWStock.setQualityType(wOutboundDetail.getQualityType());
|
if(!Objects.isNull(wOutboundDetail.getProcedureId())){
|
newWStock.setProcedureId(wOutboundDetail.getProcedureId());
|
}
|
//此仓库 开启仓位
|
if(warehouse.getUseLocation()==Constants.ONE){
|
newWStock.setLocationId(wOutboundDetail.getLocationId());
|
}
|
newWStock.setMaterialId(wOutboundDetail.getMaterialId());
|
newWStock.setBatch(wOutboundDetail.getBatch());
|
newWStock.setUnitId(wOutboundDetail.getUnitId());
|
newWStock.setNum(wOutboundDetail.getNum());
|
wStockMapper.insert(newWStock);
|
}else{
|
WStock wStock = wStockList.get(0);
|
wStock.setNum(wStock.getNum().add(wOutboundDetail.getNum()));
|
wStockMapper.updateById(wStock);
|
}
|
}
|
}
|
|
|
|
public void sendNotice(Integer userId ,Integer billId , String billCode ,Constants.Notices_Type notices_type,String constantsUrlConfig){
|
//发送通知
|
Notices notices = new Notices();
|
notices.setCompanyUserId(userId);
|
notices.setType(notices_type.getType());
|
notices.setContent("【"+billCode+"】" + notices_type.getContent());
|
notices.setTitle(notices_type.getTitle());
|
notices.setObjId(billId);
|
notices.setUrl(systemDictDataBiz.queryByCode(Constants.ROUTE_CONFIG,constantsUrlConfig).getCode().replace("{id}",billId.toString()).replace("{type}","9"));
|
noticesExtService.sendNotice(notices);
|
}
|
|
/**
|
* 转库单退回
|
* @param id
|
* @param loginUserInfo
|
* @return
|
*/
|
@Override
|
@Transactional
|
public ApiResponse wTransferReturn(Integer id,LoginUserInfo loginUserInfo){
|
WTransfer wTransfer = wTransferExtMapper.selectOne(new QueryWrapper<WTransfer>().eq("id",id));
|
if(Objects.isNull(wTransfer)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转库单对象信息");
|
}
|
if(wTransfer.getStatus()!=Constants.ONE){
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "单据状态错误无法进行退回,请检查单据状态");
|
}
|
CompanyUser companyUser = companyUserExtMapper.selectOne(
|
new QueryWrapper<CompanyUser>().eq("USER_ID",wTransfer.getInUserId())
|
.eq("ROOT_DEPART_ID",wTransfer.getRootDepartId())
|
.eq("DELETED",0));
|
if(Objects.isNull(companyUser)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到操作员工信息");
|
}
|
Department department = departmentExtMapper.selectById(companyUser.getDepartmentId());
|
if(Objects.isNull(department)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到操作员工班组信息");
|
}
|
List<WTransferDetail> wTransferDetailList = wTransferDetailMapper.selectList(
|
new QueryWrapper<WTransferDetail>().eq("TRANSFER_ID",wTransfer.getId())
|
);
|
if(wTransferDetailList.size()==Constants.ZERO){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转库单明细信息");
|
}
|
//仓库数据
|
Warehouse warehouse = warehouseMapper.selectById(wTransfer.getOutWarehouseId());
|
if(Objects.isNull(warehouse)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到入库仓库数据");
|
}
|
|
List<WOutbound> wOutboundOutList = wOutboundMapper.selectList(new QueryWrapper<WOutbound>()
|
.eq("ORIGIN_ID",wTransfer.getId())
|
.eq("ORIGIN_TYPE",3)
|
);
|
if(wOutboundOutList.size() == Constants.ZERO){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转库单对应出库单数据!");
|
}else if(wOutboundOutList.size() > Constants.ONE){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "转库单对应出库单数据异常");
|
}
|
WOutbound wOutboundOut = wOutboundOutList.get(Constants.ZERO);
|
//1、由于生成转库单是根据操作人 仓位分组, 所以转库单上只会有一个入库仓库
|
//2、生成入库单单头
|
WOutbound wOutbound = new WOutbound();
|
wOutbound.setCreateUser(loginUserInfo.getId());
|
wOutbound.setCreateTime(new Date());
|
wOutbound.setRootDepartId(loginUserInfo.getRootDepartment().getId());
|
wOutbound.setDepartId(loginUserInfo.getComDepartment().getId());
|
wOutbound.setCode(wOutboundService.getNextInCode(loginUserInfo.getCompany().getId()));//单据编码 RK-20220519-0001
|
wOutbound.setOrigin(Constants.ONE);
|
wOutbound.setValidDate(new Date());
|
wOutbound.setType(Constants.ONE);
|
wOutbound.setOriginType(3);
|
wOutbound.setOriginCode(wTransfer.getCode());
|
wOutbound.setOriginId(wTransfer.getId());
|
wOutbound.setUserId(loginUserInfo.getId());
|
wOutbound.setWarehouseId(wTransfer.getOutWarehouseId());
|
wOutbound.setDealDate(new Date());
|
wOutbound.setStatus(Constants.ONE);
|
wOutbound.setPlanDate(wTransfer.getInPlandate());
|
wOutbound.setBillType(29);
|
wOutboundExtMapper.insert(wOutbound);
|
|
List<WOutboundRecord> wOutboundDetailOutList = wOutboundRecordMapper.selectList(
|
new QueryWrapper<WOutboundRecord>()
|
.select(" OUTBOUND_ID , DETAIL_ID , MATERIAL_ID , UNIT_ID , WAREHOUSE_ID , BATCH , LOCATION_ID , QUALITY_TYPE , PROCEDURE_ID , sum(NUM) as NUM ")
|
.eq("OUTBOUND_ID",wOutboundOut.getId())
|
.groupBy(" OUTBOUND_ID, DETAIL_ID , MATERIAL_ID , UNIT_ID , WAREHOUSE_ID , BATCH , LOCATION_ID , QUALITY_TYPE , PROCEDURE_ID ")
|
);
|
|
for (WOutboundRecord wOutboundDetail:wOutboundDetailOutList) {
|
WOutboundDetail wOutboundInDetail = new WOutboundDetail();
|
wOutboundInDetail.setId(null);
|
wOutboundInDetail.setOutboundId(wOutbound.getId());
|
wOutboundInDetail.setDeleted(Constants.ZERO);
|
wOutboundInDetail.setCreateUser(loginUserInfo.getId());
|
wOutboundInDetail.setCreateTime(new Date());
|
wOutboundInDetail.setRootDepartId(loginUserInfo.getRootDepartment().getId());
|
wOutboundInDetail.setMaterialId(wOutboundDetail.getMaterialId());
|
wOutboundInDetail.setUnitId(wOutboundDetail.getUnitId());
|
wOutboundInDetail.setBatch(wOutboundDetail.getBatch());
|
wOutboundInDetail.setNum(wOutboundDetail.getNum());
|
wOutboundInDetail.setDoneDate(new Date());
|
wOutboundInDetail.setDoneNum(wOutboundDetail.getNum());
|
wOutboundInDetail.setWarehouseId(wOutbound.getWarehouseId());
|
wOutboundInDetail.setStatus(Constants.ONE);
|
wOutboundInDetail.setQualityType(wOutboundDetail.getQualityType());
|
wOutboundInDetail.setProcedureId(wOutboundDetail.getProcedureId());
|
wOutboundInDetail.setLocationId(wOutboundDetail.getLocationId());
|
wOutboundDetailExtMapper.insert(wOutboundInDetail);
|
|
//记录库存变动记录
|
wStockRecordExtService.saveRecord(Constants.ONE,wOutboundDetail.getDetailId(),loginUserInfo);
|
|
List<WOutboundRecord> wOutboundRecordOutListByDetail = wOutboundRecordMapper.selectList(
|
new QueryWrapper<WOutboundRecord>().eq("DETAIL_ID",wOutboundDetail.getDetailId())
|
);
|
for (WOutboundRecord wOutboundRecord:wOutboundRecordOutListByDetail) {
|
WOutboundRecord wOutboundRecordIn = wOutboundRecord;
|
wOutboundRecordIn.setId(null);
|
wOutboundRecordIn.setCreateUser(loginUserInfo.getId());
|
wOutboundRecordIn.setCreateTime(new Date());
|
wOutboundRecordIn.setWarehouseId(wOutbound.getWarehouseId());
|
wOutboundRecordIn.setOutboundId(wOutboundInDetail.getOutboundId());
|
wOutboundRecordIn.setDetailId(wOutboundInDetail.getId());
|
wOutboundRecordIn.setLocationId(wOutboundRecord.getLocationId());
|
wOutboundRecordIn.setQualityType(wOutboundRecord.getQualityType());
|
wOutboundRecordIn.setProcedureId(wOutboundRecord.getProcedureId());
|
wOutboundRecordExtMapper.insert(wOutboundRecordIn);
|
//更新工装器具数据
|
Appliances appliances = appliancesExtMapper.selectById(wOutboundRecordIn.getAppliancesId());
|
if(!Objects.isNull(appliances)){
|
appliances.setCurObjType(Constants.ZERO);
|
appliances.setCurObjId(wOutbound.getId());
|
appliances.setWarehouseId(wOutboundInDetail.getWarehouseId());
|
appliances.setLocationId(wOutboundInDetail.getLocationId());
|
appliancesExtMapper.updateById(appliances);
|
}
|
}
|
QueryWrapper wrapper = new QueryWrapper<WStock>();
|
wrapper.eq("ROOT_DEPART_ID", wOutbound.getRootDepartId());
|
wrapper.eq("MATERIAL_ID", wOutboundInDetail.getMaterialId());
|
wrapper.eq("WAREHOUSE_ID", wOutbound.getWarehouseId());
|
wrapper.eq("QUALITY_TYPE", wOutboundInDetail.getQualityType());
|
if(!Objects.isNull(wOutboundInDetail.getProcedureId())){
|
wrapper.eq("PROCEDURE_ID" , wOutboundInDetail.getProcedureId());
|
}else{
|
wrapper.apply("PROCEDURE_ID is null ");
|
}
|
if(StringUtils.isNotBlank(wOutboundInDetail.getBatch())){
|
wrapper.eq("BATCH" , wOutboundInDetail.getBatch());
|
}else{
|
wrapper.apply("BATCH is null ");
|
}
|
wrapper.eq(!Objects.isNull(wOutboundInDetail.getLocationId())&&warehouse.getUseLocation()==Constants.ONE,"LOCATION_ID", wOutboundInDetail.getLocationId());
|
wrapper.eq("DELETED",0);
|
//更新库存
|
WStock wStock = wStockExtMapper.selectOne(wrapper);
|
if (Objects.isNull(wStock)) {
|
WStock newWStock = new WStock();
|
newWStock.setCreateTime(new Date());
|
newWStock.setCreateUser(loginUserInfo.getId());
|
newWStock.setRootDepartId(wOutboundInDetail.getRootDepartId());
|
newWStock.setMaterialId(wOutboundInDetail.getMaterialId());
|
newWStock.setBatch(wOutboundInDetail.getBatch());
|
newWStock.setDeleted(Constants.ZERO);
|
newWStock.setWarehouseId(warehouse.getId());
|
newWStock.setProcedureId(wOutboundInDetail.getProcedureId());
|
newWStock.setQualityType(wOutboundInDetail.getQualityType());
|
//此仓库 开启仓位
|
if(warehouse.getUseLocation()==Constants.ONE){
|
newWStock.setLocationId(wOutboundInDetail.getLocationId());
|
}
|
newWStock.setUnitId(wOutboundInDetail.getUnitId());
|
newWStock.setNum(wOutboundInDetail.getDoneNum());
|
wStockExtMapper.insert(newWStock);
|
}else{
|
wStock.setNum(wStock.getNum().add(wOutboundInDetail.getDoneNum()));
|
wStockExtMapper.updateById(wStock);
|
}
|
}
|
|
wTransfer.setStatus(4);
|
wTransfer.setInActdate(new Date());
|
wTransferMapper.updateById(wTransfer);
|
|
//记录操作记录 1、转库单 2、出入库单
|
WHistory wHistoryTransfer = wTransfer.toWHistory(loginUserInfo);
|
wHistoryMapper.insert(wHistoryTransfer);
|
WHistory wHistory = wOutbound.toWHistory(loginUserInfo.getId());
|
wHistoryMapper.insert(wHistory);
|
|
noticesExtService.dealNotice(wTransfer.getId(),Constants.Notices_Type_Transfer.checkEnum(wTransfer.getType()).getNoticeInType(),null);
|
|
return ApiResponse.success("退回成功");
|
}
|
|
|
@Transactional
|
@Override
|
public void scanTransfer(ScanWTransferExtDTO scanWTransferExtDTO,LoginUserInfo loginUserInfo){
|
boolean same = Objects.equals(scanWTransferExtDTO.getOutWarehouseId(),scanWTransferExtDTO.getInWarehouseId());
|
|
Warehouse warehouseOut = warehouseMapper.selectById(scanWTransferExtDTO.getOutWarehouseId());
|
if(Objects.isNull(warehouseOut)){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "转出仓库信息异常");
|
}
|
|
Warehouse warehouseIn = warehouseMapper.selectById(scanWTransferExtDTO.getInWarehouseId());
|
if(Objects.isNull(warehouseIn)){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "转入仓库信息异常");
|
}
|
|
//出库仓库与入库相等时,必须有转入货位
|
if(scanWTransferExtDTO.getOutWarehouseId().equals(scanWTransferExtDTO.getInWarehouseId())
|
&&Objects.equals(warehouseIn.getUseLocation(),Constants.ONE)
|
&&Objects.isNull(scanWTransferExtDTO.getInLocationId())){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "入库货位为空!");
|
}
|
// if(scanWTransferExtDTO.getOutWarehouseId().equals(scanWTransferExtDTO.getInWarehouseId())){
|
// same = true;
|
// }
|
List<Long> idList = scanWTransferExtDTO.getIdList();
|
if(Objects.isNull(idList)||idList.size()<=Constants.ZERO){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "篮筐数据为空!");
|
}
|
//查询是否存在篮筐为空的数据
|
if(appliancesMapper.selectCount(new QueryWrapper<Appliances>()
|
.apply(" LOCATION_ID is null and find_in_set(id,'"+StringUtils.join(idList.toArray(), ",")+"') ")
|
)>Constants.ZERO){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "存在篮筐无货位信息数据!");
|
};
|
//获取所有篮筐数据
|
List<Appliances> detailList = appliancesMapper.selectList(new QueryWrapper<Appliances>()
|
.select(" MATERIAL_ID,BATCH,WAREHOUSE_ID,LOCATION_ID,QUALITY_TYPE,PROCEDURE_ID,sum(NUM) as NUM ")
|
.apply(" find_in_set(id,'"+StringUtils.join(idList.toArray(), ",")+"') ")
|
.groupBy(" MATERIAL_ID,BATCH,WAREHOUSE_ID,LOCATION_ID,QUALITY_TYPE,PROCEDURE_ID ")
|
);
|
|
List<Appliances> appliancesList = appliancesMapper.selectList(new QueryWrapper<Appliances>()
|
.apply(" find_in_set(id,'"+StringUtils.join(idList.toArray(), ",")+"') ")
|
);
|
|
|
for(Appliances appliances:appliancesList) {
|
//查询篮筐是否处于投料中
|
if(appliancesExtMapper.selectCount(new QueryWrapper<Appliances>()
|
.eq("id",appliances.getId())
|
.apply(" id in ( select b.APPLIANCES_ID from workorder a inner join workorder_record b on a.id = b.WORKORDER_ID and a.status in ( 0,1,2,3 ) and b.DELETED = 0 ) ")
|
)>Constants.ZERO){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,工装【" + appliances.getCode() + "】处于投料中");
|
};
|
if (same) {
|
if (!Objects.isNull(appliances.getLocationId()) && Objects.equals(appliances.getLocationId(), scanWTransferExtDTO.getInLocationId())) {
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,工装【" + appliances.getCode() + "】的转出货位与转入货位相同!");
|
}
|
}
|
}
|
//验证所有篮筐数据是否满足仓库属性
|
//根据货位类别 区分是否验证工装器具类别
|
SystemDictData outWarehouseDictData = systemDictDataMapper.selectById(warehouseOut.getSystemDicDataId());
|
if(Objects.isNull(outWarehouseDictData)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到出库仓库属性类别");
|
}
|
SystemDictData inWarehouseDictData = systemDictDataMapper.selectById(warehouseIn.getSystemDicDataId());
|
if(Objects.isNull(inWarehouseDictData)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到入库仓库属性类别");
|
}
|
|
if(!outWarehouseDictData.getLabel().equals(Constants.APPLIANCES_TYPE_LABLE.mix)){
|
for(Appliances appliances:appliancesList){
|
//验证篮筐不一致
|
SystemDictData appliancesDictData = systemDictDataMapper.selectById(appliances.getType());
|
if(appliancesDictData.getLabel().equals(Constants.APPLIANCES_TYPE_LABLE.mix)){
|
continue;
|
}
|
if(!Objects.equals(appliancesDictData.getId(),outWarehouseDictData.getId())){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,工装【"+appliances.getCode()+"】的质量属性与出库仓库属性不一致!");
|
}
|
}
|
}
|
if(!inWarehouseDictData.getLabel().equals(Constants.APPLIANCES_TYPE_LABLE.mix)){
|
for(Appliances appliances:appliancesList){
|
SystemDictData appliancesDictData = systemDictDataMapper.selectById(appliances.getType());
|
if(appliancesDictData.getLabel().equals(Constants.APPLIANCES_TYPE_LABLE.mix)){
|
continue;
|
}
|
if(!Objects.equals(appliancesDictData.getId(),inWarehouseDictData.getId())){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,工装【"+appliances.getCode()+"】的质量属性与入库仓库属性不一致!");
|
}
|
}
|
}
|
WTransfer wTransfer = new WTransfer();
|
wTransfer.setRootDepartId(loginUserInfo.getRootDepartment().getId());
|
wTransfer.setInDepartId(loginUserInfo.getCurComDepartment().getId());
|
wTransfer.setOutPlandate(new Date());
|
wTransfer.setInPlandate(new Date());
|
wTransfer.setCreateTime(new Date());
|
wTransfer.setCreateUser(loginUserInfo.getId());
|
wTransfer.setCode(getNextCode(loginUserInfo.getCompany().getId()));
|
wTransfer.setValidDate(new Date());
|
wTransfer.setOutDepartId(warehouseOut.getDepartId());
|
wTransfer.setOutUserId(warehouseOut.getManagerId());
|
wTransfer.setOutWarehouseId(warehouseOut.getId());
|
wTransfer.setType(this.checkBillType(warehouseOut,warehouseIn));
|
wTransfer.setInUserId(warehouseIn.getManagerId());
|
wTransfer.setInDepartId(warehouseIn.getDepartId());
|
wTransfer.setInWarehouseId(warehouseIn.getId());
|
wTransfer.setStatus(same?Constants.TWO:Constants.ONE);
|
wTransfer.setInActdate(same?new Date():null);
|
wTransfer.setOutActdate(new Date());
|
wTransferMapper.insert(wTransfer);
|
detailList.forEach(i->{
|
MaterialDistribute materialDistribute = materialDistributeMapper.selectById(i.getMaterialId());
|
WTransferDetail wTransferDetail = new WTransferDetail();
|
wTransferDetail.setCreateUser(loginUserInfo.getId());
|
wTransferDetail.setRootDepartId(loginUserInfo.getRootDepartment().getId());
|
wTransferDetail.setTransferId(wTransfer.getId());
|
wTransferDetail.setMaterialId(i.getMaterialId());
|
wTransferDetail.setUnitId(materialDistribute.getUnitId());
|
wTransferDetail.setOutDepartId(wTransfer.getOutDepartId());
|
wTransferDetail.setOutWarehouseId(wTransfer.getOutWarehouseId());
|
wTransferDetail.setOutLocationId(i.getLocationId());
|
wTransferDetail.setBatch(i.getBatch());
|
wTransferDetail.setOutPlannum(i.getNum());
|
wTransferDetail.setOutActnum(i.getNum());
|
wTransferDetail.setOutActdate(new Date());
|
wTransferDetail.setInDepartId(wTransfer.getInDepartId());
|
wTransferDetail.setInWarehouseId(wTransfer.getInWarehouseId());
|
wTransferDetail.setInLcoationId(scanWTransferExtDTO.getInLocationId());
|
if(same){
|
wTransferDetail.setInActdate(new Date());
|
wTransferDetail.setInActnum(i.getNum());
|
}
|
wTransferDetail.setQualityType(i.getQualityType());
|
wTransferDetail.setProcedureId(i.getProcedureId());
|
wTransferDetailExtMapper.insert(wTransferDetail);
|
});
|
//创建出库单据
|
WOutbound wOutbound = new WOutbound();
|
wOutbound.setPlanDate(new Date());
|
wOutbound.setBillType(wTransfer.getType());
|
wOutbound.setType(Constants.ZERO);
|
wOutbound.setWarehouseId(warehouseOut.getId());
|
wOutbound.setCreateTime(new Date());
|
wOutbound.setCreateUser(loginUserInfo.getId());
|
wOutbound.setValidDate(new Date());
|
wOutbound.setStatus(Constants.ONE);
|
wOutbound.setOriginType(3);
|
wOutbound.setOriginCode(wTransfer.getCode());
|
wOutbound.setOriginId(wTransfer.getId());
|
wOutbound.setOrigin(Constants.ONE);
|
wOutbound.setRootDepartId(loginUserInfo.getRootDepartment().getId());
|
wOutbound.setDepartId(loginUserInfo.getCurComDepartment().getId());
|
wOutbound.setUserId(loginUserInfo.getId());
|
wOutbound.setCode(wOutboundService.getNextOutCode(loginUserInfo.getCompany().getId()));
|
wOutbound.setDealDate(new Date());
|
wOutboundMapper.insert(wOutbound);
|
detailList.forEach(i->{
|
MaterialDistribute materialDistribute = materialDistributeMapper.selectById(i.getMaterialId());
|
WOutboundDetail wOutboundDetail = new WOutboundDetail();
|
wOutboundDetail.setNum(i.getNum());
|
wOutboundDetail.setDoneNum(i.getNum());
|
wOutboundDetail.setUnitId(materialDistribute.getId());
|
wOutboundDetail.setBatch(i.getBatch());
|
wOutboundDetail.setMaterialId(i.getMaterialId());
|
wOutboundDetail.setLocationId(i.getLocationId());
|
wOutboundDetail.setOutboundId(wOutbound.getId());
|
wOutboundDetail.setCreateTime(new Date());
|
wOutboundDetail.setCreateUser(loginUserInfo.getId());
|
wOutboundDetail.setRootDepartId(loginUserInfo.getRootDepartment().getId());
|
wOutboundDetail.setWarehouseId(wOutbound.getWarehouseId());
|
wOutboundDetail.setDoneDate(new Date());
|
wOutboundDetail.setStatus(Constants.ONE);
|
wOutboundDetail.setQualityType(i.getQualityType());
|
wOutboundDetail.setProcedureId(i.getProcedureId());
|
wOutboundDetailMapper.insert(wOutboundDetail);
|
|
//添加操作记录
|
for (Appliances appliances:appliancesList) {
|
if(Objects.equals(appliances.getMaterialId(),i.getMaterialId())
|
&&Objects.equals(appliances.getBatch(),i.getBatch())
|
&&Objects.equals(appliances.getWarehouseId(),i.getWarehouseId())
|
&&Objects.equals(appliances.getQualityType(),i.getQualityType())
|
&&Objects.equals(appliances.getLocationId(),i.getLocationId())
|
&&Objects.equals(appliances.getProcedureId(),i.getProcedureId())
|
){
|
WOutboundRecord wOutboundRecord = wOutboundDetail.toRecord(appliances,loginUserInfo);
|
wOutboundRecordMapper.insert(wOutboundRecord);
|
}
|
}
|
|
//记录库存变动记录
|
wStockRecordExtService.saveRecord(wOutbound.getType(),wOutboundDetail.getId(),loginUserInfo);
|
|
//更新库存 记录库存记录数据
|
QueryWrapper wrapper = new QueryWrapper<WStock>();
|
wrapper.eq("ROOT_DEPART_ID", wOutbound.getRootDepartId());
|
wrapper.eq("MATERIAL_ID", wOutboundDetail.getMaterialId());
|
wrapper.eq("WAREHOUSE_ID", wOutbound.getWarehouseId());
|
wrapper.eq("QUALITY_TYPE", wOutboundDetail.getQualityType());
|
if(!Objects.isNull(wOutboundDetail.getProcedureId())){
|
wrapper.eq("PROCEDURE_ID" , wOutboundDetail.getProcedureId());
|
}else{
|
wrapper.apply("PROCEDURE_ID is null ");
|
}
|
if(StringUtils.isNotBlank(wOutboundDetail.getBatch())){
|
wrapper.eq("BATCH" , wOutboundDetail.getBatch());
|
}else{
|
wrapper.apply("BATCH is null ");
|
}
|
wrapper.eq(!Objects.isNull(wOutboundDetail.getLocationId())&&warehouseOut.getUseLocation()==Constants.ONE,"LOCATION_ID", wOutboundDetail.getLocationId());
|
wrapper.eq("DELETED",0);
|
WStock wStock = wStockExtMapper.selectOne(wrapper);
|
if(Objects.isNull(wStock)||wOutboundDetail.getNum().compareTo(wStock.getNum())>Constants.ZERO){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "库存数据不足!");
|
}
|
wStock.setNum(wStock.getNum().subtract(wOutboundDetail.getNum()));
|
wStockExtMapper.updateById(wStock);
|
//记录操作记录 1、转库单 2、出入库单
|
WHistory wHistoryTransfer = wTransfer.toWHistory(loginUserInfo);
|
wHistoryMapper.insert(wHistoryTransfer);
|
WHistory wHistory = wOutbound.toWHistory(loginUserInfo.getId());
|
wHistoryMapper.insert(wHistory);
|
|
});
|
|
//发送通知
|
if(!same){
|
CompanyUser companyUser = companyUserMapper.selectOne(new QueryWrapper<CompanyUser>()
|
.eq("USER_ID",wTransfer.getInUserId())
|
.eq("ROOT_DEPART_ID",wTransfer.getRootDepartId())
|
.eq("DELETED",0)
|
);
|
Constants.Notices_Type_Transfer notices_type_transfer = Constants.Notices_Type_Transfer.checkEnum(wTransfer.getType());
|
if(Objects.isNull(notices_type_transfer)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转库单类型信息【"+wTransfer.getType()+"】");
|
}
|
String url = Constants.getNoticeUrl(loginUserInfo.getCompany(),Constants.DINGDING_NOTICE_URL.in);
|
if(notices_type_transfer.getType() == 3){
|
url = Constants.getNoticeUrl(loginUserInfo.getCompany(),Constants.DINGDING_NOTICE_URL.finish);
|
}
|
sendInNotice(companyUser.getId(),wTransfer.getId(),wTransfer.getCode(),notices_type_transfer,url);
|
}else{
|
WOutbound wOutboundIn = new WOutbound();
|
wOutboundIn.setPlanDate(new Date());
|
wOutboundIn.setBillType(wTransfer.getType());
|
wOutboundIn.setType(Constants.ONE);
|
wOutboundIn.setWarehouseId(warehouseIn.getId());
|
wOutboundIn.setCreateTime(new Date());
|
wOutboundIn.setCreateUser(loginUserInfo.getId());
|
wOutboundIn.setValidDate(new Date());
|
wOutboundIn.setStatus(Constants.ONE);
|
wOutboundIn.setOriginType(3);
|
wOutboundIn.setOriginCode(wTransfer.getCode());
|
wOutboundIn.setOriginId(wTransfer.getId());
|
wOutboundIn.setOrigin(Constants.ONE);
|
wOutboundIn.setRootDepartId(loginUserInfo.getRootDepartment().getId());
|
wOutboundIn.setDepartId(loginUserInfo.getCurComDepartment().getId());
|
wOutboundIn.setUserId(loginUserInfo.getId());
|
wOutboundIn.setDealDate(new Date());
|
wOutboundIn.setCode(wOutboundService.getNextInCode(loginUserInfo.getCompany().getId()));
|
wOutboundMapper.insert(wOutboundIn);
|
detailList.forEach(i-> {
|
MaterialDistribute materialDistribute = materialDistributeMapper.selectById(i.getMaterialId());
|
WOutboundDetail wOutboundDetail = new WOutboundDetail();
|
wOutboundDetail.setNum(i.getNum());
|
wOutboundDetail.setDoneNum(i.getNum());
|
wOutboundDetail.setUnitId(materialDistribute.getUnitId());
|
wOutboundDetail.setBatch(i.getBatch());
|
wOutboundDetail.setMaterialId(i.getMaterialId());
|
wOutboundDetail.setLocationId(Objects.equals(warehouseIn.getUseLocation(),Constants.ONE)?scanWTransferExtDTO.getInLocationId():null);
|
wOutboundDetail.setOutboundId(wOutboundIn.getId());
|
wOutboundDetail.setCreateTime(new Date());
|
wOutboundDetail.setCreateUser(loginUserInfo.getId());
|
wOutboundDetail.setRootDepartId(loginUserInfo.getRootDepartment().getId());
|
wOutboundDetail.setWarehouseId(wOutboundIn.getWarehouseId());
|
wOutboundDetail.setQualityType(i.getQualityType());
|
wOutboundDetail.setProcedureId(i.getProcedureId());
|
wOutboundDetail.setDoneDate(new Date());
|
wOutboundDetail.setStatus(Constants.ONE);
|
wOutboundDetailMapper.insert(wOutboundDetail);
|
//添加操作记录
|
for (Appliances appliances : appliancesList) {
|
if (Objects.equals(appliances.getMaterialId(), i.getMaterialId())
|
&& Objects.equals(appliances.getBatch(), i.getBatch())
|
&& Objects.equals(appliances.getWarehouseId(), i.getWarehouseId())
|
&& Objects.equals(appliances.getQualityType(), i.getQualityType())
|
&& Objects.equals(appliances.getLocationId(), i.getLocationId())
|
&& Objects.equals(appliances.getProcedureId(), i.getProcedureId())
|
) {
|
WOutboundRecord wOutboundRecord = wOutboundDetail.toRecord(appliances, loginUserInfo);
|
wOutboundRecordMapper.insert(wOutboundRecord);
|
}
|
}
|
|
//记录库存变动记录
|
wStockRecordExtService.saveRecord(wOutboundIn.getType(),wOutboundDetail.getId(),loginUserInfo);
|
|
//更新库存 记录库存记录数据
|
QueryWrapper wrapper = new QueryWrapper<WStock>();
|
wrapper.eq("ROOT_DEPART_ID", wOutbound.getRootDepartId());
|
wrapper.eq("MATERIAL_ID", wOutboundDetail.getMaterialId());
|
wrapper.eq("WAREHOUSE_ID", wOutbound.getWarehouseId());
|
wrapper.eq("QUALITY_TYPE", wOutboundDetail.getQualityType());
|
if(!Objects.isNull(wOutboundDetail.getProcedureId())){
|
wrapper.eq("PROCEDURE_ID" , wOutboundDetail.getProcedureId());
|
}else{
|
wrapper.apply("PROCEDURE_ID is null ");
|
}
|
if(StringUtils.isNotBlank(wOutboundDetail.getBatch())){
|
wrapper.eq("BATCH" , wOutboundDetail.getBatch());
|
}else{
|
wrapper.apply("BATCH is null ");
|
}
|
wrapper.eq(!Objects.isNull(wOutboundDetail.getLocationId())&&warehouseIn.getUseLocation()==Constants.ONE,"LOCATION_ID", wOutboundDetail.getLocationId());
|
wrapper.eq("DELETED",0);
|
WStock wStock = wStockExtMapper.selectOne(wrapper);
|
if (Objects.isNull(wStock)) {
|
WStock newWStock = new WStock();
|
newWStock.setCreateTime(new Date());
|
newWStock.setCreateUser(loginUserInfo.getId());
|
newWStock.setRootDepartId(wOutboundIn.getRootDepartId());
|
newWStock.setMaterialId(wOutboundDetail.getMaterialId());
|
newWStock.setBatch(wOutboundDetail.getBatch());
|
newWStock.setDeleted(Constants.ZERO);
|
newWStock.setWarehouseId(warehouseIn.getId());
|
newWStock.setProcedureId(wOutboundDetail.getProcedureId());
|
newWStock.setQualityType(wOutboundDetail.getQualityType());
|
newWStock.setLocationId(Objects.equals(warehouseIn.getUseLocation(),Constants.ONE)?scanWTransferExtDTO.getInLocationId():null);
|
newWStock.setUnitId(wOutboundDetail.getUnitId());
|
newWStock.setNum(wOutboundDetail.getDoneNum());
|
wStockExtMapper.insert(newWStock);
|
}else{
|
wStock.setNum(wStock.getNum().add(wOutboundDetail.getDoneNum()));
|
wStockExtMapper.updateById(wStock);
|
}
|
WHistory wHistory = wOutboundIn.toWHistory(loginUserInfo.getId());
|
wHistoryMapper.insert(wHistory);
|
});
|
}
|
//更新篮筐归属数据
|
appliancesList.forEach(i->{
|
if(same){
|
i.setLocationId(Objects.equals(warehouseIn.getUseLocation(),Constants.ONE)?scanWTransferExtDTO.getInLocationId():null);
|
}else{
|
i.setLocationId(null);
|
i.setWarehouseId(null);
|
}
|
appliancesMapper.updateById(i);
|
});
|
}
|
|
public Integer checkBillType(Warehouse outWarehouse,Warehouse inWarehouse){
|
//转出仓库 - 公司库
|
if(Objects.equals(outWarehouse.getAscription(),Constants.ZERO)){
|
if(Objects.equals(outWarehouse.getType(),7)&&Objects.equals(inWarehouse.getType(),7)){
|
return Constants.Notices_Type_Transfer.title11.getType();//让步放行转库
|
}
|
if(Objects.equals(inWarehouse.getAscription(),Constants.ZERO)){
|
if(Objects.equals(outWarehouse.getRootDepartId(),inWarehouse.getRootDepartId())){
|
return Constants.Notices_Type_Transfer.title9.getType(); //成品转库
|
}else{
|
return Constants.Notices_Type_Transfer.title14.getType();//跨组织转库
|
}
|
}else if(Objects.equals(inWarehouse.getAscription(),Constants.ONE)){
|
if(Objects.equals(outWarehouse.getType(),6)){
|
return Constants.Notices_Type_Transfer.title12.getType();//客返品返修
|
}else if(Objects.equals(outWarehouse.getType(),5)){
|
return Constants.Notices_Type_Transfer.title16.getType();//客退品返修
|
}else{
|
return Constants.Notices_Type_Transfer.title1.getType();//车间领料
|
}
|
}else{
|
if(!Objects.equals(outWarehouse.getType(),8)&&!Objects.equals(inWarehouse.getType(),8)){
|
return Constants.Notices_Type_Transfer.title6.getType();//外协领料转库
|
}else{
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "未匹配到对应的转库类型");
|
}
|
}
|
//转出仓库 - 车间库
|
}else if(Objects.equals(outWarehouse.getAscription(),Constants.ONE)){
|
if(Objects.equals(inWarehouse.getAscription(),Constants.ZERO)){
|
if(Objects.equals(outWarehouse.getType(),8)&&Objects.equals(inWarehouse.getType(),8)){
|
return Constants.Notices_Type_Transfer.title30.getType();//产品入库
|
}else if(Objects.equals(outWarehouse.getType(),7)&&Objects.equals(inWarehouse.getType(),7)){
|
return Constants.Notices_Type_Transfer.title10.getType();//让步放行
|
}else if(Objects.equals(inWarehouse.getType(),6)){
|
return Constants.Notices_Type_Transfer.title13.getType();//客返品返修
|
}else if(Objects.equals(inWarehouse.getType(),5)){
|
return Constants.Notices_Type_Transfer.title17.getType();//客退品返修入库
|
}else{
|
if(Objects.equals(inWarehouse.getType(),8)||Objects.equals(outWarehouse.getType(),8)){
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "未匹配到对应的转库类型");
|
}else{
|
return Constants.Notices_Type_Transfer.title8.getType();//产品入库
|
}
|
}
|
}else if(Objects.equals(inWarehouse.getAscription(),Constants.ONE)){
|
if(!Objects.equals(outWarehouse.getType(),7)&&!Objects.equals(inWarehouse.getType(),7)){
|
return Constants.Notices_Type_Transfer.title5.getType();//车间转库
|
}else if(Objects.equals(outWarehouse.getType(),7)&&Objects.equals(inWarehouse.getType(),7)){
|
return Constants.Notices_Type_Transfer.title11.getType();//让步放行转库
|
}else{
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "未匹配到对应的转库类型");
|
}
|
}else{
|
if(Objects.equals(outWarehouse.getType(),7)&&Objects.equals(inWarehouse.getType(),7)){
|
return Constants.Notices_Type_Transfer.title11.getType();//让步放行转库
|
}
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "未匹配到对应的转库类型");
|
}
|
//转出仓库 - 外协库
|
}else if(Objects.equals(outWarehouse.getAscription(),Constants.TWO)){
|
|
if(Objects.equals(inWarehouse.getAscription(),Constants.ZERO)){
|
if(!Objects.equals(outWarehouse.getType(),8)&&!Objects.equals(inWarehouse.getType(),8)){
|
return Constants.Notices_Type_Transfer.title7.getType();//外协完工转库
|
}else{
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "未匹配到对应的转库类型");
|
}
|
}else{
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "未匹配到对应的转库类型");
|
}
|
}else{
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "未匹配到对应的转库类型");
|
}
|
}
|
|
|
@Override
|
public Integer testWarehouse(Integer outWarehouseId, Integer inWarehouseId){
|
|
Warehouse warehouseOut = warehouseMapper.selectById(outWarehouseId);
|
if(Objects.isNull(warehouseOut)){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "转出仓库信息异常");
|
}
|
Warehouse warehouseIn = warehouseMapper.selectById(inWarehouseId);
|
if(Objects.isNull(warehouseOut)){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "转入仓库信息异常");
|
}
|
|
return this.checkBillType(warehouseOut,warehouseIn);
|
|
}
|
|
|
|
/********************************************************************* 调整业务 开始 *********************************************************************/
|
//2023年7月19日14:12:22
|
|
/**
|
* 转库出库业务 标准版使用
|
* @param submitTransferOutDTO
|
* @param loginUserInfo
|
*/
|
@Override
|
@Transactional(rollbackFor = {Exception.class,BusinessException.class})
|
public void wTransferForOutUpload(SubmitTransferOutDTO submitTransferOutDTO,LoginUserInfo loginUserInfo){
|
WTransfer wTransfer = wTransferExtMapper.wTransferById(submitTransferOutDTO.getWTransferId());
|
if(Objects.isNull(wTransfer)){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "未查询到转库单对象信息");
|
}
|
if(!StringUtils.equals(wTransfer.getStatus().toString(),"0")){
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "转库单数据状态错误");
|
}
|
//提交所有行数据
|
List<SubmitTransferOutDetailDTO> submitTransferOutDetailDTOList = submitTransferOutDTO.getSubmitTransferOutDetailDTOList();
|
if(Objects.isNull(submitTransferOutDetailDTOList)||submitTransferOutDetailDTOList.size()==Constants.ZERO){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "无行项目数据");
|
}
|
Warehouse warehouse = warehouseMapper.selectById(wTransfer.getOutWarehouseId());
|
// 根据转库单 单头 创建出库数据
|
WOutbound wOutbound = wTransfer.toWOutbound(Constants.ZERO);
|
if(Objects.isNull(warehouse)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到出库仓库信息数据");
|
}
|
wOutbound.setRootDepartId(warehouse.getRootDepartId());
|
wOutbound.setDepartId(warehouse.getDepartId());
|
wOutbound.setUserId(warehouse.getManagerId());
|
wOutbound.setWarehouseId(warehouse.getId());
|
wOutbound.setCode( wOutboundService.getNextOutCode(loginUserInfo.getCompany().getId()));
|
wOutboundMapper.insert(wOutbound);
|
//根据转库单行项目主键分组
|
Map<String, List<SubmitTransferOutDetailDTO>> submitTransferOutDetailDTOMap = submitTransferOutDetailDTOList.stream()
|
.collect(Collectors.groupingBy(i -> i.getWTransferDetailId().toString()));
|
Iterator<String> iter = submitTransferOutDetailDTOMap.keySet().iterator();
|
while(iter.hasNext()) {
|
String key = iter.next();
|
WTransferDetail wTransferDetail = wTransferDetailExtMapper.selectById(key);
|
if(Objects.isNull(wTransferDetail)){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "转库出库行项目未查询到数据!");
|
}
|
if(!wTransferDetail.getTransferId().equals(submitTransferOutDTO.getWTransferId())){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "转库出库行项目数据与转库单匹配失败!");
|
}
|
List<SubmitTransferOutDetailDTO> dealSubmitTransferOutDetailDTOList = submitTransferOutDetailDTOList.stream().filter(x -> x.getWTransferDetailId().toString().equals(key)).collect(Collectors.toList());
|
BigDecimal sumOut = dealSubmitTransferOutDetailDTOList.stream().map(s -> s.getOutNum()).reduce(BigDecimal.ZERO, BigDecimal::add);
|
if(sumOut.compareTo(wTransferDetail.getOutPlannum())>Constants.ZERO){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "填写数量超出转库出库数量!");
|
}
|
wTransferDetail.setOutActdate(new Date());
|
wTransferDetail.setOutActnum(sumOut);
|
wTransferDetailExtMapper.updateById(wTransferDetail);
|
for (SubmitTransferOutDetailDTO submitTransferOutDetailDTO:dealSubmitTransferOutDetailDTOList) {
|
WStock wStock = wStockExtMapper.selectById(submitTransferOutDetailDTO.getWStockId());
|
WStockRecord wStockRecord = new WStockRecord();
|
BeanUtils.copyProperties(wStock,wStockRecord);
|
wStockRecord.setId(null);
|
wStockRecord.setNum(submitTransferOutDetailDTO.getOutNum());
|
if(Objects.isNull(wStock)){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "未查询到选择库存数据!");
|
}
|
//验证库存信息
|
if(wStock.getNum().compareTo(submitTransferOutDetailDTO.getOutNum())<Constants.ZERO){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "库存记录发生变化,无法进行出库!");
|
}
|
//比对批次等数据信息
|
this.checkDetailStandard(wStock,wTransferDetail);
|
//存储出库记录
|
WOutboundDetail wOutboundDetail = new WOutboundDetail();
|
wOutboundDetail.setDeleted(Constants.ZERO);
|
wOutboundDetail.setCreateUser(loginUserInfo.getId());
|
wOutboundDetail.setCreateTime(new Date());
|
wOutboundDetail.setOutboundId(wOutbound.getId());
|
wOutboundDetail.setMaterialId(wTransferDetail.getMaterialId());
|
wOutboundDetail.setUnitId(wTransferDetail.getUnitId());
|
wOutboundDetail.setBatch(wTransferDetail.getBatch());
|
wOutboundDetail.setWarehouseId(wOutbound.getWarehouseId());
|
wOutboundDetail.setLocationId(wStock.getLocationId());
|
wOutboundDetail.setNum(wTransferDetail.getOutActnum());
|
wOutboundDetail.setDoneNum(submitTransferOutDetailDTO.getOutNum());
|
wOutboundDetail.setDoneDate(new Date());
|
wOutboundDetail.setStatus(Constants.ONE);
|
wOutboundDetail.setQualityType(wTransferDetail.getQualityType());
|
wOutboundDetail.setProcedureId(wTransferDetail.getProcedureId());
|
wOutboundDetail.setRootDepartId(wOutbound.getRootDepartId());
|
wOutboundDetailMapper.insert(wOutboundDetail);
|
|
WOutboundRecord wOutboundRecord = wOutboundDetail.toRecord( loginUserInfo);
|
wOutboundRecordMapper.insert(wOutboundRecord);
|
|
wStockRecord.setBeforNum(wStock.getNum());
|
wStock.setNum(wStock.getNum().subtract(submitTransferOutDetailDTO.getOutNum()));
|
wStockExtMapper.updateById(wStock);
|
wStockRecord.setAfterNum(wStock.getNum());
|
wStockRecord.setOutboundId(wOutbound.getId());
|
wStockRecord.setWStockId(wStock.getId());
|
wStockRecord.setDetailId(wOutboundDetail.getId());
|
wStockRecordExtService.insertWStockRecord(wStockRecord);
|
}
|
|
}
|
wTransfer.setStatus(Constants.ONE);
|
wTransfer.setOutActdate(new Date());
|
wTransfer.setUpdateTime(new Date());
|
wTransfer.setUpdateUser(loginUserInfo.getId());
|
wTransferMapper.updateById(wTransfer);
|
//发送钉钉通知
|
CompanyUser companyUser = companyUserMapper.selectOne(new QueryWrapper<CompanyUser>()
|
.eq("USER_ID",wTransfer.getInUserId())
|
.eq("ROOT_DEPART_ID",wTransfer.getRootDepartId())
|
.eq("DELETED",0)
|
);
|
//出入库单操作记录
|
WHistory wHistory = wOutbound.toWHistory(loginUserInfo.getId());
|
wHistoryMapper.insert(wHistory);
|
//处理通知
|
Constants.Notices_Type_Transfer notices_type_transfer = Constants.Notices_Type_Transfer.checkEnum(wTransfer.getType());
|
if(Objects.isNull(notices_type_transfer)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转库单类型信息【"+wTransfer.getType()+"】");
|
}
|
noticesExtService.dealNotice(wTransfer.getId(),notices_type_transfer.getNoticeOutType(),null);
|
String url = Constants.getNoticeUrl(loginUserInfo.getCompany(),Constants.DINGDING_NOTICE_URL.in);
|
if(notices_type_transfer.getType() == 3){
|
url =Constants.getNoticeUrl(loginUserInfo.getCompany(),Constants.DINGDING_NOTICE_URL.finish);
|
}
|
sendInNotice(companyUser.getId(),wTransfer.getId(),wTransfer.getCode(),notices_type_transfer,url);
|
}
|
|
|
public void checkDetailStandard(WStock wStock , WTransferDetail wTransferDetail){
|
if(!Objects.isNull(wTransferDetail.getOutLocationId())&&!Objects.equals(wStock.getLocationId(),wTransferDetail.getOutLocationId())){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "仓位信息信息不匹配");
|
}
|
if(!Objects.equals(wTransferDetail.getMaterialId(),wStock.getMaterialId())){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "物料信息信息不匹配");
|
}
|
if(!Objects.isNull(wTransferDetail.getBatch())&&!Objects.equals(wStock.getBatch(),wTransferDetail.getBatch())){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "物料批次信息不匹配");
|
}
|
if(!Objects.equals(wStock.getQualityType(),wTransferDetail.getQualityType())){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "物料质量属性信息不匹配");
|
}
|
if(!Objects.isNull(wTransferDetail.getProcedureId())&&!Objects.equals(wTransferDetail.getProcedureId(),wStock.getProcedureId())){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "物料工序信息不匹配");
|
}
|
}
|
|
@Override
|
@Transactional(rollbackFor = {Exception.class,BusinessException.class})
|
public void wTransferForInUpload(SubmitTransferInDTO submitTransferInDTO, LoginUserInfo loginUserInfo){
|
WTransferRedisBean wTransferRedisBean = new WTransferRedisBean();
|
WTransfer wTransfer = wTransferExtMapper.wTransferById(submitTransferInDTO.getWTransferId());
|
if(Objects.isNull(wTransfer)){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "未查询到转库单对象信息");
|
}
|
if(!StringUtils.equals(wTransfer.getStatus().toString(),"1")){
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "转库单数据状态错误");
|
}
|
//提交所有行数据
|
List<SubmitTransferInDetailDTO> submitTransferInDetailDTOList = submitTransferInDTO.getSubmitTransferInDetailDTOList();
|
if(Objects.isNull(submitTransferInDetailDTOList)||submitTransferInDetailDTOList.size()==Constants.ZERO){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "无行项目数据");
|
}
|
Warehouse warehouse = warehouseMapper.selectById(wTransfer.getInWarehouseId());
|
// 根据转库单 单头 创建入库数据
|
WOutbound wOutbound = wTransfer.toWOutbound(Constants.ONE);
|
if(Objects.isNull(warehouse)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到入库仓库信息数据");
|
}
|
wOutbound.setRootDepartId(warehouse.getRootDepartId());
|
wOutbound.setDepartId(warehouse.getDepartId());
|
wOutbound.setUserId(warehouse.getManagerId());
|
wOutbound.setWarehouseId(warehouse.getId());
|
wOutbound.setCode( wOutboundService.getNextInCode(loginUserInfo.getCompany().getId()));
|
wOutboundMapper.insert(wOutbound);
|
//根据转库单行项目主键分组
|
Map<String, List<SubmitTransferInDetailDTO>> submitTransferInDetailDTOMap = submitTransferInDetailDTOList.stream()
|
.collect(Collectors.groupingBy(i -> i.getWTransferDetailId().toString()));
|
Iterator<String> iter = submitTransferInDetailDTOMap.keySet().iterator();
|
while(iter.hasNext()) {
|
String key = iter.next();
|
WTransferDetail wTransferDetail = wTransferDetailExtMapper.selectById(key);
|
if(Objects.isNull(wTransferDetail)){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "转库出库行项目未查询到数据!");
|
}
|
if(!wTransferDetail.getTransferId().equals(submitTransferInDTO.getWTransferId())){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "转库入库行项目数据与转库单匹配失败!");
|
}
|
List<SubmitTransferInDetailDTO> dealSubmitTransferInDetailDTOList = submitTransferInDetailDTOList.stream()
|
.filter(x -> x.getWTransferDetailId().toString().equals(key)).collect(Collectors.toList());
|
BigDecimal sumIn = dealSubmitTransferInDetailDTOList.stream().map(s -> s.getInNum()).reduce(BigDecimal.ZERO, BigDecimal::add);
|
if(sumIn.compareTo(wTransferDetail.getOutActnum())!=Constants.ZERO){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "转库入库数量需等于转出库数量!");
|
}
|
wTransferDetail.setInActdate(new Date());
|
wTransferDetail.setInActnum(sumIn);
|
wTransferDetailExtMapper.updateById(wTransferDetail);
|
for (SubmitTransferInDetailDTO submitTransferInDetailDTO:dealSubmitTransferInDetailDTOList) {
|
|
QueryWrapper wrapper = new QueryWrapper<WStock>();
|
wrapper.eq("ROOT_DEPART_ID", wOutbound.getRootDepartId());
|
wrapper.eq("MATERIAL_ID", wTransferDetail.getMaterialId());
|
wrapper.eq("WAREHOUSE_ID", wOutbound.getWarehouseId());
|
wrapper.eq("QUALITY_TYPE", wTransferDetail.getQualityType());
|
if(!Objects.isNull(wTransferDetail.getProcedureId())){
|
wrapper.eq("PROCEDURE_ID" , wTransferDetail.getProcedureId());
|
}else{
|
wrapper.apply("PROCEDURE_ID is null ");
|
}
|
if(StringUtils.isNotBlank(wTransferDetail.getBatch())){
|
wrapper.eq("BATCH" , wTransferDetail.getBatch());
|
}else{
|
wrapper.apply("BATCH is null ");
|
}
|
wrapper.eq(!Objects.isNull(submitTransferInDetailDTO.getLocationId())&&warehouse.getUseLocation()==Constants.ONE,"LOCATION_ID", submitTransferInDetailDTO.getLocationId());
|
wrapper.eq("DELETED",0);
|
WStock wStock = wStockExtMapper.selectOne(wrapper);
|
WStockRecord wStockRecord = new WStockRecord();
|
if (Objects.isNull(wStock)) {
|
WStock newWStock = new WStock();
|
newWStock.setCreateTime(new Date());
|
newWStock.setCreateUser(loginUserInfo.getId());
|
newWStock.setRootDepartId(wOutbound.getRootDepartId());
|
newWStock.setMaterialId(wTransferDetail.getMaterialId());
|
newWStock.setBatch(wTransferDetail.getBatch());
|
newWStock.setDeleted(Constants.ZERO);
|
newWStock.setWarehouseId(warehouse.getId());
|
newWStock.setProcedureId(wTransferDetail.getProcedureId());
|
newWStock.setQualityType(wTransferDetail.getQualityType());
|
newWStock.setLocationId(Objects.equals(warehouse.getUseLocation(),Constants.ONE)?submitTransferInDetailDTO.getLocationId():null);
|
newWStock.setUnitId(wTransferDetail.getUnitId());
|
newWStock.setNum(submitTransferInDetailDTO.getInNum());
|
wStockExtMapper.insert(newWStock);
|
BeanUtils.copyProperties(newWStock,wStockRecord);
|
wStockRecord.setNum(submitTransferInDetailDTO.getInNum());
|
wStockRecord.setBeforNum(BigDecimal.ZERO);
|
wStockRecord.setAfterNum(submitTransferInDetailDTO.getInNum());
|
wStockRecord.setWStockId(newWStock.getId());
|
}else{
|
BeanUtils.copyProperties(wStock,wStockRecord);
|
wStockRecord.setNum(submitTransferInDetailDTO.getInNum());
|
wStockRecord.setBeforNum(wStock.getNum());
|
wStockRecord.setAfterNum(submitTransferInDetailDTO.getInNum());
|
wStockRecord.setWStockId(wStock.getId());
|
wStock.setNum(wStock.getNum().add(submitTransferInDetailDTO.getInNum()));
|
wStockExtMapper.updateById(wStock);
|
}
|
wStockRecordExtService.insertWStockRecord(wStockRecord);
|
|
WOutboundDetail wOutboundDetail = new WOutboundDetail();
|
wOutboundDetail.setDeleted(Constants.ZERO);
|
wOutboundDetail.setCreateUser(loginUserInfo.getId());
|
wOutboundDetail.setCreateTime(new Date());
|
wOutboundDetail.setOutboundId(wOutbound.getId());
|
wOutboundDetail.setMaterialId(wTransferDetail.getMaterialId());
|
wOutboundDetail.setUnitId(wTransferDetail.getUnitId());
|
wOutboundDetail.setBatch(wTransferDetail.getBatch());
|
wOutboundDetail.setWarehouseId(wOutbound.getWarehouseId());
|
wOutboundDetail.setLocationId(submitTransferInDetailDTO.getLocationId());
|
wOutboundDetail.setNum(wTransferDetail.getOutActnum());
|
wOutboundDetail.setDoneNum(submitTransferInDetailDTO.getInNum());
|
wOutboundDetail.setDoneDate(new Date());
|
wOutboundDetail.setStatus(Constants.ONE);
|
wOutboundDetail.setQualityType(wTransferDetail.getQualityType());
|
wOutboundDetail.setProcedureId(wTransferDetail.getProcedureId());
|
wOutboundDetail.setRootDepartId(wOutbound.getRootDepartId());
|
wOutboundDetailMapper.insert(wOutboundDetail);
|
|
WOutboundRecord wOutboundRecord = wOutboundDetail.toRecord( loginUserInfo);
|
wOutboundRecordMapper.insert(wOutboundRecord);
|
|
wStockRecord.setOutboundId(wOutbound.getId());
|
wStockRecord.setDetailId(wOutboundDetail.getId());
|
wStockRecordExtService.insertWStockRecord(wStockRecord);
|
}
|
}
|
|
//出入库单操作记录
|
WHistory wHistory = wOutbound.toWHistory(loginUserInfo.getId());
|
wHistoryMapper.insert(wHistory);
|
//发送钉钉通知
|
CompanyUser companyUser = companyUserMapper.selectOne(new QueryWrapper<CompanyUser>()
|
.eq("USER_ID",wTransfer.getInUserId())
|
.eq("ROOT_DEPART_ID",wTransfer.getRootDepartId())
|
.eq("DELETED",0)
|
);
|
//处理通知
|
Constants.Notices_Type_Transfer notices_type_transfer = Constants.Notices_Type_Transfer.checkEnum(wTransfer.getType());
|
if(Objects.isNull(notices_type_transfer)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转库单类型信息【"+wTransfer.getType()+"】");
|
}
|
noticesExtService.dealNotice(wTransfer.getId(),notices_type_transfer.getNoticeInType(),null);
|
|
wTransfer.setStatus(Constants.TWO);
|
wTransfer.setInActdate(new Date());
|
wTransfer.setUpdateTime(new Date());
|
wTransfer.setUpdateUser(loginUserInfo.getId());
|
wTransferMapper.updateById(wTransfer);
|
}
|
|
|
/**
|
* 转库单退回
|
* @param id
|
* @param loginUserInfo
|
* @return
|
*/
|
@Override
|
@Transactional
|
public ApiResponse wTransferReturnForStandard(Integer id,LoginUserInfo loginUserInfo){
|
WTransfer wTransfer = wTransferExtMapper.selectOne(new QueryWrapper<WTransfer>().eq("id",id));
|
if(Objects.isNull(wTransfer)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转库单对象信息");
|
}
|
if(wTransfer.getStatus()!=Constants.ONE){
|
throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), "单据状态错误无法进行退回,请检查单据状态");
|
}
|
CompanyUser companyUser = companyUserExtMapper.selectOne(
|
new QueryWrapper<CompanyUser>().eq("USER_ID",wTransfer.getInUserId())
|
.eq("ROOT_DEPART_ID",wTransfer.getRootDepartId())
|
.eq("DELETED",0));
|
if(Objects.isNull(companyUser)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到操作员工信息");
|
}
|
Department department = departmentExtMapper.selectById(companyUser.getDepartmentId());
|
if(Objects.isNull(department)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到操作员工班组信息");
|
}
|
List<WTransferDetail> wTransferDetailList = wTransferDetailMapper.selectList(
|
new QueryWrapper<WTransferDetail>().eq("TRANSFER_ID",wTransfer.getId())
|
);
|
if(wTransferDetailList.size()==Constants.ZERO){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转库单明细信息");
|
}
|
//仓库数据
|
Warehouse warehouse = warehouseMapper.selectById(wTransfer.getOutWarehouseId());
|
if(Objects.isNull(warehouse)){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到入库仓库数据");
|
}
|
|
List<WOutbound> wOutboundOutList = wOutboundMapper.selectList(new QueryWrapper<WOutbound>()
|
.eq("ORIGIN_ID",wTransfer.getId())
|
.eq("ORIGIN_TYPE",3)
|
);
|
if(wOutboundOutList.size() == Constants.ZERO){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未查询到转库单对应出库单数据!");
|
}else if(wOutboundOutList.size() > Constants.ONE){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "转库单对应出库单数据异常");
|
}
|
WOutbound wOutboundOut = wOutboundOutList.get(Constants.ZERO);
|
//1、由于生成转库单是根据操作人 仓位分组, 所以转库单上只会有一个入库仓库
|
//2、生成入库单单头
|
WOutbound wOutbound = new WOutbound();
|
wOutbound.setCreateUser(loginUserInfo.getId());
|
wOutbound.setCreateTime(new Date());
|
wOutbound.setRootDepartId(loginUserInfo.getRootDepartment().getId());
|
wOutbound.setDepartId(loginUserInfo.getComDepartment().getId());
|
wOutbound.setCode(wOutboundService.getNextInCode(loginUserInfo.getCompany().getId()));//单据编码 RK-20220519-0001
|
wOutbound.setOrigin(Constants.ONE);
|
wOutbound.setValidDate(new Date());
|
wOutbound.setType(Constants.ONE);
|
wOutbound.setOriginType(3);
|
wOutbound.setOriginCode(wTransfer.getCode());
|
wOutbound.setOriginId(wTransfer.getId());
|
wOutbound.setUserId(loginUserInfo.getId());
|
wOutbound.setWarehouseId(wTransfer.getOutWarehouseId());
|
wOutbound.setDealDate(new Date());
|
wOutbound.setStatus(Constants.ONE);
|
wOutbound.setPlanDate(wTransfer.getInPlandate());
|
wOutbound.setBillType(29);
|
wOutboundExtMapper.insert(wOutbound);
|
|
List<WOutboundRecord> wOutboundDetailOutList = wOutboundRecordMapper.selectList(
|
new QueryWrapper<WOutboundRecord>()
|
.select(" OUTBOUND_ID , DETAIL_ID , MATERIAL_ID , UNIT_ID , WAREHOUSE_ID , BATCH , LOCATION_ID , QUALITY_TYPE , PROCEDURE_ID , sum(NUM) as NUM ")
|
.eq("OUTBOUND_ID",wOutboundOut.getId())
|
.groupBy(" OUTBOUND_ID, DETAIL_ID , MATERIAL_ID , UNIT_ID , WAREHOUSE_ID , BATCH , LOCATION_ID , QUALITY_TYPE , PROCEDURE_ID ")
|
);
|
|
for (WOutboundRecord wOutboundDetail:wOutboundDetailOutList) {
|
WOutboundDetail wOutboundInDetail = new WOutboundDetail();
|
wOutboundInDetail.setId(null);
|
wOutboundInDetail.setOutboundId(wOutbound.getId());
|
wOutboundInDetail.setDeleted(Constants.ZERO);
|
wOutboundInDetail.setCreateUser(loginUserInfo.getId());
|
wOutboundInDetail.setCreateTime(new Date());
|
wOutboundInDetail.setRootDepartId(loginUserInfo.getRootDepartment().getId());
|
wOutboundInDetail.setMaterialId(wOutboundDetail.getMaterialId());
|
wOutboundInDetail.setUnitId(wOutboundDetail.getUnitId());
|
wOutboundInDetail.setBatch(wOutboundDetail.getBatch());
|
wOutboundInDetail.setNum(wOutboundDetail.getNum());
|
wOutboundInDetail.setDoneDate(new Date());
|
wOutboundInDetail.setDoneNum(wOutboundDetail.getNum());
|
wOutboundInDetail.setWarehouseId(wOutbound.getWarehouseId());
|
wOutboundInDetail.setStatus(Constants.ONE);
|
wOutboundInDetail.setQualityType(wOutboundDetail.getQualityType());
|
wOutboundInDetail.setProcedureId(wOutboundDetail.getProcedureId());
|
wOutboundInDetail.setLocationId(wOutboundDetail.getLocationId());
|
wOutboundDetailExtMapper.insert(wOutboundInDetail);
|
|
//记录库存变动记录
|
wStockRecordExtService.saveRecord(Constants.ONE,wOutboundDetail.getDetailId(),loginUserInfo);
|
|
List<WOutboundRecord> wOutboundRecordOutListByDetail = wOutboundRecordMapper.selectList(
|
new QueryWrapper<WOutboundRecord>().eq("DETAIL_ID",wOutboundDetail.getDetailId())
|
);
|
for (WOutboundRecord wOutboundRecord:wOutboundRecordOutListByDetail) {
|
WOutboundRecord wOutboundRecordIn = wOutboundRecord;
|
wOutboundRecordIn.setId(null);
|
wOutboundRecordIn.setCreateUser(loginUserInfo.getId());
|
wOutboundRecordIn.setCreateTime(new Date());
|
wOutboundRecordIn.setWarehouseId(wOutbound.getWarehouseId());
|
wOutboundRecordIn.setOutboundId(wOutboundInDetail.getOutboundId());
|
wOutboundRecordIn.setDetailId(wOutboundInDetail.getId());
|
wOutboundRecordIn.setLocationId(wOutboundRecord.getLocationId());
|
wOutboundRecordIn.setQualityType(wOutboundRecord.getQualityType());
|
wOutboundRecordIn.setProcedureId(wOutboundRecord.getProcedureId());
|
wOutboundRecordExtMapper.insert(wOutboundRecordIn);
|
}
|
QueryWrapper wrapper = new QueryWrapper<WStock>();
|
wrapper.eq("ROOT_DEPART_ID", wOutbound.getRootDepartId());
|
wrapper.eq("MATERIAL_ID", wOutboundInDetail.getMaterialId());
|
wrapper.eq("WAREHOUSE_ID", wOutbound.getWarehouseId());
|
wrapper.eq("QUALITY_TYPE", wOutboundInDetail.getQualityType());
|
if(!Objects.isNull(wOutboundInDetail.getProcedureId())){
|
wrapper.eq("PROCEDURE_ID" , wOutboundInDetail.getProcedureId());
|
}else{
|
wrapper.apply("PROCEDURE_ID is null ");
|
}
|
if(StringUtils.isNotBlank(wOutboundInDetail.getBatch())){
|
wrapper.eq("BATCH" , wOutboundInDetail.getBatch());
|
}else{
|
wrapper.apply("BATCH is null ");
|
}
|
wrapper.eq(!Objects.isNull(wOutboundInDetail.getLocationId())&&warehouse.getUseLocation()==Constants.ONE,"LOCATION_ID", wOutboundInDetail.getLocationId());
|
wrapper.eq("DELETED",0);
|
//更新库存
|
WStock wStock = wStockExtMapper.selectOne(wrapper);
|
if (Objects.isNull(wStock)) {
|
WStock newWStock = new WStock();
|
newWStock.setCreateTime(new Date());
|
newWStock.setCreateUser(loginUserInfo.getId());
|
newWStock.setRootDepartId(wOutboundInDetail.getRootDepartId());
|
newWStock.setMaterialId(wOutboundInDetail.getMaterialId());
|
newWStock.setBatch(wOutboundInDetail.getBatch());
|
newWStock.setDeleted(Constants.ZERO);
|
newWStock.setWarehouseId(warehouse.getId());
|
newWStock.setProcedureId(wOutboundInDetail.getProcedureId());
|
newWStock.setQualityType(wOutboundInDetail.getQualityType());
|
//此仓库 开启仓位
|
if(warehouse.getUseLocation()==Constants.ONE){
|
newWStock.setLocationId(wOutboundInDetail.getLocationId());
|
}
|
newWStock.setUnitId(wOutboundInDetail.getUnitId());
|
newWStock.setNum(wOutboundInDetail.getDoneNum());
|
wStockExtMapper.insert(newWStock);
|
}else{
|
wStock.setNum(wStock.getNum().add(wOutboundInDetail.getDoneNum()));
|
wStockExtMapper.updateById(wStock);
|
}
|
}
|
|
wTransfer.setStatus(4);
|
wTransfer.setInActdate(new Date());
|
wTransferMapper.updateById(wTransfer);
|
|
//记录操作记录 1、转库单 2、出入库单
|
WHistory wHistoryTransfer = wTransfer.toWHistory(loginUserInfo);
|
wHistoryMapper.insert(wHistoryTransfer);
|
WHistory wHistory = wOutbound.toWHistory(loginUserInfo.getId());
|
wHistoryMapper.insert(wHistory);
|
|
noticesExtService.dealNotice(wTransfer.getId(),Constants.Notices_Type_Transfer.checkEnum(wTransfer.getType()).getNoticeInType(),null);
|
|
|
return ApiResponse.success("退回成功");
|
}
|
|
|
|
/********************************************************************* 调整业务 结束 *********************************************************************/
|
}
|