Explorar el Código

教材修改,班级课程教材导出

大数据与最优化研究所 hace 11 meses
padre
commit
22e1699cf9

+ 5 - 7
src/main/java/com/xjrsoft/module/base/controller/BaseClassCourseController.java

@@ -100,7 +100,6 @@ public class BaseClassCourseController {
         MPJLambdaWrapper<BaseClassCourse> baseClassCourseMPJLambdaWrapper = new MPJLambdaWrapper<>();
         baseClassCourseMPJLambdaWrapper
                 .disableSubLogicDel()
-                .select(BaseClassCourse::getCourseId)
                 .select(BaseClassCourse::getId)
                 .selectAs(BaseClass::getName, BaseClassCourseListVo::getClassIdCn)
                 .selectAs(BaseCourseSubject::getName, BaseClassCourseListVo::getCourseIdCn)
@@ -206,7 +205,6 @@ public class BaseClassCourseController {
     @SaCheckPermission("baseclasscourse:delete")
     public RT<Boolean> delete(@Valid @RequestBody List<Long> ids) {
         return RT.ok(baseClassCourseService.removeBatchByIds(ids));
-
     }
 
     @PostMapping("/import")
@@ -303,12 +301,12 @@ public class BaseClassCourseController {
         return RT.ok(result);
     }
 
-    @PostMapping("/class-course-textbook-export-query")
-    @ApiOperation(value = "班级课程教材详情条件导出")
-    public ResponseEntity<byte[]> classCourseTextbookExportQuery(@Valid @RequestBody ClassCourseTextbookExportQueryDto dto) throws IOException {
-//    @GetMapping("/class-course-textbook-export-query")
+//    @PostMapping("/class-course-textbook-export-query")
 //    @ApiOperation(value = "班级课程教材详情条件导出")
-//    public ResponseEntity<byte[]> classCourseTextbookExportQuery(@Valid ClassCourseTextbookExportQueryDto dto) throws IOException {
+//    public ResponseEntity<byte[]> classCourseTextbookExportQuery(@Valid @RequestBody ClassCourseTextbookExportQueryDto dto) throws IOException {
+    @GetMapping("/class-course-textbook-export-query")
+    @ApiOperation(value = "班级课程教材详情条件导出")
+    public ResponseEntity<byte[]> classCourseTextbookExportQuery(@Valid ClassCourseTextbookExportQueryDto dto) throws IOException {
         ByteArrayOutputStream bot = baseClassCourseService.classCourseTextbookExportQuery(dto);
         return RT.fileStream(bot.toByteArray(), "BaseClassCourse" + ExcelTypeEnum.XLSX.getValue());
     }

+ 33 - 16
src/main/java/com/xjrsoft/module/base/service/impl/BaseClassCourseServiceImpl.java

@@ -513,26 +513,26 @@ public class BaseClassCourseServiceImpl extends MPJBaseServiceImpl<BaseClassCour
         cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
         cellStyle.setAlignment(HorizontalAlignment.CENTER);
 
+        List<List<String>> inList = new ArrayList<>();
+        List<Integer> mergeStepList = new ArrayList<>();
         for (Map.Entry<Long, List<ClassCourseTextbookExportQueryVo>> entry : dataMapByClassId.entrySet()){
             Long key = entry.getKey();
             List<ClassCourseTextbookExportQueryVo> value = entry.getValue();
-            List<List<String>> inList = new ArrayList<>();
 
             // 小计合计
             BigDecimal totalDiscountPrice = BigDecimal.ZERO;
             for (ClassCourseTextbookExportQueryVo c : value){
                 totalDiscountPrice = totalDiscountPrice.add(ObjectUtils.isNotEmpty(c.getDiscountPrice()) ? c.getDiscountPrice() : BigDecimal.ZERO);
             }
-            for (ClassCourseTextbookExportQueryVo c : value){
-                c.setTotalDiscountPrice(totalDiscountPrice);
-            }
 
             // 总价合计
             BigDecimal totalPriceTotal = BigDecimal.ZERO;
             for (ClassCourseTextbookExportQueryVo c : value){
                 totalPriceTotal = totalPriceTotal.add(ObjectUtils.isNotEmpty(c.getTotalPrices()) ? c.getTotalPrices() : BigDecimal.ZERO);
             }
+
             for (ClassCourseTextbookExportQueryVo c : value){
+                c.setTotalDiscountPrice(totalDiscountPrice);
                 c.setTotalPriceTotal(totalPriceTotal);
             }
 
@@ -554,24 +554,41 @@ public class BaseClassCourseServiceImpl extends MPJBaseServiceImpl<BaseClassCour
                 date.add(ObjectUtils.isNotEmpty(c.getTotalPriceTotal()) ? c.getTotalPriceTotal().toString() : "0");
                 inList.add(date);
             }
+            mergeStepList.add(value.size());
+        }
 
-            for (List<String> rowData : inList) {
-                Row dataRow = sheet.createRow(dataRowNumber);
-                for (int i = 0; i < rowData.size(); i++) {
-                    sheet.autoSizeColumn(i);
-                    Cell cell = dataRow.createCell(i);
-                    cell.setCellValue(rowData.get(i));
-                    cell.setCellStyle(cellStyle);
-                }
+        Cell cell;
+        for (List<String> rowData : inList) {
+            Row dataRow = sheet.createRow(dataRowNumber);
+            int size = rowData.size();
+            for (int i = 0; i < size; i++) {
+                cell = dataRow.createCell(i);
+                cell.setCellValue(rowData.get(i));
+                cell.setCellStyle(cellStyle);
+            }
+            dataRowNumber++;
+        }
+
+        // 合并
+        dataRowNumber = 1;
+
+        for (Integer step : mergeStepList){
+            if(step == 1){
                 dataRowNumber++;
             }
-            if(inList.size() > 1){
-                sheet.addMergedRegion(new CellRangeAddress(dataRowNumber - inList.size(), dataRowNumber - 1, 9, 9));
-                sheet.addMergedRegion(new CellRangeAddress(dataRowNumber - inList.size(), dataRowNumber - 1, 10, 10));
-                sheet.addMergedRegion(new CellRangeAddress(dataRowNumber - inList.size(), dataRowNumber - 1, 12, 12));
+
+            if(step > 1){
+                sheet.addMergedRegion(new CellRangeAddress(dataRowNumber, dataRowNumber + step - 1, 9, 9));
+                sheet.addMergedRegion(new CellRangeAddress(dataRowNumber, dataRowNumber + step - 1, 10, 10));
+                sheet.addMergedRegion(new CellRangeAddress(dataRowNumber, dataRowNumber + step - 1, 12, 12));
+                dataRowNumber = dataRowNumber + step;
             }
         }
 
+        for (int i = 0; i < importConfigs.size(); i++) {
+            sheet.autoSizeColumn(i);
+        }
+
         //写入文件
         ByteArrayOutputStream bot = new ByteArrayOutputStream();
         workbook.write(bot);

+ 23 - 2
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookServiceImpl.java

@@ -58,6 +58,7 @@ import org.springframework.web.multipart.MultipartFile;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -123,8 +124,6 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
         LambdaQueryWrapper<Textbook> textbookLambdaQueryWrapper = new LambdaQueryWrapper<>();
         textbookLambdaQueryWrapper
                 .eq(Textbook::getIssn, textbook.getIssn())
-                .eq(Textbook::getSubjectGroupId, textbook.getSubjectGroupId())
-                .eq(Textbook::getCourseSubjectId, textbook.getCourseSubjectId())
                 .eq(Textbook::getDeleteMark, DeleteMark.NODELETE.getCode())
         ;
 
@@ -143,6 +142,28 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean updateRubAndHand(Textbook textbook) {
+        Textbook old = textbookTextbookMapper.selectById(textbook.getId());
+        if(ObjectUtils.isEmpty(old)){
+            throw new MyException("教材信息已经被修改,请刷新重试。");
+        }
+
+        // 折扣修改,定价未修改
+        if(ObjectUtils.isNotEmpty(textbook.getDiscount()) && ObjectUtils.isEmpty(textbook.getPrice())){
+            BigDecimal discount =  BigDecimal.valueOf(textbook.getDiscount()).divide(BigDecimal.valueOf(10), 2, RoundingMode.DOWN);
+            textbook.setDiscountPrice(old.getPrice().multiply(discount));
+        }
+
+        // 折扣未修改,定价修改
+        if(ObjectUtils.isEmpty(textbook.getDiscount()) && ObjectUtils.isNotEmpty(textbook.getPrice())){
+            BigDecimal discount =  BigDecimal.valueOf(old.getDiscount()).divide(BigDecimal.valueOf(10), 2, RoundingMode.DOWN);
+            textbook.setDiscountPrice(textbook.getPrice().multiply(discount));
+        }
+
+        // 折扣修改,定价修改
+        if(ObjectUtils.isNotEmpty(textbook.getDiscount()) && ObjectUtils.isNotEmpty(textbook.getPrice())){
+            BigDecimal discount =  BigDecimal.valueOf(textbook.getDiscount()).divide(BigDecimal.valueOf(10), 2, RoundingMode.DOWN);
+            textbook.setDiscountPrice(textbook.getPrice().multiply(discount));
+        }
         int num = textbookTextbookMapper.updateById(textbook);
         return num > 0;
     }

+ 5 - 0
src/main/java/com/xjrsoft/module/textbook/vo/TextbookPageVo.java

@@ -143,4 +143,9 @@ public class TextbookPageVo {
      */
     @ApiModelProperty("预估折扣")
     private Double discount;
+    /**
+     * 预估折扣
+     */
+    @ApiModelProperty("预估折扣后的价格")
+    private BigDecimal discountPrice;
 }

+ 26 - 50
src/main/resources/mapper/base/BaseClassCourse.xml

@@ -5,69 +5,45 @@
 <mapper namespace="com.xjrsoft.module.base.mapper.BaseClassCourseMapper">
     <select id="getPage" parameterType="com.xjrsoft.module.base.dto.BaseClassCoursePageDto" resultType="com.xjrsoft.module.base.vo.BaseClassCoursePageVo">
         SELECT
-        t.id                                          AS class_id,
-        t.name                                        AS class_name,
-        t1.name                                       AS teacher_name,
-        t3.name                                       AS major_name,
-        t4.name                                       AS dept_name,
-        (SELECT GROUP_CONCAT(DISTINCT t6.name SEPARATOR '、')
-        FROM base_class_course t5
-        LEFT JOIN base_course_subject t6 ON t6.id = t5.course_id
-        WHERE t5.class_id = t.id
-        AND t5.delete_mark = 0
-        <if test="dto.semester != null">
-        AND t5.base_semester_id = #{dto.semester}
-        </if>
-        ) AS course_name,
-        (SELECT GROUP_CONCAT(DISTINCT t7.book_name SEPARATOR '、')
-        FROM base_class_course t5
-        LEFT JOIN textbook t7 ON t7.id = t5.textbook_id
-        WHERE t5.class_id = t.id
-        AND t5.delete_mark = 0
-        <if test="dto.semester != null">
-        AND t5.base_semester_id = #{dto.semester}
-        </if>
-        ) AS textbook_name,
-        (SELECT sum(t8.price)
-        FROM base_class_course t5
-        LEFT JOIN textbook t8 ON t8.id = t5.textbook_id
-        WHERE t5.class_id = t.id
-        AND t5.delete_mark = 0
-        <if test="dto.semester != null">
-            AND t5.base_semester_id = #{dto.semester}
-        </if>
-        ) AS amount,
-        (SELECT sum(t8.discount_price)
-        FROM base_class_course t5
-        LEFT JOIN textbook t8 ON t8.id = t5.textbook_id
-        WHERE t5.class_id = t.id
-        AND t5.delete_mark = 0
-        <if test="dto.semester != null">
-            AND t5.base_semester_id = #{dto.semester}
-        </if>
-        ) AS count
+        t.id AS class_id,
+        t.name AS class_name,
+        t1.name AS teacher_name,
+        t3.name AS major_name,
+        t4.name AS dept_name,
+        GROUP_CONCAT(DISTINCT t6.name SEPARATOR '、') AS course_name,
+        GROUP_CONCAT(DISTINCT t7.book_name SEPARATOR '、') AS textbook_name,
+        SUM(t8.price) AS amount,
+        SUM(t8.discount_price) AS count
         FROM base_class t
         LEFT JOIN xjr_user t1 ON t1.id = t.teacher_id
         LEFT JOIN base_class_major_set t2 ON t2.class_id = t.id
         LEFT JOIN base_major_set t3 ON t3.id = t2.major_set_id
         LEFT JOIN xjr_department t4 ON t4.id = t.org_id
+        LEFT JOIN base_class_course t5 ON t5.class_id = t.id AND t5.delete_mark = 0
+        LEFT JOIN base_course_subject t6 ON t6.id = t5.course_id AND t6.delete_mark = 0
+        LEFT JOIN textbook t7 ON t7.id = t5.textbook_id AND t7.delete_mark = 0
+        LEFT JOIN textbook t8 ON t8.id = t5.textbook_id AND t8.delete_mark = 0
         WHERE t.delete_mark = 0
+        <if test="dto.semester != null">
+            AND t5.base_semester_id = #{dto.semester}
+        </if>
         <if test="dto.className != null and dto.className != ''">
-            and t.name like concat('%', #{dto.className}, '%')
+            AND t.name LIKE CONCAT('%', #{dto.className}, '%')
         </if>
         <if test="dto.deptId != null">
-            and t4.id = #{dto.deptId}
+            AND t4.id = #{dto.deptId}
         </if>
         GROUP BY t.id, t.name, t1.name, t3.name, t4.name
-        <if test="dto.courseSet == 1">
-            HAVING LENGTH(course_name) > 0
-        </if>
-        <if test="dto.courseSet == 2">
-            HAVING COALESCE(LENGTH(course_name), 0) = 0
-        </if>
+        <choose>
+            <when test="dto.courseSet == 1">
+                HAVING LENGTH(course_name) > 0
+            </when>
+            <when test="dto.courseSet == 2">
+                HAVING LENGTH(course_name) = 0
+            </when>
+        </choose>
     </select>
 
-
     <select id="getAllCourseBook" resultType="com.xjrsoft.module.base.entity.CourseBookInfo">
         SELECT
             t.course_subject_id                    AS courseId,

+ 5 - 5
src/main/resources/mapper/textbook/TextbookMapper.xml

@@ -5,11 +5,11 @@
 <mapper namespace="com.xjrsoft.module.textbook.mapper.TextbookMapper">
     <select id="getPage" parameterType="com.xjrsoft.module.textbook.dto.TextbookPageDto"
             resultType="com.xjrsoft.module.textbook.vo.TextbookPageVo">
-        SELECT t1.id,t1.id AS textbookId,t1.sort_code,t1.issn,t1.book_name,t1.publishing_house,t1.editor_in_chief,
-        t1.subject_group_id,t2.group_name,t3.name AS semester_name,t4.name AS course_name,t7.name AS
-        is_textbook_plan_cn,
-        t5.name AS
-        textbook_type_cn,t1.specifications_models,t1.appraisal_price,t1.price,t1.discount,t1.subtotal,t1.stock,
+        SELECT
+            t1.id,t1.id AS textbookId,t1.sort_code,t1.issn,t1.book_name,t1.publishing_house,t1.editor_in_chief,
+        t1.subject_group_id,t2.group_name,t3.name AS semester_name,t4.name AS course_name,t7.name AS is_textbook_plan_cn,
+        t5.name AS textbook_type_cn,t1.specifications_models,t1.appraisal_price,t1.price,t1.discount,t1.subtotal,t1.stock,
+
         (SELECT GROUP_CONCAT(c2.name) FROM textbook_class_relation c1
         LEFT JOIN base_class c2 ON c1.class_id = c2.id
         WHERE c1.textbook_id = t1.id) AS use_class,

+ 6 - 0
src/main/resources/sqlScript/update_sql.sql

@@ -0,0 +1,6 @@
+-- ----------------------------
+-- 2024-12-25 10:16
+-- 公告回复过长
+-- ----------------------------
+alter table xjr_oa_news_relation
+    modify reply_content varchar(256) null comment '回复内容';

+ 39 - 38
src/main/resources/sqlScript/views_sql.sql

@@ -43,48 +43,49 @@
 -- ;
 
 create or replace definer = root@`%` view smart_campus.v_cse_feeobj1 as
-select 1001                                                                                                         AS `pk_corp`,
-       `t`.`id`                                                                                                     AS `pkfeeobj`,
-       `t`.`student_id`                                                                                             AS `Studentcode`,
-       `t1`.`name`                                                                                                  AS `feeobjname`,
+select 1001                                                    AS `pk_corp`,
+       `t`.`id`                                                AS `pkfeeobj`,
+       `t`.`student_id`                                        AS `Studentcode`,
+       `t1`.`name`                                             AS `feeobjname`,
        (case
             when (`t1`.`gender` = 'SB10001') then '男'
             when (`t1`.`gender` = 'SB10002') then '女'
-            else '其他' end)                                                                                        AS `sex`,
-       `t3`.`id`                                                                                                    AS `classcdoe`,
-       cast(substring_index(`t4`.`name`, '年', 1) as unsigned)                                                      AS `enteryear`,
-       `t6`.`id`                                                                                                    AS `deptcode`,
-       `t7`.`id`                                                                                                    AS `speccode`,
-       `t7`.`study_year`                                                                                            AS `ratetypecdoe`,
-    year(`t8`.`certificate_date`)                                                                                AS `leaveyear`,
-    `t1`.`credential_number`                                                                                     AS `personalid`,
-    NULL                                                                                                         AS `helpcode`,
-    NULL                                                                                                         AS `quartercode`,
-    NULL                                                                                                         AS `nationality`,
-    NULL                                                                                                         AS `address`,
-    (case
-    when (`t3`.`is_graduate` = 1) then '在读'
-    when (`t3`.`is_graduate` = 2) then '毕业'
-    else '其他' end)                                                                                        AS `state`,
-    NULL                                                                                                         AS `Userdef2`,
-    NULL                                                                                                         AS `Userdef1`,
-    NULL                                                                                                         AS `Resourcecode`,
-    NULL                                                                                                         AS `Birthday`,
-    NULL                                                                                                         AS `Account`,
-    NULL                                                                                                         AS `bank`,
-    NULL                                                                                                         AS `Remarks`,
-    NULL                                                                                                         AS `Property`,
-    NULL                                                                                                         AS `telephone`,
-    NULL                                                                                                         AS `E_mail`
+            else '其他' end)                                   AS `sex`,
+       `t3`.`id`                                               AS `classcdoe`,
+       cast(substring_index(`t4`.`name`, '年', 1) as unsigned) AS `enteryear`,
+       `t6`.`id`                                               AS `deptcode`,
+       `t7`.`id`                                               AS `speccode`,
+       `t7`.`study_year`                                       AS `ratetypecdoe`,
+       year(`t8`.`certificate_date`)                           AS `leaveyear`,
+       `t1`.`credential_number`                                AS `personalid`,
+       NULL                                                    AS `helpcode`,
+       t9.name                                                 AS `quartercode`,
+       NULL                                                    AS `nationality`,
+       NULL                                                    AS `address`,
+       (case
+            when (`t3`.`is_graduate` = 1) then '在读'
+            when (`t3`.`is_graduate` = 2) then '毕业'
+            else '其他' end)                                   AS `state`,
+       NULL                                                    AS `Userdef2`,
+       NULL                                                    AS `Userdef1`,
+       NULL                                                    AS `Resourcecode`,
+       NULL                                                    AS `Birthday`,
+       NULL                                                    AS `Account`,
+       NULL                                                    AS `bank`,
+       NULL                                                    AS `Remarks`,
+       NULL                                                    AS `Property`,
+       NULL                                                    AS `telephone`,
+       NULL                                                    AS `E_mail`
 from `smart_campus`.`base_student` `t`
-    left join `smart_campus`.`xjr_user` `t1`on `t1`.`id` = `t`.`user_id`
-    left join `smart_campus`.`base_student_school_roll` `t2` on `t1`.`id` = `t2`.`user_id`
-    left join `smart_campus`.`base_class` `t3` on `t2`.`class_id` = `t3`.`id`
-    left join `smart_campus`.`base_grade` `t4` on `t3`.`grade_id` = `t4`.`id`
-    left join `smart_campus`.`xjr_department` `t6` on `t6`.`id` = `t3`.`org_id`
-    left join `smart_campus`.`base_major_set` `t7` on `t7`.`id` = `t2`.`major_set_id`
-    left join `smart_campus`.`base_student_graduate` `t8` on `t8`.`user_id` = `t1`.`id`
+         left join `smart_campus`.`xjr_user` `t1` on `t1`.`id` = `t`.`user_id`
+         left join `smart_campus`.`base_student_school_roll` `t2` on `t1`.`id` = `t2`.`user_id`
+         left join `smart_campus`.`base_class` `t3` on `t2`.`class_id` = `t3`.`id`
+         left join `smart_campus`.`base_grade` `t4` on `t3`.`grade_id` = `t4`.`id`
+         left join `smart_campus`.`xjr_department` `t6` on `t6`.`id` = `t3`.`org_id`
+         left join `smart_campus`.`base_major_set` `t7` on `t7`.`id` = `t2`.`major_set_id`
+         left join `smart_campus`.`base_student_graduate` `t8` on `t8`.`user_id` = `t1`.`id`
+         left join `smart_campus`.`xjr_dictionary_detail` `t9` on `t9`.`code` = `t2`.`stduy_status`
 where t.delete_mark = 0
   and t1.delete_mark = 0
   and t2.delete_mark = 0
-and t2.archives_status = 'FB2901';
+  and t2.archives_status = 'FB2901';

+ 39 - 0
src/test/java/com/xjrsoft/module/base/service/impl/BaseClassCourseServiceImplTest.java

@@ -0,0 +1,39 @@
+package com.xjrsoft.module.base.service.impl;
+
+import com.xjrsoft.XjrSoftApplication;
+import com.xjrsoft.module.base.entity.BaseClassCourse;
+import com.xjrsoft.module.base.service.IBaseClassCourseService;
+import com.xjrsoft.module.courseTable.service.ICourseTableService;
+import org.junit.jupiter.api.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = XjrSoftApplication.class)
+class BaseClassCourseServiceImplTest {
+    @Autowired
+    private IBaseClassCourseService baseClassCourseService;
+
+    @Test
+    public void test(){
+        List<BaseClassCourse> baseClassCourseList = baseClassCourseService.list();
+        Map<Long, List<String>> tourseId_textbookIdMap = baseClassCourseList.stream()
+                .collect(Collectors.groupingBy(
+                        BaseClassCourse::getClassId,
+                        Collectors.mapping(
+                                course -> course.getClassId() + "_" + course.getCourseId() + "_" + course.getTextbookId(),
+                                Collectors.toList()
+                        )
+                ));
+
+        for (BaseClassCourse baseClassCourse : baseClassCourseList){
+
+        }
+    }
+}