You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
576 lines
30 KiB
576 lines
30 KiB
package jnpf.service.impl; |
|
|
|
import cn.hutool.core.bean.BeanUtil; |
|
import cn.hutool.core.collection.CollUtil; |
|
import cn.hutool.core.date.LocalDateTimeUtil; |
|
import cn.hutool.core.util.StrUtil; |
|
import cn.hutool.extra.qrcode.QrCodeUtil; |
|
import cn.xuyanwu.spring.file.storage.FileInfo; |
|
import cn.xuyanwu.spring.file.storage.MockMultipartFile; |
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|
import jnpf.base.DictionaryDataApi; |
|
import jnpf.base.UserInfo; |
|
import jnpf.base.entity.DictionaryDataEntity; |
|
import jnpf.constant.FileTypeConstant; |
|
import jnpf.constant.PermissionConst; |
|
import jnpf.entity.*; |
|
import jnpf.enump.ReceiveGoodsMainEnum; |
|
import jnpf.exception.DataException; |
|
import jnpf.file.FileApi; |
|
import jnpf.file.FileUploadApi; |
|
import jnpf.mapper.TReceiveGoodsMainMapper; |
|
import jnpf.model.dto.ReceiveGoodsMainDto; |
|
import jnpf.permission.entity.OrganizeEntity; |
|
import jnpf.permission.service.OrganizeService; |
|
import jnpf.service.ILibraryService; |
|
import jnpf.service.TBookGoWhereService; |
|
import jnpf.service.TReceiveGoodsBooksService; |
|
import jnpf.service.TReceiveGoodsMainService; |
|
import jnpf.util.UserProvider; |
|
import jnpf.utils.SnowFlake; |
|
import lombok.AllArgsConstructor; |
|
import org.springframework.stereotype.Service; |
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
import java.io.ByteArrayOutputStream; |
|
import java.io.File; |
|
import java.io.FileOutputStream; |
|
import java.nio.file.Files; |
|
import java.nio.file.Paths; |
|
import java.time.LocalDateTime; |
|
import java.util.*; |
|
import java.util.concurrent.CompletableFuture; |
|
import java.util.stream.Collectors; |
|
|
|
/** |
|
* 收货信息主表(TReceiveGoodsMain)表服务实现类 |
|
* |
|
* @author common |
|
* @since 2024-10-25 10:33:01 |
|
*/ |
|
@Service("tReceiveGoodsMainService") |
|
@AllArgsConstructor |
|
public class TReceiveGoodsMainServiceImpl extends ServiceImpl<TReceiveGoodsMainMapper, TReceiveGoodsMain> implements TReceiveGoodsMainService { |
|
private final RedisSerialNumberUtils redisSerialNumberUtils; |
|
private final ILibraryService libraryService; |
|
private final OrganizeService organizeService; |
|
private final TReceiveGoodsBooksService receiveGoodsBooksService; |
|
private final TBookGoWhereService bookGoWhereService; |
|
private final FileUploadApi fileUploadApi; |
|
private final DictionaryDataApi dictionaryDataApi; |
|
private final FileApi fileApi; |
|
|
|
@Override |
|
public IPage<TReceiveGoodsMain> selectPage(IPage<TReceiveGoodsMain> iPage, Map<String, Object> params) { |
|
return this.baseMapper.selectPage(iPage, params); |
|
} |
|
|
|
@Override |
|
@Transactional |
|
public String newReceipt(ReceiveGoodsMainDto.NewReceiptParam param) { |
|
if (StrUtil.isBlank(param.getSaveType())) { |
|
throw new DataException("请选择保存类型"); |
|
} |
|
ReceiveGoodsMainEnum.OrderTypeEnum orderTypeEnum = ReceiveGoodsMainEnum.OrderTypeEnum.getEnumByCode(param.getOrderType()); |
|
if (null == orderTypeEnum) { |
|
throw new DataException("请选择签收类型"); |
|
} |
|
ReceiveGoodsMainEnum.PackageSituationEnum packageSituationEnum = ReceiveGoodsMainEnum.PackageSituationEnum.getEnumByCode(param.getPackageSituation()); |
|
if (null == packageSituationEnum) { |
|
throw new DataException("请选择包装情况"); |
|
} |
|
//校验是否存在图书信息 |
|
if (CollUtil.isEmpty(param.getBunchingInfoList())) { |
|
throw new DataException("请扫描/添加图书"); |
|
} |
|
|
|
ReceiveGoodsMainEnum.MainStatusEnum mainStatusEnum; |
|
//校验主状态 |
|
if (StrUtil.equals(param.getSaveType(), "1")) { |
|
mainStatusEnum = ReceiveGoodsMainEnum.MainStatusEnum.TO_BE_SIGNED_FOR; |
|
} else { |
|
if (orderTypeEnum == ReceiveGoodsMainEnum.OrderTypeEnum.VERSION_LIBRARY) { |
|
mainStatusEnum = ReceiveGoodsMainEnum.MainStatusEnum.LISTING; |
|
} else { |
|
mainStatusEnum = ReceiveGoodsMainEnum.MainStatusEnum.UNDIVIDED_REACTOR; |
|
} |
|
} |
|
TReceiveGoodsMain receiveGoodsMain = new TReceiveGoodsMain(); |
|
UserInfo user = UserProvider.getUser(); |
|
//校验是否为新增 |
|
if (null == param.getId()) { |
|
String idPrefix = "SH" + LocalDateTimeUtil.format(LocalDateTime.now(), "yyyyMMdd"); |
|
receiveGoodsMain.setId(SnowFlake.nextId() + ""); |
|
String receiptNumber = param.getReceiptNumber(); |
|
if (StrUtil.isBlank(receiptNumber)) { |
|
receiptNumber = String.format("%s%03d", idPrefix, redisSerialNumberUtils.generateSerialNumber(idPrefix)); |
|
} |
|
receiveGoodsMain.setReceiptNumber(receiptNumber); |
|
receiveGoodsMain.setCreateId(user.getUserId()); |
|
receiveGoodsMain.setCreateTime(LocalDateTime.now()); |
|
receiveGoodsMain.setCreateName(user.getUserName()); |
|
} else { |
|
receiveGoodsMain.setId(param.getId()); |
|
} |
|
////构建实体类 |
|
receiveGoodsMain.setType(orderTypeEnum.getCode()); |
|
receiveGoodsMain.setMainStatus(mainStatusEnum.getCode()); |
|
receiveGoodsMain.setMainStatusName(mainStatusEnum.getDescribe()); |
|
receiveGoodsMain.setPackageSituation(packageSituationEnum.getCode()); |
|
receiveGoodsMain.setPackageSituationName(packageSituationEnum.getDescribe()); |
|
receiveGoodsMain.setPackageQuantity(param.getPackageQuantity()); |
|
receiveGoodsMain.setDeliveryParty(param.getDeliveryParty()); |
|
receiveGoodsMain.setReceiveTime(param.getReceiveTime()); |
|
receiveGoodsMain.setSignPersonTime(LocalDateTime.now()); |
|
receiveGoodsMain.setUpdateId(user.getUserId()); |
|
receiveGoodsMain.setUpdateTime(LocalDateTime.now()); |
|
receiveGoodsMain.setUpdateName(user.getUserName()); |
|
//查询创建人单位及部门 |
|
if (StrUtil.isNotBlank(user.getOrganizeId())) { |
|
Optional<OrganizeEntity> deptOptional = organizeService.lambdaQuery() |
|
.eq(OrganizeEntity::getId, user.getOrganizeId()) |
|
.eq(OrganizeEntity::getEnabledMark, "1").list().stream().findFirst(); |
|
if (deptOptional.isPresent()) { |
|
OrganizeEntity dept = deptOptional.get(); |
|
OrganizeEntity corp = getCorp(dept); |
|
receiveGoodsMain.setCreateDeptName(dept.getFullName()); |
|
receiveGoodsMain.setCreateCorpName(corp.getFullName()); |
|
receiveGoodsMain.setCreateDeptId(dept.getId()); |
|
receiveGoodsMain.setCreateCorpId(corp.getId()); |
|
} |
|
} |
|
this.saveOrUpdate(receiveGoodsMain); |
|
//版本馆直接生成二维码 |
|
if (mainStatusEnum == ReceiveGoodsMainEnum.MainStatusEnum.LISTING) { |
|
//生成二维码 |
|
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); |
|
DictionaryDataEntity data = dictionaryDataApi.getByTypeDataCode("SampleLibrary", "xtaddr").getData(); |
|
String systemUrl = "http://61.169.37.106:9172/api/file/Image/preview/"; |
|
if (null != data) { |
|
systemUrl = data.getDescription(); |
|
} |
|
QrCodeUtil.generate(systemUrl, 1000, 1000, "", byteArrayOutputStream); |
|
MockMultipartFile mockMultipartFile = new MockMultipartFile("上架.png", "上架.png", "text/plain", byteArrayOutputStream.toByteArray()); |
|
|
|
FileInfo preview = fileUploadApi.uploadFile(mockMultipartFile, fileApi.getPath(FileTypeConstant.BIVISUALPATH), "preview", "上架.png"); |
|
this.lambdaUpdate() |
|
.set(TReceiveGoodsMain::getListingQrCode, preview.getFilename()) |
|
.set(TReceiveGoodsMain::getMainStatus, mainStatusEnum.getCode()) |
|
.set(TReceiveGoodsMain::getMainStatusName, mainStatusEnum.getDescribe()) |
|
.set(TReceiveGoodsMain::getUpdateId, UserProvider.getLoginUserId()) |
|
.set(TReceiveGoodsMain::getUpdateTime, LocalDateTime.now()) |
|
.set(TReceiveGoodsMain::getUpdateName, UserProvider.getUser().getUserName()) |
|
.eq(TReceiveGoodsMain::getId, param.getId()) |
|
.update(); |
|
} |
|
//todo 保存收货书籍信息 |
|
saveReceivingBookInformation(receiveGoodsMain, param); |
|
return receiveGoodsMain.getId(); |
|
} |
|
|
|
//保存收货书籍信息 |
|
private void saveReceivingBookInformation(TReceiveGoodsMain receiveGoodsMain, ReceiveGoodsMainDto.NewReceiptParam param) { |
|
//当提交为更新时删除所有签收图书信息,防止有问题 |
|
if (null != param.getId()) { |
|
receiveGoodsBooksService.lambdaUpdate() |
|
.eq(TReceiveGoodsBooks::getRelationId, receiveGoodsMain.getId()) |
|
.remove(); |
|
} |
|
List<ReceiveGoodsMainDto.BunchingInfo> bunchingInfoList = param.getBunchingInfoList(); |
|
Integer quantityReceived = receiveGoodsMain.getQuantityReceived(); |
|
if (null == quantityReceived) { |
|
quantityReceived = 0; |
|
} |
|
final UserInfo user = UserProvider.getUser(); |
|
//计算签收数量 |
|
for (ReceiveGoodsMainDto.BunchingInfo bunchingInfo : bunchingInfoList) { |
|
quantityReceived += bunchingInfo.getSignedQuantity(); |
|
//新增签收图书信息 |
|
//异步创建 |
|
CompletableFuture.runAsync(() -> { |
|
TReceiveGoodsBooks tReceiveGoodsBooks = BeanUtil.copyProperties(bunchingInfo, TReceiveGoodsBooks.class); |
|
tReceiveGoodsBooks.setId(SnowFlake.nextId()); |
|
tReceiveGoodsBooks.setRelationId(receiveGoodsMain.getId()); |
|
//查询该单位往某部门需要送出图书的数量 |
|
int sum = bookGoWhereService.lambdaQuery() |
|
.eq(TBookGoWhere::getBookNumber, bunchingInfo.getBookNumber()) |
|
// .eq(TBookGoWhere::getTargetName, bunchingInfo.getBookName()) |
|
.eq(TBookGoWhere::getCreateCorpId, receiveGoodsMain.getCreateCorpId()) |
|
//todo 非样书室时根据所属类型及部门id去查询应送数量 |
|
//版本馆根据类型匹配 |
|
.eq(!StrUtil.equals(param.getOrderType(), "3"), TBookGoWhere::getOrderType, param.getOrderType()) |
|
//业务部根据部门id匹配 |
|
// .eq(StrUtil.equals(param.getOrderType(), "1"), TBookGoWhere::getCreateDeptId, receiveGoodsMain.getCreateDeptId()) |
|
.eq(TBookGoWhere::getWarehouseEntryFlag, "0") |
|
.eq(TBookGoWhere::getType, "0") |
|
.eq(TBookGoWhere::getDelFlag, "0") |
|
.list() |
|
.stream().mapToInt(TBookGoWhere::getShouldSend).sum(); |
|
//应发数量 |
|
tReceiveGoodsBooks.setShouldSend(sum); |
|
//实发数量默认与应发数量相同 |
|
tReceiveGoodsBooks.setActualSend(sum); |
|
tReceiveGoodsBooks.setCreateId(user.getUserId()); |
|
tReceiveGoodsBooks.setCreateName(user.getUserName()); |
|
tReceiveGoodsBooks.setCreateTime(LocalDateTime.now()); |
|
receiveGoodsBooksService.save(tReceiveGoodsBooks); |
|
}); |
|
} |
|
//修改收货数量 |
|
this.lambdaUpdate() |
|
.set(TReceiveGoodsMain::getQuantityReceived, quantityReceived) |
|
.eq(TReceiveGoodsMain::getId, receiveGoodsMain.getId()) |
|
.update(); |
|
} |
|
|
|
|
|
//根据部门递归查询公司 |
|
private OrganizeEntity getCorp(OrganizeEntity dept) { |
|
if (StrUtil.equals(dept.getCategory(), PermissionConst.COMPANY)) { |
|
return dept; |
|
} |
|
OrganizeEntity info = organizeService.getInfo(dept.getParentId()); |
|
if (null == info) { |
|
return dept; |
|
} |
|
return getCorp(info); |
|
} |
|
|
|
@Override |
|
public ReceiveGoodsMainDto.BunchingInfo getBunchingInfoByBookNumber(String bookNumber) { |
|
if (StrUtil.isBlank(bookNumber)) { |
|
throw new DataException("请输入图书编号"); |
|
} |
|
//todo 新增下印册书 |
|
//查询图书信息 |
|
return libraryService.getBunchingInfoByBookNumber(bookNumber); |
|
} |
|
|
|
@Override |
|
public void delete(String id, boolean checkUser) { |
|
//校验是否存在 |
|
TReceiveGoodsMain receiveGoodsMain = this.lambdaQuery() |
|
.eq(TReceiveGoodsMain::getId, id) |
|
.eq(TReceiveGoodsMain::getDelFlag, "0") |
|
.one(); |
|
if (null == receiveGoodsMain) { |
|
throw new DataException("该信息不存在"); |
|
} |
|
//校验是否为自己创建 |
|
if (checkUser && !StrUtil.equals(UserProvider.getUser().getUserId(), receiveGoodsMain.getCreateId())) { |
|
throw new DataException("不可删除[1r]"); |
|
} |
|
//校验是否待签收状态 |
|
if (!StrUtil.equals(ReceiveGoodsMainEnum.MainStatusEnum.TO_BE_SIGNED_FOR.getCode(), receiveGoodsMain.getMainStatus())) { |
|
throw new DataException("不可删除[2r]"); |
|
} |
|
//删除收货单 |
|
this.lambdaUpdate() |
|
.set(TReceiveGoodsMain::getDelFlag, "1") |
|
.eq(TReceiveGoodsMain::getId, id) |
|
.update(); |
|
//删除验收图书 |
|
receiveGoodsBooksService.lambdaUpdate() |
|
.set(TReceiveGoodsBooks::getDelFlag, "1") |
|
.eq(TReceiveGoodsBooks::getRelationId, receiveGoodsMain.getId()) |
|
.update(); |
|
} |
|
|
|
|
|
@Override |
|
public IPage<ReceiveGoodsMainDto.TReceiveGoodsMainEntity> getReceiveGoodsList(ReceiveGoodsMainDto.GetReceiveGoodsListParam param) { |
|
ReceiveGoodsMainEnum.OrderTypeEnum orderTypeEnum = ReceiveGoodsMainEnum.OrderTypeEnum.getEnumByCode(param.getOrderType()); |
|
if (null == orderTypeEnum) { |
|
throw new DataException("请选择签收类型"); |
|
} |
|
//样书室根据userId查询 |
|
if (orderTypeEnum == ReceiveGoodsMainEnum.OrderTypeEnum.SAMPLE_BOOKSTORE) { |
|
param.setUserId(UserProvider.getUser().getUserId()); |
|
} else { |
|
if (StrUtil.isNotBlank(UserProvider.getUser().getOrganizeId())) { |
|
Optional<OrganizeEntity> deptOptional = organizeService.lambdaQuery() |
|
.eq(OrganizeEntity::getId, UserProvider.getUser().getOrganizeId()) |
|
.eq(OrganizeEntity::getEnabledMark, "1").list().stream().findFirst(); |
|
if (deptOptional.isPresent()) { |
|
OrganizeEntity dept = deptOptional.get(); |
|
OrganizeEntity corp = getCorp(dept); |
|
param.setCorpId(corp.getId()); |
|
} |
|
} |
|
} |
|
try { |
|
LocalDateTimeUtil.parse(param.getStartTime(), "yyyy-MM-dd HH:mm:ss"); |
|
LocalDateTimeUtil.parse(param.getEndTime(), "yyyy-MM-dd HH:mm:ss"); |
|
} catch (Exception e) { |
|
throw new DataException("时间格式错误,应为yyyy-MM-dd HH:mm:ss"); |
|
} |
|
return this.getBaseMapper().getReceiveGoodsList(new Page<>(param.getCurrent(), param.getSize()), param); |
|
} |
|
|
|
@Override |
|
public ReceiveGoodsMainDto.TReceiveGoodsMainEntity getInfoById(String id) { |
|
return this.baseMapper.getInfoById(id); |
|
} |
|
|
|
@Override |
|
public List<ReceiveGoodsMainDto.TBookGoWhereEntity> getStackingInformation(Long id, String orderType) { |
|
TReceiveGoodsBooks receiveGoodsBooks = receiveGoodsBooksService.getById(id); |
|
if (null == receiveGoodsBooks) { |
|
throw new DataException("该选书不存在"); |
|
} |
|
//校验该选书是否进行过保存分堆信息 |
|
boolean exists = bookGoWhereService.lambdaQuery() |
|
.eq(TBookGoWhere::getDelFlag, "0") |
|
.eq(TBookGoWhere::getType, "1") |
|
.eq(TBookGoWhere::getBookNumber, receiveGoodsBooks.getBookNumber()) |
|
.eq(TBookGoWhere::getRelationId, receiveGoodsBooks.getId()) |
|
.exists(); |
|
if (exists) { |
|
//查询已有数据 |
|
return bookGoWhereService.getStackingInformationByRelationId(receiveGoodsBooks.getBookNumber(), receiveGoodsBooks.getId()); |
|
} else { |
|
if (StrUtil.isNotBlank(UserProvider.getUser().getOrganizeId())) { |
|
Optional<OrganizeEntity> deptOptional = organizeService.lambdaQuery() |
|
.eq(OrganizeEntity::getId, UserProvider.getUser().getOrganizeId()) |
|
.eq(OrganizeEntity::getEnabledMark, "1").list().stream().findFirst(); |
|
if (deptOptional.isPresent()) { |
|
OrganizeEntity dept = deptOptional.get(); |
|
OrganizeEntity corp = getCorp(dept); |
|
//查询初始化去向数据 |
|
return bookGoWhereService.getStackingInformation(receiveGoodsBooks.getBookNumber(), corp.getId()); |
|
} |
|
} |
|
return null; |
|
|
|
} |
|
//todo 添加已发数 |
|
} |
|
|
|
@Override |
|
public IPage<ReceiveGoodsMainDto.TReceiveGoodsBooksEntity> getBookListById(ReceiveGoodsMainDto.GetBookListByIdParam param) { |
|
return receiveGoodsBooksService.getBookListByRelationId(param); |
|
} |
|
|
|
@Override |
|
@Transactional |
|
public void saveStackingInformation(ReceiveGoodsMainDto.SaveStackingInformationParam param) { |
|
ReceiveGoodsMainEnum.OrderTypeEnum orderTypeEnum = ReceiveGoodsMainEnum.OrderTypeEnum.getEnumByCode(param.getOrderType()); |
|
if (null == orderTypeEnum) { |
|
throw new DataException("请选择签收类型"); |
|
} |
|
if (CollUtil.isEmpty(param.getBookGoWhereList())) { |
|
throw new DataException("请设置图书分堆信息"); |
|
} |
|
TReceiveGoodsBooks receiveGoodsBooks = receiveGoodsBooksService.getById(param.getId()); |
|
if (null == receiveGoodsBooks) { |
|
throw new DataException("该图书信息不存在"); |
|
} |
|
//校验分堆设置是否已存在,已存在的话直接删除,防止多次提交 |
|
bookGoWhereService.lambdaUpdate() |
|
.eq(TBookGoWhere::getDelFlag, "0") |
|
.eq(TBookGoWhere::getType, "1") |
|
.eq(TBookGoWhere::getBookNumber, receiveGoodsBooks.getBookNumber()) |
|
.eq(TBookGoWhere::getRelationId, receiveGoodsBooks.getId()) |
|
.remove(); |
|
for (TBookGoWhere bookGoWhere : param.getBookGoWhereList()) { |
|
bookGoWhere.setId(SnowFlake.nextId()); |
|
bookGoWhere.setCreateTime(LocalDateTime.now()); |
|
bookGoWhere.setBookNumber(receiveGoodsBooks.getBookNumber()); |
|
bookGoWhere.setCreateBy(UserProvider.getUser().getUserId()); |
|
bookGoWhere.setCreateName(UserProvider.getUser().getUserName()); |
|
bookGoWhere.setUpdateTime(LocalDateTime.now()); |
|
bookGoWhere.setUpdateBy(UserProvider.getUser().getUserId()); |
|
bookGoWhere.setUpdateName(UserProvider.getUser().getUserName()); |
|
bookGoWhere.setOrderType(orderTypeEnum.getCode()); |
|
bookGoWhere.setWarehouseEntryFlag("0"); |
|
bookGoWhere.setType("1"); |
|
bookGoWhere.setRelationId(receiveGoodsBooks.getId() + ""); |
|
Optional<OrganizeEntity> deptOptional = organizeService.lambdaQuery() |
|
.eq(OrganizeEntity::getId, UserProvider.getUser().getOrganizeId()) |
|
.eq(OrganizeEntity::getEnabledMark, "1").list().stream().findFirst(); |
|
if (deptOptional.isPresent()) { |
|
OrganizeEntity dept = deptOptional.get(); |
|
OrganizeEntity corp = getCorp(dept); |
|
bookGoWhere.setCreateDeptName(dept.getFullName()); |
|
bookGoWhere.setCreateCorpName(corp.getFullName()); |
|
bookGoWhere.setCreateDeptId(dept.getId()); |
|
bookGoWhere.setCreateCorpId(corp.getId()); |
|
} |
|
bookGoWhereService.save(bookGoWhere); |
|
} |
|
} |
|
|
|
|
|
@Override |
|
@Transactional(rollbackFor = Exception.class) |
|
public void saveStackingInformationByReceiveId(ReceiveGoodsMainDto.SaveStackingInformationByReceiveIdParam param) { |
|
if (StrUtil.isBlank(param.getSaveType())) { |
|
throw new DataException("请选择保存类型"); |
|
} |
|
ReceiveGoodsMainEnum.OrderTypeEnum orderTypeEnum = ReceiveGoodsMainEnum.OrderTypeEnum.getEnumByCode(param.getOrderType()); |
|
if (null == orderTypeEnum) { |
|
throw new DataException("请选择签收类型"); |
|
} |
|
if (StrUtil.isBlank(param.getId())) { |
|
throw new DataException("请选择收货单"); |
|
} |
|
TReceiveGoodsMain tReceiveGoodsMain = this.getById(param.getId()); |
|
if (null == tReceiveGoodsMain) { |
|
throw new DataException("该收货单不存在"); |
|
} |
|
//保存只是走个过场 |
|
if (StrUtil.equals(param.getSaveType(), "1")) { |
|
this.lambdaUpdate() |
|
.set(TReceiveGoodsMain::getUpdateId, UserProvider.getLoginUserId()) |
|
.set(TReceiveGoodsMain::getUpdateTime, LocalDateTime.now()) |
|
.set(TReceiveGoodsMain::getUpdateName, UserProvider.getUser().getUserName()) |
|
.eq(TReceiveGoodsMain::getId, param.getId()) |
|
.update(); |
|
return; |
|
} |
|
|
|
String corpId = ""; |
|
if (StrUtil.isNotBlank(UserProvider.getUser().getOrganizeId())) { |
|
Optional<OrganizeEntity> deptOptional = organizeService.lambdaQuery() |
|
.eq(OrganizeEntity::getId, UserProvider.getUser().getOrganizeId()) |
|
.eq(OrganizeEntity::getEnabledMark, "1").list().stream().findFirst(); |
|
if (deptOptional.isPresent()) { |
|
OrganizeEntity dept = deptOptional.get(); |
|
OrganizeEntity corp = getCorp(dept); |
|
//查询初始化去向数据 |
|
corpId = corp.getId(); |
|
} |
|
} |
|
//确定时对所有未保存的分堆信息进行保存(即无需分堆的图书) |
|
//校验该选书是否进行过保存分堆信息 |
|
final String organizeId = corpId; |
|
//先查询已保存的图书列表 |
|
// CompletableFuture.runAsync(() -> { |
|
for (TReceiveGoodsBooks tReceiveGoodsBooks : receiveGoodsBooksService.lambdaQuery() |
|
.eq(TReceiveGoodsBooks::getRelationId, tReceiveGoodsMain.getId()) |
|
.eq(TReceiveGoodsBooks::getDelFlag, "0") |
|
.list()) { |
|
boolean exists = bookGoWhereService.lambdaQuery() |
|
.eq(TBookGoWhere::getDelFlag, "0") |
|
.eq(TBookGoWhere::getType, "1") |
|
.eq(TBookGoWhere::getBookNumber, tReceiveGoodsBooks.getBookNumber()) |
|
.eq(TBookGoWhere::getRelationId, tReceiveGoodsBooks.getId()) |
|
.exists(); |
|
if (exists) { |
|
continue; |
|
} |
|
List<ReceiveGoodsMainDto.TBookGoWhereEntity> stackingInformation = bookGoWhereService.getStackingInformation(tReceiveGoodsBooks.getBookNumber(), organizeId); |
|
ReceiveGoodsMainDto.SaveStackingInformationParam saveParam = new ReceiveGoodsMainDto.SaveStackingInformationParam(); |
|
saveParam.setOrderType(param.getOrderType()); |
|
saveParam.setId(tReceiveGoodsBooks.getId().toString()); |
|
|
|
List<TBookGoWhere> stackingList = new ArrayList<>(); |
|
for (ReceiveGoodsMainDto.TBookGoWhereEntity tBookGoWhereEntity : stackingInformation) { |
|
stackingList.add(BeanUtil.copyProperties(tBookGoWhereEntity, TBookGoWhere.class)); |
|
} |
|
saveParam.setBookGoWhereList(stackingList); |
|
this.saveStackingInformation(saveParam); |
|
} |
|
// }); |
|
//以下逻辑全是确定 |
|
ReceiveGoodsMainEnum.MainStatusEnum mainStatusEnum = ReceiveGoodsMainEnum.MainStatusEnum.LISTING; |
|
//查询图书编号列表 |
|
Set<String> bookNumberList = receiveGoodsBooksService.lambdaQuery() |
|
.eq(TReceiveGoodsBooks::getRelationId, tReceiveGoodsMain.getId()) |
|
.eq(TReceiveGoodsBooks::getDelFlag, "0") |
|
.list() |
|
.stream().map(TReceiveGoodsBooks::getBookNumber).collect(Collectors.toSet()); |
|
if (CollUtil.isNotEmpty(bookNumberList)) { |
|
//修改图书去向 即之后样书室新建后进行分堆不会再查到老数据 |
|
bookGoWhereService.lambdaUpdate() |
|
//签收后保存的需要手机端上架后才能修改上架状态,初始化数据可以修改 |
|
.set(TBookGoWhere::getWarehouseEntryFlag, "1") |
|
.eq(TBookGoWhere::getType, "0") |
|
.eq(TBookGoWhere::getDelFlag, "0") |
|
.eq(TBookGoWhere::getWarehouseEntryFlag, "0") |
|
.eq(TBookGoWhere::getCreateCorpId, corpId) |
|
.in(TBookGoWhere::getBookNumber, bookNumberList) |
|
.eq(TBookGoWhere::getOrderType, orderTypeEnum.getCode()) |
|
.update(); |
|
} |
|
//查询是否具有送往版本馆及业务部的数据,有的话就创建收货单 |
|
Set<String> otherSH = bookGoWhereService.lambdaQuery() |
|
.eq(TBookGoWhere::getType, "0") |
|
.eq(TBookGoWhere::getDelFlag, "0") |
|
.eq(TBookGoWhere::getWarehouseEntryFlag, "0") |
|
.in(TBookGoWhere::getTargetName, Arrays.asList(ReceiveGoodsMainEnum.OrderTypeEnum.BUSINESS_DEPARTMENT.getDescribe(), ReceiveGoodsMainEnum.OrderTypeEnum.VERSION_LIBRARY.getDescribe())) |
|
.in(TBookGoWhere::getBookNumber, bookNumberList) |
|
.eq(TBookGoWhere::getCreateCorpId, corpId) |
|
.list().stream().map(TBookGoWhere::getTargetName).collect(Collectors.toSet()); |
|
if (CollUtil.isNotEmpty(otherSH)) { |
|
for (String sh : otherSH) { |
|
String orderType =""; |
|
if (StrUtil.equals(ReceiveGoodsMainEnum.OrderTypeEnum.BUSINESS_DEPARTMENT.getDescribe(),sh)){ |
|
orderType=ReceiveGoodsMainEnum.OrderTypeEnum.BUSINESS_DEPARTMENT.getCode(); |
|
} |
|
if (StrUtil.equals(ReceiveGoodsMainEnum.OrderTypeEnum.VERSION_LIBRARY.getDescribe(),sh)){ |
|
orderType=ReceiveGoodsMainEnum.OrderTypeEnum.VERSION_LIBRARY.getCode(); |
|
} |
|
if (StrUtil.isBlank(orderType)){ |
|
continue; |
|
} |
|
//生成版本馆/业务部收货单 |
|
ReceiveGoodsMainDto.NewReceiptParam newReceiptParam = new ReceiveGoodsMainDto.NewReceiptParam(); |
|
|
|
newReceiptParam.setOrderType(orderType); |
|
newReceiptParam.setReceiptNumber(tReceiveGoodsMain.getReceiptNumber()); |
|
newReceiptParam.setPackageQuantity(tReceiveGoodsMain.getPackageQuantity()); |
|
newReceiptParam.setDeliveryParty(tReceiveGoodsMain.getDeliveryParty()); |
|
newReceiptParam.setReceiveTime(tReceiveGoodsMain.getReceiveTime()); |
|
newReceiptParam.setSaveType("1"); |
|
newReceiptParam.setPackageSituation(tReceiveGoodsMain.getPackageSituation()); |
|
List<ReceiveGoodsMainDto.BunchingInfo> bunchingInfoList = new ArrayList<>(); |
|
//查询图书编号 |
|
Set<String> queryBookInfoNumberList = bookGoWhereService.lambdaQuery() |
|
.eq(TBookGoWhere::getType, "0") |
|
.eq(TBookGoWhere::getDelFlag, "0") |
|
.eq(TBookGoWhere::getWarehouseEntryFlag, "0") |
|
// .in(TBookGoWhere::getTargetName, Arrays.asList(ReceiveGoodsMainEnum.OrderTypeEnum.BUSINESS_DEPARTMENT.getDescribe(), ReceiveGoodsMainEnum.OrderTypeEnum.VERSION_LIBRARY.getDescribe())) |
|
.in(TBookGoWhere::getBookNumber, bookNumberList) |
|
.eq(TBookGoWhere::getCreateCorpId, corpId) |
|
.eq(TBookGoWhere::getOrderType, orderType) |
|
.list().stream().map(TBookGoWhere::getBookNumber).collect(Collectors.toSet()); |
|
List<TLibrary> libraryList = libraryService.getListByBookNumberList(queryBookInfoNumberList); |
|
//创建收货单 |
|
if (CollUtil.isNotEmpty(libraryList)) { |
|
for (TLibrary tLibrary : libraryList) { |
|
bunchingInfoList.add(BeanUtil.copyProperties(tLibrary, ReceiveGoodsMainDto.BunchingInfo.class)); |
|
} |
|
newReceiptParam.setBunchingInfoList(bunchingInfoList); |
|
this.newReceipt(newReceiptParam); |
|
} |
|
} |
|
|
|
} |
|
//生成二维码 |
|
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); |
|
DictionaryDataEntity data = dictionaryDataApi.getByTypeDataCode("SampleLibrary", "xtaddr").getData(); |
|
String systemUrl = "http://61.169.37.106:9172/api/file/Image/preview/"; |
|
if (null != data) { |
|
systemUrl = data.getDescription(); |
|
} |
|
QrCodeUtil.generate(systemUrl, 1000, 1000, "", byteArrayOutputStream); |
|
MockMultipartFile mockMultipartFile = new MockMultipartFile("上架.png", "上架.png", "text/plain", byteArrayOutputStream.toByteArray()); |
|
|
|
FileInfo preview = fileUploadApi.uploadFile(mockMultipartFile, fileApi.getPath(FileTypeConstant.BIVISUALPATH), "preview", "上架.png"); |
|
//修改状态为上架中 |
|
this.lambdaUpdate() |
|
.set(TReceiveGoodsMain::getListingQrCode, preview.getFilename()) |
|
.set(TReceiveGoodsMain::getMainStatus, mainStatusEnum.getCode()) |
|
.set(TReceiveGoodsMain::getMainStatusName, mainStatusEnum.getDescribe()) |
|
.set(TReceiveGoodsMain::getUpdateId, UserProvider.getLoginUserId()) |
|
.set(TReceiveGoodsMain::getUpdateTime, LocalDateTime.now()) |
|
.set(TReceiveGoodsMain::getUpdateName, UserProvider.getUser().getUserName()) |
|
.eq(TReceiveGoodsMain::getId, param.getId()) |
|
.update(); |
|
} |
|
|
|
} |
|
|
|
|