|
|
package com.glxp.api.service.inv;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.glxp.api.common.enums.ResultEnum;
|
|
|
import com.glxp.api.common.res.BaseResponse;
|
|
|
import com.glxp.api.common.util.ResultVOUtils;
|
|
|
import com.glxp.api.dao.basic.UdiRelevanceDao;
|
|
|
import com.glxp.api.dao.inv.InvCountOrderDetailMapper;
|
|
|
import com.glxp.api.entity.basic.UdiEntity;
|
|
|
import com.glxp.api.entity.basic.UdiRelevanceEntity;
|
|
|
import com.glxp.api.entity.inv.InvCountOrderDetailEntity;
|
|
|
import com.glxp.api.req.basic.FilterUdiInfoRequest;
|
|
|
import com.glxp.api.req.basic.FilterUdiRelRequest;
|
|
|
import com.glxp.api.req.inv.FilterInvCountCodesRequest;
|
|
|
import com.glxp.api.res.basic.UdiRelevanceResponse;
|
|
|
import com.glxp.api.util.IntUtil;
|
|
|
import com.glxp.api.util.udi.FilterUdiUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.glxp.api.entity.inv.InvCountCodesEntity;
|
|
|
import com.glxp.api.dao.inv.InvCountCodesMapper;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
|
|
|
@Service
|
|
|
public class InvCountCodesService extends ServiceImpl<InvCountCodesMapper, InvCountCodesEntity> {
|
|
|
@Resource
|
|
|
private InvCountCodesMapper invCountCodesDao;
|
|
|
@Resource
|
|
|
private InvCountOrderDetailMapper invCountOrderDetailDao;
|
|
|
@Resource
|
|
|
private UdiRelevanceDao udiRelevanceDao;
|
|
|
|
|
|
|
|
|
public List<InvCountCodesEntity> filterList(FilterInvCountCodesRequest codesRequest) {
|
|
|
if (null == codesRequest) {
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
|
if (null != codesRequest.getPage() && null != codesRequest.getLimit()) {
|
|
|
PageHelper.offsetPage((codesRequest.getPage() - 1) * codesRequest.getLimit(), codesRequest.getLimit());
|
|
|
}
|
|
|
return invCountCodesDao.filterList(codesRequest);
|
|
|
}
|
|
|
|
|
|
|
|
|
public BaseResponse deleteCode(FilterInvCountCodesRequest codesRequest) {
|
|
|
//查询盘点单据码详情
|
|
|
List<InvCountCodesEntity> list = invCountCodesDao.filterList(codesRequest);
|
|
|
if (CollUtil.isEmpty(list)) {
|
|
|
return ResultVOUtils.error(ResultEnum.DATA_NOT);
|
|
|
}
|
|
|
|
|
|
UdiEntity udi = FilterUdiUtils.getUdi(list.get(0).getCode());
|
|
|
InvCountOrderDetailEntity invCountOrderDetailEntity = invCountOrderDetailDao.selectOrderDetail(null, list.get(0).getOrderIdFk(), udi.getUdi(), udi.getBatchNo(), udi.getProduceDate(), udi.getExpireDate());
|
|
|
|
|
|
InvCountCodesEntity countCodes = list.get(0);
|
|
|
if (countCodes.getCount() == 1) {
|
|
|
//条码数量等于1,删除条码
|
|
|
invCountCodesDao.deleteById(list.get(0).getId());
|
|
|
} else {
|
|
|
//条码数量大于1,将条码数量 -1
|
|
|
countCodes.setCount(countCodes.getCount() - 1);
|
|
|
invCountCodesDao.updateById(countCodes);
|
|
|
}
|
|
|
|
|
|
//将此单据详情的盘点数量 - 1
|
|
|
invCountOrderDetailEntity.setCountNum(invCountOrderDetailEntity.getCountNum() - getActCount(udi.getUdi()));
|
|
|
invCountOrderDetailDao.updateById(invCountOrderDetailEntity);
|
|
|
return ResultVOUtils.success();
|
|
|
}
|
|
|
|
|
|
|
|
|
public BaseResponse addCode(InvCountCodesEntity invCountCodes) {
|
|
|
//解析条码
|
|
|
UdiEntity udi = FilterUdiUtils.getUdi(invCountCodes.getCode());
|
|
|
InvCountOrderDetailEntity invCountOrderDetailEntity = null;
|
|
|
List<UdiRelevanceResponse> udiRelevanceEntities = udiRelevanceDao.selectGroupByNameCode(udi.getUdi(), false);
|
|
|
|
|
|
if (CollUtil.isNotEmpty(udiRelevanceEntities)) {
|
|
|
for (UdiRelevanceResponse udiRelevanceEntity : udiRelevanceEntities) {
|
|
|
invCountOrderDetailEntity = invCountOrderDetailDao.selectOrderDetail(udiRelevanceEntity.getId() + "", invCountCodes.getOrderIdFk(), null, udi.getBatchNo(), null, null);
|
|
|
}
|
|
|
}
|
|
|
//查询单据详情,是否包含此产品
|
|
|
if (null == invCountOrderDetailEntity) {
|
|
|
return ResultVOUtils.error(ResultEnum.DATA_NOT, "当前仓库或货位不存在此产品");
|
|
|
}
|
|
|
|
|
|
//判断条码是否重复
|
|
|
FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest();
|
|
|
codesRequest.setOrderIdFk(invCountCodes.getOrderIdFk());
|
|
|
codesRequest.setCode(invCountCodes.getCode());
|
|
|
List<InvCountCodesEntity> codesList = invCountCodesDao.filterList(codesRequest);
|
|
|
if (CollUtil.isEmpty(codesList)) {
|
|
|
//新增条码
|
|
|
invCountCodes.setProductId(invCountOrderDetailEntity.getProductId());
|
|
|
invCountCodes.setBatchNo(udi.getBatchNo());
|
|
|
invCountCodes.setCount(1);
|
|
|
invCountCodesDao.insert(invCountCodes);
|
|
|
} else {
|
|
|
if (StrUtil.isNotBlank(udi.getBatchNo()) && StrUtil.isNotBlank(udi.getSerialNo())) {
|
|
|
//条码为标准条码,批次号和序列号都存在,条码重复
|
|
|
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, "条码重复!");
|
|
|
} else if ((StrUtil.isBlank(udi.getBatchNo()) && StrUtil.isBlank(udi.getSerialNo()) || (StrUtil.isNotBlank(udi.getBatchNo()) && StrUtil.isBlank(udi.getSerialNo())))) {
|
|
|
//批次号或序列号,其中一个字段为空,直接修改数量
|
|
|
InvCountCodesEntity countCodes = codesList.get(0);
|
|
|
countCodes.setCount(countCodes.getCount() + 1);
|
|
|
invCountCodesDao.updateById(countCodes);
|
|
|
} else {
|
|
|
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, "条码重复!");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//修改码明细
|
|
|
invCountOrderDetailEntity.setCountNum(invCountOrderDetailEntity.getCountNum() + getActCount(udi.getUdi()));
|
|
|
invCountOrderDetailDao.updateById(invCountOrderDetailEntity);
|
|
|
return ResultVOUtils.success();
|
|
|
}
|
|
|
|
|
|
|
|
|
public Long getCountOrderCodesNum(String orderIdFk) {
|
|
|
return invCountCodesDao.countByOrderId(orderIdFk);
|
|
|
}
|
|
|
|
|
|
|
|
|
public int getActCount(String nameCode) {
|
|
|
FilterUdiRelRequest filterUdiInfoRequest = new FilterUdiRelRequest();
|
|
|
filterUdiInfoRequest.setNameCode(nameCode);
|
|
|
List<UdiRelevanceResponse> list = udiRelevanceDao.filterUdiRelevance(filterUdiInfoRequest);
|
|
|
UdiRelevanceResponse udiInfoBean = list.get(0);
|
|
|
if (udiInfoBean != null) {
|
|
|
if (IntUtil.value(udiInfoBean.getIsUseDy()) && udiInfoBean.getDiType() != 2) {
|
|
|
if (udiInfoBean.getBhzxxsbzsl() == 0)
|
|
|
return udiInfoBean.getZxxsbzbhsydysl();
|
|
|
else
|
|
|
return udiInfoBean.getZxxsbzbhsydysl() * udiInfoBean.getBhzxxsbzsl();
|
|
|
} else {
|
|
|
return udiInfoBean.getBhzxxsbzsl();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
}
|