You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
udi-wms-java/src/main/java/com/glxp/api/service/inv/InvCountCodesService.java

150 lines
6.7 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
}
}