|
|
@@ -0,0 +1,483 @@
|
|
|
+package com.xjrsoft.module.textbook.service.impl;
|
|
|
+
|
|
|
+import cn.dev33.satoken.stp.StpUtil;
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import com.alibaba.excel.EasyExcel;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.github.yulichang.base.MPJBaseServiceImpl;
|
|
|
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
|
|
+import com.xjrsoft.common.enums.DeleteMark;
|
|
|
+import com.xjrsoft.common.enums.WarehouseModeEnum;
|
|
|
+import com.xjrsoft.common.exception.MyException;
|
|
|
+import com.xjrsoft.common.page.ConventPage;
|
|
|
+import com.xjrsoft.common.utils.VoToColumnUtil;
|
|
|
+import com.xjrsoft.module.base.entity.BaseCourseSubject;
|
|
|
+import com.xjrsoft.module.base.entity.BaseSemester;
|
|
|
+import com.xjrsoft.module.base.entity.CourseSubjectDetail;
|
|
|
+import com.xjrsoft.module.system.entity.DictionaryDetail;
|
|
|
+import com.xjrsoft.module.textbook.dto.*;
|
|
|
+import com.xjrsoft.module.textbook.entity.*;
|
|
|
+import com.xjrsoft.module.textbook.mapper.TextbookSubscriptionClassMapper;
|
|
|
+import com.xjrsoft.module.textbook.mapper.TextbookSubscriptionItemMapper;
|
|
|
+import com.xjrsoft.module.textbook.mapper.TextbookSubscriptionMapper;
|
|
|
+import com.xjrsoft.module.textbook.mapper.TextbookWarehouseRecordMapper;
|
|
|
+import com.xjrsoft.module.textbook.service.ITextbookSubscriptionService;
|
|
|
+import com.xjrsoft.module.textbook.service.ITextbookWarehouseRecordService;
|
|
|
+import com.xjrsoft.module.textbook.vo.*;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+import org.apache.commons.lang3.ObjectUtils;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.io.InputStream;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.*;
|
|
|
+import java.util.concurrent.atomic.AtomicReference;
|
|
|
+import java.util.regex.Matcher;
|
|
|
+import java.util.regex.Pattern;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @title: 教材教辅征订记录表
|
|
|
+ * @Author dzx
|
|
|
+ * @Date: 2024-12-16
|
|
|
+ * @Version 1.0
|
|
|
+ */
|
|
|
+@Service
|
|
|
+@AllArgsConstructor
|
|
|
+public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<TextbookSubscriptionMapper, TextbookSubscription> implements ITextbookSubscriptionService {
|
|
|
+
|
|
|
+ private final TextbookSubscriptionMapper textbookSubscriptionTextbookSubscriptionMapper;
|
|
|
+
|
|
|
+ private final TextbookSubscriptionItemMapper textbookSubscriptionTextbookSubscriptionItemMapper;
|
|
|
+
|
|
|
+ private final TextbookSubscriptionClassMapper textbookSubscriptionClassMapper;
|
|
|
+
|
|
|
+ private final TextbookSubscriptionClassMapper textbookService;
|
|
|
+
|
|
|
+ private final TextbookWarehouseRecordMapper textbookWarehouseRecordMapper;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public IPage<TextbookSubscriptionPageVo> pageRubAndHand(TextbookSubscriptionPageDto dto) {
|
|
|
+ MPJLambdaWrapper<TextbookSubscription> queryWrapper = new MPJLambdaWrapper<>();
|
|
|
+ queryWrapper
|
|
|
+ .select(TextbookSubscription::getId)
|
|
|
+ .selectAs(BaseSemester::getName, TextbookSubscriptionPageVo::getBaseSemesterIdCn)
|
|
|
+ .select(TextbookSubscription.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionPageVo.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(BaseSemester.class, BaseSemester::getId, TextbookSubscription::getBaseSemesterId)
|
|
|
+ .eq(dto.getBaseSemesterId() != null && dto.getBaseSemesterId() > 0, TextbookSubscription::getBaseSemesterId, dto.getBaseSemesterId())
|
|
|
+ .eq(dto.getSubscriptionMethod() != null && dto.getSubscriptionMethod() > 0, TextbookSubscription::getSubscriptionMethod, dto.getSubscriptionMethod())
|
|
|
+ .eq(StringUtils.isNotBlank(dto.getId()), TextbookSubscription::getId, dto.getId())
|
|
|
+ .orderByDesc(TextbookSubscription::getCreateDate)
|
|
|
+ ;
|
|
|
+ IPage<TextbookSubscriptionPageVo> page = this.selectJoinListPage(ConventPage.getPage(dto), TextbookSubscriptionPageVo.class, queryWrapper);
|
|
|
+ return page;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<TextbookInstockroomListVo> instockroomList(TextbookInstockroomListDto dto) {
|
|
|
+ MPJLambdaWrapper<TextbookSubscriptionItem> queryWrapper = new MPJLambdaWrapper<>();
|
|
|
+ queryWrapper
|
|
|
+ .select(TextbookSubscriptionItem::getId)
|
|
|
+ .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(TextbookInstockroomListVo.class).contains(x.getProperty()))
|
|
|
+ .select(TextbookSubscriptionItem.class, x -> VoToColumnUtil.fieldsToColumns(TextbookInstockroomListVo.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(Textbook.class, Textbook::getId, TextbookSubscriptionItem::getTextbookId)
|
|
|
+ .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId,
|
|
|
+ wrapper -> wrapper
|
|
|
+ .selectAs(BaseCourseSubject::getName, TextbookInstockroomListVo::getCourseName)
|
|
|
+ )
|
|
|
+ .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, Textbook::getTextbookType,
|
|
|
+ wrapper -> wrapper
|
|
|
+ .selectAs(DictionaryDetail::getName, TextbookInstockroomListVo::getTextbookTypeCn)
|
|
|
+ )
|
|
|
+ .eq(TextbookSubscriptionItem::getTextbookSubscriptionId, dto.getTextbookSubscriptionId())
|
|
|
+ .orderByAsc(TextbookSubscriptionItem::getInStockNum)
|
|
|
+ ;
|
|
|
+
|
|
|
+ return textbookSubscriptionTextbookSubscriptionItemMapper.selectJoinList(TextbookInstockroomListVo.class, queryWrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<TextbookInstockroomOnceListVo> everyInstockroomList(TextbookInstockroomOnceListDto dto) {
|
|
|
+ MPJLambdaWrapper<TextbookSubscriptionItem> queryWrapper = new MPJLambdaWrapper<>();
|
|
|
+ queryWrapper
|
|
|
+ .select(TextbookSubscriptionItem::getId)
|
|
|
+ .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(TextbookInstockroomOnceListVo.class).contains(x.getProperty()))
|
|
|
+ .select(TextbookSubscriptionItem.class, x -> VoToColumnUtil.fieldsToColumns(TextbookInstockroomOnceListVo.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(Textbook.class, Textbook::getId, TextbookSubscriptionItem::getTextbookId)
|
|
|
+ .leftJoin(TextbookWarehouseRecord.class, TextbookWarehouseRecord::getDataItemId, TextbookSubscriptionItem::getId,
|
|
|
+ wrapper -> wrapper
|
|
|
+ .selectAs(TextbookWarehouseRecord::getWarehouseNumber, TextbookInstockroomOnceListVo::getOnceInStockNum)
|
|
|
+ .selectAs(TextbookWarehouseRecord::getCreateDate, TextbookInstockroomOnceListVo::getCreateDate)
|
|
|
+ .selectAs(TextbookWarehouseRecord::getCreateUserId, TextbookInstockroomOnceListVo::getCreateUserId)
|
|
|
+ )
|
|
|
+ .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId,
|
|
|
+ wrapper -> wrapper
|
|
|
+ .selectAs(BaseCourseSubject::getName, TextbookInstockroomOnceListVo::getCourseName)
|
|
|
+ )
|
|
|
+ .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, Textbook::getTextbookType,
|
|
|
+ wrapper -> wrapper
|
|
|
+ .selectAs(DictionaryDetail::getName, TextbookInstockroomOnceListVo::getTextbookTypeCn)
|
|
|
+ )
|
|
|
+ .eq(TextbookSubscriptionItem::getTextbookSubscriptionId, dto.getTextbookSubscriptionId())
|
|
|
+ .orderByAsc(TextbookSubscriptionItem::getInStockNum)
|
|
|
+ ;
|
|
|
+
|
|
|
+ return textbookSubscriptionTextbookSubscriptionItemMapper.selectJoinList(TextbookInstockroomOnceListVo.class, queryWrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public TextbookSubscriptionVo infoRubAndHand(Long id) {
|
|
|
+ TextbookSubscription textbookSubscription = this.getById(id);
|
|
|
+ TextbookSubscriptionVo textbookSubscriptionVo = BeanUtil.toBean(textbookSubscription, TextbookSubscriptionVo.class);
|
|
|
+
|
|
|
+ MPJLambdaWrapper<TextbookSubscriptionItem> textbookSubscriptionItemMPJLambdaWrapper = new MPJLambdaWrapper<>();
|
|
|
+ textbookSubscriptionItemMPJLambdaWrapper
|
|
|
+ .select(TextbookSubscriptionItem::getId)
|
|
|
+ .select(TextbookSubscriptionItem.class,x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionItemVo.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(Textbook.class, Textbook::getId, TextbookSubscriptionItem::getTextbookId,
|
|
|
+ wrapper -> wrapper
|
|
|
+ .select(Textbook.class,x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionItemVo.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId,
|
|
|
+ wp -> wp
|
|
|
+ .selectAs(BaseCourseSubject::getName, TextbookSubscriptionItemVo::getCourseSubjectIdCn)
|
|
|
+ )
|
|
|
+ .leftJoin(DictionaryDetail.class, DictionaryDetail::getId, Textbook::getTextbookType,
|
|
|
+ wp -> wp
|
|
|
+ .selectAs(DictionaryDetail::getName, TextbookSubscriptionItemVo::getTextbookTypeCn)
|
|
|
+ )
|
|
|
+ )
|
|
|
+ .eq(TextbookSubscriptionItem::getTextbookSubscriptionId, id)
|
|
|
+ ;
|
|
|
+ List<TextbookSubscriptionItemVo> list = textbookSubscriptionTextbookSubscriptionItemMapper.selectJoinList(TextbookSubscriptionItemVo.class, textbookSubscriptionItemMPJLambdaWrapper);
|
|
|
+
|
|
|
+ textbookSubscriptionVo.setTextbookSubscriptionItemList(list);
|
|
|
+ return textbookSubscriptionVo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public TextbookSubscriptionDetailVo detail(Long id) {
|
|
|
+ TextbookSubscription textbookSubscription = this.getById(id);
|
|
|
+ if (ObjectUtils.isEmpty(textbookSubscription)) {
|
|
|
+ throw new MyException("证订记录被修改,请刷新重试");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取所有的证订项目
|
|
|
+ LambdaQueryWrapper<TextbookSubscriptionItem> subscriptionItemLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ subscriptionItemLambdaQueryWrapper
|
|
|
+ .eq(TextbookSubscriptionItem::getTextbookSubscriptionId, id)
|
|
|
+ .eq(TextbookSubscriptionItem::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ ;
|
|
|
+ List<TextbookSubscriptionItem> textbookSubscriptionItemList = textbookSubscriptionTextbookSubscriptionItemMapper.selectList(subscriptionItemLambdaQueryWrapper);
|
|
|
+ int stuNum = 0;
|
|
|
+ int teaNum = 0;
|
|
|
+ BigDecimal totalPrice = BigDecimal.valueOf(0);
|
|
|
+ for (TextbookSubscriptionItem textbookSubscriptionItem : textbookSubscriptionItemList) {
|
|
|
+ stuNum += textbookSubscriptionItem.getStudentNum();
|
|
|
+ teaNum += textbookSubscriptionItem.getTeacherNum();
|
|
|
+
|
|
|
+ totalPrice.add(textbookSubscriptionItem.getPrice()
|
|
|
+ .multiply(BigDecimal.valueOf(textbookSubscriptionItem.getDiscount()))
|
|
|
+ .divide(BigDecimal.valueOf(10))
|
|
|
+ .multiply(BigDecimal.valueOf(textbookSubscriptionItem.getTeacherNum() + textbookSubscriptionItem.getStudentNum())));
|
|
|
+
|
|
|
+ }
|
|
|
+ TextbookSubscriptionDetailVo textbookSubscriptionDetailVo = new TextbookSubscriptionDetailVo();
|
|
|
+ textbookSubscriptionDetailVo.setId(String.valueOf(id));
|
|
|
+ textbookSubscriptionDetailVo.setStudentTatolNum(stuNum);
|
|
|
+ textbookSubscriptionDetailVo.setTeacherTatolNum(teaNum);
|
|
|
+ textbookSubscriptionDetailVo.setSum(stuNum + teaNum);
|
|
|
+ textbookSubscriptionDetailVo.setSumPrice(totalPrice);
|
|
|
+ return textbookSubscriptionDetailVo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public IPage<TextbookSubscriptionItemPageVo> itemPage(TextbookSubscriptionItemPageDto dto) {
|
|
|
+ MPJLambdaWrapper<TextbookSubscriptionItem> textbookSubscriptionItemMPJLambdaWrapper = new MPJLambdaWrapper<>();
|
|
|
+ textbookSubscriptionItemMPJLambdaWrapper
|
|
|
+ .select(TextbookSubscriptionItem::getId)
|
|
|
+ .select(TextbookSubscriptionItem.class,x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionItemPageVo.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(Textbook.class, Textbook::getId, TextbookSubscriptionItem::getTextbookId,
|
|
|
+ wrapper -> wrapper
|
|
|
+ .select(Textbook.class,x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionItemPageVo.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId,
|
|
|
+ wp -> wp
|
|
|
+ .selectAs(BaseCourseSubject::getName, TextbookSubscriptionItemPageVo::getCourseSubjectIdCn)
|
|
|
+ .like(StringUtils.isNotBlank(dto.getCourseSubjectIdCn()), BaseCourseSubject::getName, dto.getCourseSubjectIdCn())
|
|
|
+ )
|
|
|
+ .leftJoin(DictionaryDetail.class, DictionaryDetail::getId, Textbook::getTextbookType,
|
|
|
+ wp -> wp
|
|
|
+ .selectAs(DictionaryDetail::getName, TextbookSubscriptionItemPageVo::getTextbookTypeCn)
|
|
|
+ )
|
|
|
+ .like(StringUtils.isNotBlank(dto.getBookName()), Textbook::getBookName, dto.getBookName())
|
|
|
+ .eq(StringUtils.isNotBlank(dto.getTextbookType()), Textbook::getTextbookType, dto.getTextbookType())
|
|
|
+ )
|
|
|
+ .eq(TextbookSubscriptionItem::getTextbookSubscriptionId, dto.getTextbookSubscriptionId())
|
|
|
+ ;
|
|
|
+ IPage<TextbookSubscriptionItemPageVo> page = textbookSubscriptionTextbookSubscriptionItemMapper.selectJoinPage(ConventPage.getPage(dto), TextbookSubscriptionItemPageVo.class, textbookSubscriptionItemMPJLambdaWrapper);
|
|
|
+ return page;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean add(TextbookSubscription textbookSubscription) {
|
|
|
+ // 处理征订表
|
|
|
+ int sum = 0;
|
|
|
+ for (TextbookSubscriptionItem textbookSubscriptionItem : textbookSubscription.getTextbookSubscriptionItemList()) {
|
|
|
+ sum += textbookSubscriptionItem.getStudentNum() + textbookSubscriptionItem.getTeacherNum();
|
|
|
+ }
|
|
|
+ textbookSubscriptionTextbookSubscriptionMapper.insert(textbookSubscription);
|
|
|
+
|
|
|
+ // 处理征订和班级关联表
|
|
|
+ if (ObjectUtils.isNotEmpty(textbookSubscription.getSubscriptionMethod())
|
|
|
+ && textbookSubscription.getSubscriptionMethod() == 1
|
|
|
+ && StringUtils.isNotBlank(textbookSubscription.getBaseClassIds())
|
|
|
+ ) {
|
|
|
+ String[] classIdArr = textbookSubscription.getBaseClassIds().split(",");
|
|
|
+ List<String> classIdList = Arrays.asList(classIdArr);
|
|
|
+ for (String str : classIdList) {
|
|
|
+ TextbookSubscriptionClass textbookSubscriptionClass = new TextbookSubscriptionClass();
|
|
|
+ textbookSubscriptionClass.setTextbookSubscriptionId(textbookSubscription.getId());
|
|
|
+ textbookSubscriptionClass.setBaseClassId(Long.parseLong(str));
|
|
|
+ textbookSubscriptionClassMapper.insert(textbookSubscriptionClass);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理征订表子表
|
|
|
+ for (TextbookSubscriptionItem textbookSubscriptionItem : textbookSubscription.getTextbookSubscriptionItemList()) {
|
|
|
+ textbookSubscriptionItem.setTextbookSubscriptionId(textbookSubscription.getId());
|
|
|
+ textbookSubscriptionTextbookSubscriptionItemMapper.insert(textbookSubscriptionItem);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean instockroom(List<TextbookInstockroomDto> dtos) {
|
|
|
+ if (dtos.isEmpty()) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Long> textbookSubscriptionItemIds = new ArrayList<>();
|
|
|
+ for (TextbookInstockroomDto dto : dtos) {
|
|
|
+ textbookSubscriptionItemIds.add(dto.getTextbookSubscriptionItemId());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (textbookSubscriptionItemIds.isEmpty()) {
|
|
|
+ throw new MyException("请选择需要入库的教材");
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取需要修改的list
|
|
|
+ MPJLambdaWrapper<TextbookSubscriptionItem> queryWrapper = new MPJLambdaWrapper<>();
|
|
|
+ queryWrapper
|
|
|
+ .select(TextbookSubscriptionItem::getId)
|
|
|
+ .select(TextbookSubscriptionItem.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionItem.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(Textbook.class, Textbook::getId, TextbookSubscriptionItem::getTextbookId)
|
|
|
+ .eq(TextbookSubscriptionItem::getId, textbookSubscriptionItemIds)
|
|
|
+ .eq(TextbookSubscriptionItem::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ ;
|
|
|
+ List<TextbookSubscriptionItem> textbookSubscriptionItemList = textbookSubscriptionTextbookSubscriptionItemMapper.selectJoinList(TextbookSubscriptionItem.class, queryWrapper);
|
|
|
+
|
|
|
+ if (textbookSubscriptionItemList.isEmpty()) {
|
|
|
+ throw new MyException("证订信息已经修改,请刷新重试");
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<Long, TextbookSubscriptionItem> itemByIdMap = new HashMap<>();
|
|
|
+ for (TextbookSubscriptionItem el : textbookSubscriptionItemList) {
|
|
|
+ itemByIdMap.put(el.getId(), el);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (TextbookInstockroomDto dto : dtos) {
|
|
|
+ TextbookSubscriptionItem old = null;
|
|
|
+ if (dto.getTextbookSubscriptionItemId() != null && dto.getTextbookSubscriptionItemId() > 0) {
|
|
|
+ old = itemByIdMap.get(dto.getTextbookSubscriptionItemId());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (old == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ TextbookSubscriptionItem updateItem = new TextbookSubscriptionItem();
|
|
|
+ updateItem.setId(old.getId());
|
|
|
+ updateItem.setInStockNum(old.getInStockNum() + dto.getInNum());
|
|
|
+ textbookSubscriptionTextbookSubscriptionItemMapper.updateById(updateItem);
|
|
|
+
|
|
|
+ //新增入库记录
|
|
|
+ TextbookWarehouseRecord textbookWarehouseRecord = new TextbookWarehouseRecord();
|
|
|
+ textbookWarehouseRecord.setTextbookId(old.getTextbookId());
|
|
|
+ textbookWarehouseRecord.setDataId(dto.getTextbookSubscriptionId());
|
|
|
+ textbookWarehouseRecord.setDataItemId(dto.getTextbookSubscriptionItemId());
|
|
|
+ textbookWarehouseRecord.setWarehouseNumber(dto.getInNum());
|
|
|
+ textbookWarehouseRecord.setWarehouseMode(WarehouseModeEnum.WmManual.getCode());
|
|
|
+ textbookWarehouseRecordMapper.insert(textbookWarehouseRecord);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public String instockroomExcelImport(InputStream inputStream, Long textbookSubscriptionId) {
|
|
|
+ AtomicReference<Map<String, Object>> atomicMap = new AtomicReference<>(new HashMap<>());
|
|
|
+ List<Map<Integer, Object>> excalDataList = EasyExcel.read(inputStream).sheet().headRowNumber(1).doReadSync();
|
|
|
+ String regex = "\\d+";
|
|
|
+ Pattern pattern = Pattern.compile(regex);
|
|
|
+ List<TextbookInstockroomImportDto> dataList = new ArrayList<>();
|
|
|
+ for (Map<Integer, Object> integerObjectMap : excalDataList) {
|
|
|
+ Matcher matcher = pattern.matcher(integerObjectMap.get(11).toString());
|
|
|
+ int inNum = 0;
|
|
|
+ if (matcher.find()) {
|
|
|
+ inNum = Integer.parseInt(integerObjectMap.get(11).toString());
|
|
|
+ }
|
|
|
+ TextbookInstockroomImportDto importDto = new TextbookInstockroomImportDto();
|
|
|
+ importDto.setInNum(inNum);
|
|
|
+ importDto.setIssn(integerObjectMap.get(2).toString());
|
|
|
+ dataList.add(importDto);
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取需要修改的list
|
|
|
+ MPJLambdaWrapper<TextbookSubscriptionItem> queryWrapper = new MPJLambdaWrapper<>();
|
|
|
+ queryWrapper
|
|
|
+ .select(TextbookSubscriptionItem::getId)
|
|
|
+ .selectAs(Textbook::getIssn, TextbookSubscriptionItemVo::getIssn)
|
|
|
+ .select(TextbookSubscriptionItem.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionItemVo.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(Textbook.class, Textbook::getId, TextbookSubscriptionItem::getTextbookId)
|
|
|
+ .eq(TextbookSubscriptionItem::getTextbookSubscriptionId, textbookSubscriptionId)
|
|
|
+ .eq(TextbookSubscriptionItem::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ ;
|
|
|
+ List<TextbookSubscriptionItemVo> textbookSubscriptionItemVos = textbookSubscriptionTextbookSubscriptionItemMapper.selectJoinList(TextbookSubscriptionItemVo.class, queryWrapper);
|
|
|
+
|
|
|
+ if (textbookSubscriptionItemVos.isEmpty()) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, TextbookSubscriptionItemVo> itemByIssnMap = new HashMap<>();
|
|
|
+ for (TextbookSubscriptionItemVo el : textbookSubscriptionItemVos) {
|
|
|
+ itemByIssnMap.put(el.getIssn(), el);
|
|
|
+ }
|
|
|
+
|
|
|
+ int successNum = 0;
|
|
|
+ int instockroomNum = 0;
|
|
|
+ for (TextbookInstockroomImportDto item : dataList) {
|
|
|
+ if (StringUtils.isBlank(item.getIssn())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ TextbookSubscriptionItemVo old = itemByIssnMap.get(item.getIssn());
|
|
|
+ if (old == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ TextbookSubscriptionItem updateItem = new TextbookSubscriptionItem();
|
|
|
+ updateItem.setId(old.getId());
|
|
|
+ updateItem.setInStockNum(old.getInStockNum() + item.getInNum());
|
|
|
+ textbookSubscriptionTextbookSubscriptionItemMapper.updateById(updateItem);
|
|
|
+
|
|
|
+ //新增入库记录
|
|
|
+ TextbookWarehouseRecord textbookWarehouseRecord = new TextbookWarehouseRecord();
|
|
|
+ textbookWarehouseRecord.setTextbookId(old.getTextbookId());
|
|
|
+ textbookWarehouseRecord.setDataId(textbookSubscriptionId);
|
|
|
+ textbookWarehouseRecord.setDataItemId(old.getId());
|
|
|
+ textbookWarehouseRecord.setWarehouseNumber(item.getInNum());
|
|
|
+ textbookWarehouseRecord.setWarehouseMode(WarehouseModeEnum.WmManual.getCode());
|
|
|
+ textbookWarehouseRecordMapper.insert(textbookWarehouseRecord);
|
|
|
+ successNum++;
|
|
|
+ successNum += item.getInNum();
|
|
|
+ }
|
|
|
+ return "成功入库" + successNum + "样,成功入库" + successNum + "本";
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean update(TextbookSubscription textbookSubscription) {
|
|
|
+ textbookSubscriptionTextbookSubscriptionMapper.updateById(textbookSubscription);
|
|
|
+ //********************************* TextbookSubscriptionItem 增删改 开始 *******************************************/
|
|
|
+ {
|
|
|
+ // 查出所有子级的id
|
|
|
+ List<TextbookSubscriptionItem> textbookSubscriptionItemList = textbookSubscriptionTextbookSubscriptionItemMapper.selectList(
|
|
|
+ Wrappers.lambdaQuery(TextbookSubscriptionItem.class)
|
|
|
+ .eq(TextbookSubscriptionItem::getTextbookSubscriptionId, textbookSubscription.getId())
|
|
|
+ .select(TextbookSubscriptionItem::getId));
|
|
|
+ List<Long> textbookSubscriptionItemIds = textbookSubscriptionItemList.stream()
|
|
|
+ .map(TextbookSubscriptionItem::getId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ //原有子表单 没有被删除的主键
|
|
|
+ List<Long> textbookSubscriptionItemOldIds = textbookSubscription.getTextbookSubscriptionItemList().stream()
|
|
|
+ .map(TextbookSubscriptionItem::getId)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ //找到需要删除的id
|
|
|
+ List<Long> textbookSubscriptionItemRemoveIds = textbookSubscriptionItemIds.stream()
|
|
|
+ .filter(item -> !textbookSubscriptionItemOldIds.contains(item))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ for (TextbookSubscriptionItem textbookSubscriptionItem : textbookSubscription.getTextbookSubscriptionItemList()) {
|
|
|
+ //如果不等于空则修改
|
|
|
+ if (textbookSubscriptionItem.getId() != null) {
|
|
|
+ textbookSubscriptionTextbookSubscriptionItemMapper.updateById(textbookSubscriptionItem);
|
|
|
+ }
|
|
|
+ //如果等于空 则新增
|
|
|
+ else {
|
|
|
+ //已经不存在的id 删除
|
|
|
+ textbookSubscriptionItem.setTextbookSubscriptionId(textbookSubscription.getId());
|
|
|
+ textbookSubscriptionTextbookSubscriptionItemMapper.insert(textbookSubscriptionItem);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //已经不存在的id 删除
|
|
|
+ if (textbookSubscriptionItemRemoveIds.size() > 0) {
|
|
|
+ textbookSubscriptionTextbookSubscriptionItemMapper.deleteBatchIds(textbookSubscriptionItemRemoveIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //********************************* TextbookSubscriptionItem 增删改 结束 *******************************************/
|
|
|
+
|
|
|
+ //********************************* TextbookSubscriptionClass 增删改 开始 *******************************************/
|
|
|
+ LambdaUpdateWrapper<TextbookSubscriptionClass> textbookSubscriptionClassLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ textbookSubscriptionClassLambdaUpdateWrapper
|
|
|
+ .eq(TextbookSubscriptionClass::getTextbookSubscriptionId, textbookSubscription.getId())
|
|
|
+ ;
|
|
|
+ textbookSubscriptionClassMapper.delete(textbookSubscriptionClassLambdaUpdateWrapper);
|
|
|
+
|
|
|
+ if (ObjectUtils.isNotEmpty(textbookSubscription.getSubscriptionMethod())
|
|
|
+ && textbookSubscription.getSubscriptionMethod() == 1
|
|
|
+ && StringUtils.isNotBlank(textbookSubscription.getBaseClassIds())
|
|
|
+ ) {
|
|
|
+ String[] classIdArr = textbookSubscription.getBaseClassIds().split(",");
|
|
|
+ List<String> classIdList = Arrays.asList(classIdArr);
|
|
|
+ for (String str : classIdList) {
|
|
|
+ TextbookSubscriptionClass textbookSubscriptionClass = new TextbookSubscriptionClass();
|
|
|
+ textbookSubscriptionClass.setTextbookSubscriptionId(textbookSubscription.getId());
|
|
|
+ textbookSubscriptionClass.setBaseClassId(Long.parseLong(str));
|
|
|
+ textbookSubscriptionClassMapper.insert(textbookSubscriptionClass);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //********************************* TextbookSubscriptionClass 增删改 结束 *******************************************/
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean changeStatus(UpdateWfTextbookSubscriptionDto dto) {
|
|
|
+ TextbookSubscription textbookSubscription = this.getById(dto.getId());
|
|
|
+ if (textbookSubscription == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ TextbookSubscription newT = new TextbookSubscription();
|
|
|
+ newT.setId(textbookSubscription.getId());
|
|
|
+ newT.setStatus(dto.getStatus());
|
|
|
+
|
|
|
+ return this.updateById(newT);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean delete(List<Long> ids) {
|
|
|
+ textbookSubscriptionTextbookSubscriptionMapper.deleteBatchIds(ids);
|
|
|
+ textbookSubscriptionTextbookSubscriptionItemMapper.delete(Wrappers.lambdaQuery(TextbookSubscriptionItem.class).in(TextbookSubscriptionItem::getTextbookSubscriptionId, ids));
|
|
|
+ textbookSubscriptionClassMapper.delete(Wrappers.lambdaQuery(TextbookSubscriptionClass.class).in(TextbookSubscriptionClass::getTextbookSubscriptionId, ids));
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+}
|