|
|
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.github.yulichang.base.MPJBaseServiceImpl;
|
|
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
|
|
import com.xjrsoft.common.enums.ClaimTypeEnum;
|
|
|
+import com.xjrsoft.common.enums.DeleteMark;
|
|
|
import com.xjrsoft.common.enums.IssueModeEnum;
|
|
|
import com.xjrsoft.common.enums.RoleEnum;
|
|
|
import com.xjrsoft.common.exception.MyException;
|
|
|
@@ -33,6 +34,9 @@ import org.camunda.bpm.engine.history.HistoricProcessInstance;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -62,6 +66,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
|
|
|
private final ClaimItemSubscriptionItemMapper claimItemSubscriptionItemMapper;
|
|
|
|
|
|
private final WorkflowFormRelationMapper workflowFormRelationMapper;
|
|
|
+ private final TextbookWarehouseRecordMapper textbookWarehouseRecordMapper;
|
|
|
|
|
|
@Override
|
|
|
public IPage<DistributePageVo> distributePageVo(DistributePageDto dto) {
|
|
|
@@ -87,6 +92,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
|
|
|
.eq(WfTextbookClaim::getBaseSemesterId, dto.getBaseSemesterId())
|
|
|
.eq(StringUtils.isNotEmpty(dto.getClaimType()), WfTextbookClaim::getClaimType, dto.getClaimType())
|
|
|
.eq(ObjectUtils.isNotEmpty(dto.getDistributeStatus()), WfTextbookClaim::getStatus, dto.getDistributeStatus())
|
|
|
+ .ne(ObjectUtils.isEmpty(dto.getDistributeStatus()), WfTextbookClaim::getStatus, 1)
|
|
|
.and(StringUtils.isNotEmpty(dto.getName()),
|
|
|
wrapper -> wrapper
|
|
|
.like(XjrUser::getName, dto.getName())
|
|
|
@@ -266,83 +272,138 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Boolean confirmDistribute(ConfirmDistributeDto dto) {
|
|
|
- WfTextbookClaim wfTextbookClaim = this.getById(dto.getTextbookClaimId());
|
|
|
+ WfTextbookClaim wfTextbookClaim = this.getByIdDeep(dto.getTextbookClaimId());
|
|
|
+ List<WfTextbookClaimItem> wfTextbookClaimItemList = wfTextbookClaim.getWfTextbookClaimItemList();
|
|
|
|
|
|
- if (ObjectUtils.isEmpty(wfTextbookClaim) || ObjectUtils.isEmpty(dto.getTextbookClaimItemList()) || dto.getTextbookClaimItemList().size() == 0) {
|
|
|
+ // 获取所有入库记录
|
|
|
+ List<TextbookWarehouseRecord> textbookWarehouseRecordList = textbookWarehouseRecordMapper.selectList(
|
|
|
+ Wrappers.lambdaQuery(TextbookWarehouseRecord.class)
|
|
|
+ .eq(TextbookWarehouseRecord::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ );
|
|
|
+
|
|
|
+ Map<Long, TextbookWarehouseRecord> textbookWarehouseRecordMap = textbookWarehouseRecordList.stream()
|
|
|
+ .collect(Collectors.toMap(TextbookWarehouseRecord::getId, t -> t, (t1,t2) -> t1));
|
|
|
+
|
|
|
+ if (ObjectUtils.isEmpty(wfTextbookClaim)
|
|
|
+ || ObjectUtils.isEmpty(dto.getTextbookClaimItemList())
|
|
|
+ || dto.getTextbookClaimItemList().isEmpty()
|
|
|
+ || wfTextbookClaimItemList.isEmpty()
|
|
|
+ ) {
|
|
|
throw new MyException("未找到申领数据");
|
|
|
}
|
|
|
|
|
|
+ Map<Long, WfTextbookClaimItem> wfTextbookClaimItemMap = wfTextbookClaimItemList.stream()
|
|
|
+ .collect(Collectors.toMap(WfTextbookClaimItem::getId, w -> w, (w1, w2) -> w1));
|
|
|
+
|
|
|
+ // 处理出库单号
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ sb.append("CK");
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
|
|
|
+ String nowStr = now.format(dateTimeFormatter);
|
|
|
+ sb.append(nowStr);
|
|
|
+ int oldOrderInteger = 0;
|
|
|
+ int oldOrderLastInteger = 0;
|
|
|
+
|
|
|
+
|
|
|
//操作每一个申领项
|
|
|
for (ConfirmDistributeDto.TextbookClaimItem textbookClaimItem : dto.getTextbookClaimItemList()) {
|
|
|
-
|
|
|
- WfTextbookClaimItem wfTextbookClaimItem = wfTextbookClaimWfTextbookClaimItemMapper.selectById(textbookClaimItem.getTextbookClaimItemId());
|
|
|
+// WfTextbookClaimItem wfTextbookClaimItem = wfTextbookClaimWfTextbookClaimItemMapper.selectById(textbookClaimItem.getTextbookClaimItemId());
|
|
|
+ WfTextbookClaimItem wfTextbookClaimItem = wfTextbookClaimItemMap.get(textbookClaimItem.getTextbookClaimItemId());
|
|
|
|
|
|
if (ObjectUtils.isEmpty(wfTextbookClaimItem)) {
|
|
|
throw new MyException("未找到申领项详细数据");
|
|
|
}
|
|
|
|
|
|
- Textbook textbook = textbookMapper.selectById(textbookClaimItem.getTextbookId());
|
|
|
- if (ObjectUtils.isEmpty(textbook)) {
|
|
|
- throw new MyException("未找到相关教材数据");
|
|
|
- }
|
|
|
-
|
|
|
//判断总发放数量是否超出该申请项的申请数量
|
|
|
- Integer issueNumber = ObjectUtils.isEmpty(wfTextbookClaimItem.getIssueNumber()) ? 0 : wfTextbookClaimItem.getIssueNumber();//已发放
|
|
|
- Integer applicantNumber = ObjectUtils.isEmpty(wfTextbookClaimItem.getApplicantNumber()) ? 0 : wfTextbookClaimItem.getApplicantNumber();//申领总数量
|
|
|
- Integer confirmNumber = ObjectUtils.isEmpty(textbookClaimItem.getConfirmTotalNumber()) ? 0 : textbookClaimItem.getConfirmTotalNumber();//本次发放
|
|
|
+ int issueNumber = ObjectUtils.isEmpty(wfTextbookClaimItem.getIssueNumber()) ? 0 : wfTextbookClaimItem.getIssueNumber();//已发放
|
|
|
+ int applicantNumber = ObjectUtils.isEmpty(wfTextbookClaimItem.getApplicantNumber()) ? 0 : wfTextbookClaimItem.getApplicantNumber();//申领总数量
|
|
|
+ int confirmNumber = ObjectUtils.isEmpty(textbookClaimItem.getConfirmTotalNumber()) ? 0 : textbookClaimItem.getConfirmTotalNumber();//本次发放
|
|
|
if (issueNumber + confirmNumber > applicantNumber) {
|
|
|
- throw new MyException(textbook.getBookName() + "发放总数量超出申领数量");
|
|
|
+ throw new MyException(textbookClaimItem.getTextbookIdCn() + "发放总数量超出申领数量");
|
|
|
}
|
|
|
|
|
|
- for (ConfirmDistributeDto.TextbookSubscriptionItems textbookSubscriptionItems : textbookClaimItem.getTextbookSubscriptionItems()){
|
|
|
- TextbookSubscriptionItem textbookSubscriptionItem = textbookSubscriptionItemMapper.selectById(textbookSubscriptionItems.getTextbookSubscriptionItemId());
|
|
|
- if (ObjectUtils.isEmpty(textbookSubscriptionItem)) {
|
|
|
- throw new MyException("未找到征订项详细数据");
|
|
|
+ TextbookIssueRecord textbookIssueRecord;
|
|
|
+ for (ConfirmDistributeDto.TextbookWarehouseRecords textbookWarehouseRecords : textbookClaimItem.getTextbookWarehouseRecords()){
|
|
|
+ TextbookWarehouseRecord textbookWarehouseRecord = textbookWarehouseRecordMap.get(textbookWarehouseRecords.getTextbookWarehouseRecordId());
|
|
|
+ if (ObjectUtils.isEmpty(textbookWarehouseRecord)) {
|
|
|
+ throw new MyException("未找到入库详细数据");
|
|
|
}
|
|
|
|
|
|
- //更新教材征订中的的库存数量
|
|
|
- textbookSubscriptionItemMapper.updateById(new TextbookSubscriptionItem() {{
|
|
|
+ //更新教材入库中的的库存数量
|
|
|
+ textbookWarehouseRecordMapper.updateById(new TextbookWarehouseRecord() {{
|
|
|
setModifyUserId(StpUtil.getLoginIdAsLong());
|
|
|
setModifyDate(new Date());
|
|
|
- setId(textbookSubscriptionItem.getId());
|
|
|
- setOutStockNum(ObjectUtils.isEmpty(textbookSubscriptionItem.getOutStockNum()) ? 0 : textbookSubscriptionItem.getOutStockNum()
|
|
|
+ setId(textbookWarehouseRecord.getId());
|
|
|
+ setIssuedNumber(ObjectUtils.isEmpty(textbookWarehouseRecord.getIssuedNumber()) ? 0 : textbookWarehouseRecord.getIssuedNumber()
|
|
|
+ confirmNumber);
|
|
|
+ setRemainNumber(ObjectUtils.isEmpty(textbookWarehouseRecord.getRemainNumber()) ? 0 : textbookWarehouseRecord.getRemainNumber()
|
|
|
+ - confirmNumber
|
|
|
+ );
|
|
|
}});
|
|
|
|
|
|
- claimItemSubscriptionItemMapper.insert(new ClaimItemSubscriptionItem(){{
|
|
|
- setWfTextbookClaimItemId(wfTextbookClaimItem.getId());
|
|
|
- setTextbookSubscriptionItemId(textbookSubscriptionItem.getId());
|
|
|
- setIssueNumber(confirmNumber);
|
|
|
- }});
|
|
|
- }
|
|
|
-
|
|
|
- //增加出库记录
|
|
|
- textbookIssueRecordMapper.insert(new TextbookIssueRecord() {{
|
|
|
- setCreateDate(new Date());
|
|
|
- if (ObjectUtils.isNotEmpty(wfTextbookClaim.getClaimType()) && wfTextbookClaim.getClaimType().equals(ClaimTypeEnum.ClaimStudent.getCode())) {
|
|
|
- setIssueMode(IssueModeEnum.Imtudent.getCode());
|
|
|
+ oldOrderInteger += 1;
|
|
|
+ String newOrder = String.format("%03d", oldOrderInteger); // 补零并格式化为三位数
|
|
|
+ String oldPrex = sb + newOrder + "-";
|
|
|
+ //增加出库记录
|
|
|
+ textbookIssueRecord = new TextbookIssueRecord();
|
|
|
+ textbookIssueRecord.setBaseSemesterId(wfTextbookClaim.getBaseSemesterId());
|
|
|
+
|
|
|
+ // 处理出库单号
|
|
|
+ // 根据当前申领项主键id和入库主键id查找时候已经有了出库记录
|
|
|
+ LambdaQueryWrapper<TextbookIssueRecord> maxOrderNumberLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ maxOrderNumberLambdaQueryWrapper
|
|
|
+ .eq(TextbookIssueRecord::getDataItemId, wfTextbookClaimItem.getId())
|
|
|
+ .eq(TextbookIssueRecord::getTextbookWarehouseRecordId, textbookWarehouseRecord.getId())
|
|
|
+ .eq(TextbookIssueRecord::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ .orderByDesc(TextbookIssueRecord::getOrderNumber)
|
|
|
+ .last("limit 1")
|
|
|
+ ;
|
|
|
+ TextbookIssueRecord maxOrderNumber = textbookIssueRecordMapper.selectOne(maxOrderNumberLambdaQueryWrapper);
|
|
|
+ if(ObjectUtils.isNotEmpty(maxOrderNumber)
|
|
|
+ && ObjectUtils.isNotEmpty(maxOrderNumber.getOrderNumber())
|
|
|
+ ){
|
|
|
+ String oldOrderNumber = maxOrderNumber.getOrderNumber();
|
|
|
+ oldPrex = oldOrderNumber.substring(0, oldOrderNumber.length() - 3);
|
|
|
+ oldOrderInteger -= 1;
|
|
|
+ String oldOrder = oldOrderNumber.substring(oldOrderNumber.length() - 3);
|
|
|
+ oldOrderLastInteger = Integer.parseInt(oldOrder);
|
|
|
}
|
|
|
- if (ObjectUtils.isNotEmpty(wfTextbookClaim.getClaimType()) && wfTextbookClaim.getClaimType().equals(ClaimTypeEnum.ClaimTeacher.getCode())) {
|
|
|
- setIssueMode(IssueModeEnum.ImTeacher.getCode());
|
|
|
+ oldOrderLastInteger += 1;
|
|
|
+ String newLastOrder = String.format("%03d", oldOrderLastInteger); // 补零并格式化为三位数
|
|
|
+
|
|
|
+ textbookIssueRecord.setOrderNumber(oldPrex + newLastOrder);
|
|
|
+ if (ObjectUtils.isNotEmpty(wfTextbookClaim.getClaimType())
|
|
|
+ && wfTextbookClaim.getClaimType().equals(ClaimTypeEnum.ClaimStudent.getCode())
|
|
|
+ && wfTextbookClaim.getClaimType().equals(ClaimTypeEnum.ClaimClass.getCode())
|
|
|
+ ) {
|
|
|
+ textbookIssueRecord.setIssueMode(IssueModeEnum.Imtudent.getCode());
|
|
|
}
|
|
|
-
|
|
|
- setDataId(wfTextbookClaim.getId());
|
|
|
- setDataItemId(wfTextbookClaimItem.getId());
|
|
|
-
|
|
|
- setTextbookId(wfTextbookClaimItem.getTextbookId());
|
|
|
- setIssueNumber(confirmNumber);
|
|
|
-
|
|
|
-// setRemainingNumber(applicantNumber - issueNumber - confirmNumber);
|
|
|
-
|
|
|
- setReceiveUserId(dto.getReceiveUserId());
|
|
|
- setIssueUserId(StpUtil.getLoginIdAsLong());
|
|
|
-
|
|
|
- setRemark(dto.getRemark());
|
|
|
-
|
|
|
+ if (ObjectUtils.isNotEmpty(wfTextbookClaim.getClaimType())
|
|
|
+ && wfTextbookClaim.getClaimType().equals(ClaimTypeEnum.ClaimTeacher.getCode())
|
|
|
+ ) {
|
|
|
+ textbookIssueRecord.setIssueMode(IssueModeEnum.ImTeacher.getCode());
|
|
|
+ }
|
|
|
+ textbookIssueRecord.setDataId(wfTextbookClaim.getId());
|
|
|
+ textbookIssueRecord.setDataItemId(wfTextbookClaimItem.getId());
|
|
|
+ textbookIssueRecord.setTextbookId(wfTextbookClaimItem.getTextbookId());
|
|
|
+ textbookIssueRecord.setIssueNumber(confirmNumber);
|
|
|
+ textbookIssueRecord.setRecedeNumber(0);
|
|
|
+ textbookIssueRecord.setActualIssueNumber(confirmNumber);
|
|
|
+ textbookIssueRecord.setActualTotalPrice(textbookWarehouseRecord.getSubtotal().multiply(BigDecimal.valueOf(confirmNumber)));
|
|
|
+ if(ObjectUtils.isNotEmpty(dto.getReceiveUserId())){
|
|
|
+ textbookIssueRecord.setReceiveUserId(dto.getReceiveUserId());
|
|
|
+ }else {
|
|
|
+ textbookIssueRecord.setReceiveUserId(StpUtil.getLoginIdAsLong());
|
|
|
+ }
|
|
|
+ textbookIssueRecord.setIssueUserId(StpUtil.getLoginIdAsLong());
|
|
|
+ textbookIssueRecord.setCreateDate(new Date());;
|
|
|
+ textbookIssueRecord.setRemark(dto.getRemark());
|
|
|
int sortCode = SortCodeUtil.getMaxSortCode(textbookIssueRecordMapper, TextbookIssueRecord.class, "sort_code");
|
|
|
+ textbookIssueRecord.setSortCode(sortCode + 1);
|
|
|
|
|
|
- setSortCode(sortCode + 1);
|
|
|
- }});
|
|
|
+ textbookIssueRecordMapper.insert(textbookIssueRecord);
|
|
|
+ }
|
|
|
|
|
|
//更新申领项中的已经发放数量
|
|
|
wfTextbookClaimWfTextbookClaimItemMapper.updateById(new WfTextbookClaimItem() {{
|
|
|
@@ -405,16 +466,15 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
|
|
|
|
|
|
List<String> roleList = StpUtil.getRoleList();
|
|
|
|
|
|
-
|
|
|
//申领人自己可以领取
|
|
|
textbookClaimUserList.add(new TextbookClaimUser() {{
|
|
|
setCreateDate(new Date());
|
|
|
setWfTextbookClaimId(wfTextbookClaim.getId());
|
|
|
setUserId(wfTextbookClaim.getApplicantUserId());
|
|
|
- if(roleList.contains(RoleEnum.TEACHER.getCode())){
|
|
|
+ if(roleList.contains(RoleEnum.TEACHER.getCode().toString())){
|
|
|
setUserType(2);
|
|
|
}
|
|
|
- if(roleList.contains(RoleEnum.STUDENT.getCode())){
|
|
|
+ if(roleList.contains(RoleEnum.STUDENT.getCode().toString())){
|
|
|
setUserType(1);
|
|
|
}
|
|
|
}});
|