Преглед изворни кода

Merge remote-tracking branch 'origin/dev' into dev

dzx пре 5 месеци
родитељ
комит
1aeab25a4f

+ 12 - 5
src/main/java/com/xjrsoft/config/JacksonConfig.java

@@ -9,10 +9,8 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.PropertyAccessor;
 import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.module.SimpleModule;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
 import com.xjrsoft.common.handler.EasyExcelLocalDateTimeConverter;
@@ -53,7 +51,15 @@ public class JacksonConfig {
         return builder -> {
             builder.serializerByType(Long.class, ToStringSerializer.instance);
             builder.serializerByType(Long.TYPE, ToStringSerializer.instance);
-            builder.serializerByType(BigDecimal.class, ToStringSerializer.instance);
+
+            // 自定义 BigDecimal 序列化器,使用 toPlainString()
+            builder.serializerByType(BigDecimal.class, new JsonSerializer<BigDecimal>() {
+                @Override
+                public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
+                    gen.writeString(value.stripTrailingZeros().toPlainString());
+                }
+            });
+
             builder.serializerByType(LocalDateTime.class, localDateTimeSerializer());
             builder.serializerByType(INTERVALDS.class, intervalDSSerializer());
             builder.deserializerByType(LocalDateTime.class, localDateTimeDeserializer());
@@ -143,4 +149,5 @@ public class JacksonConfig {
             }
         };
     }
+
 }

+ 18 - 7
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookIssueRecordServiceImpl.java

@@ -128,8 +128,19 @@ public class TextbookIssueRecordServiceImpl extends MPJBaseServiceImpl<TextbookI
                 .eq(ObjectUtils.isNotEmpty(dto.getReturnState()) && dto.getReturnState() == 0, TextbookIssueRecord::getRecedeNumber, 0)
                 .orderByDesc(TextbookIssueRecord::getCreateDate)
         ;
-
-        return textbookIssueRecordMapper.selectJoinPage(ConventPage.getPage(dto), TextbookIssueRecordPageVo.class, textbookIssueRecordMPJLambdaWrapper);
+        IPage<TextbookIssueRecordPageVo> result = textbookIssueRecordMapper.selectJoinPage(ConventPage.getPage(dto), TextbookIssueRecordPageVo.class, textbookIssueRecordMPJLambdaWrapper);
+        for (TextbookIssueRecordPageVo vo : result.getRecords()){
+            if(ObjectUtils.isNotEmpty(vo.getPrice())){
+                vo.setPrice(vo.getPrice().stripTrailingZeros());
+            }
+            if(ObjectUtils.isNotEmpty(vo.getSubtotal())){
+                vo.setSubtotal(vo.getSubtotal().stripTrailingZeros());
+            }
+            if(ObjectUtils.isNotEmpty(vo.getActualTotalPrice())){
+                vo.setActualTotalPrice(vo.getActualTotalPrice().stripTrailingZeros());
+            }
+        }
+        return result;
 //        return textbookIssueRecordMapper.getPage(page, dto);
     }
 
@@ -467,12 +478,12 @@ public class TextbookIssueRecordServiceImpl extends MPJBaseServiceImpl<TextbookI
                 data.add(vo.getIssn());
                 data.add(vo.getEditorInChief());
                 data.add(vo.getPublishingHouse());
-                data.add(vo.getPrice() + "");
-                data.add(vo.getSubtotal() + "");
+                data.add(ObjectUtils.isNotEmpty(vo.getPrice()) ? vo.getPrice().stripTrailingZeros().toPlainString() : BigDecimal.ZERO.toPlainString());
+                data.add(ObjectUtils.isNotEmpty(vo.getSubtotal()) ? vo.getSubtotal().stripTrailingZeros().toPlainString() : BigDecimal.ZERO.toPlainString());
                 if (ObjectUtils.isEmpty(vo.getSummation())) {
                     data.add("0");
                 } else {
-                    data.add(vo.getSummation() + "");
+                    data.add(vo.getSummation().stripTrailingZeros().toPlainString());
                 }
 
                 numMap = vo.getNumMap();
@@ -494,7 +505,7 @@ public class TextbookIssueRecordServiceImpl extends MPJBaseServiceImpl<TextbookI
                 data.add(vo.getIssueNumber() + "");
                 data.add(vo.getRecedeNumber() + "");
                 data.add(vo.getActualIssueNumber() + "");
-                data.add(vo.getActualTotalPrice() + "");
+                data.add(ObjectUtils.isNotEmpty(vo.getActualTotalPrice()) ? vo.getActualTotalPrice().stripTrailingZeros().toPlainString() : BigDecimal.ZERO.toPlainString());
                 data.add(vo.getRemark());
 
                 resultList.add(data);
@@ -572,7 +583,7 @@ public class TextbookIssueRecordServiceImpl extends MPJBaseServiceImpl<TextbookI
             totalSubtotalRowCell.setCellStyle(cellStyle);
 
             Cell totalPriceRowCell = totalSubtotalRow.createCell(eachImportConfigs.size() - 2);
-            totalPriceRowCell.setCellValue(totalPrice.toString());
+            totalPriceRowCell.setCellValue(totalPrice.stripTrailingZeros().toPlainString());
             totalPriceRowCell.setCellStyle(cellStyle);
 
             sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 0, 6));

+ 5 - 5
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookSubscriptionServiceImpl.java

@@ -276,7 +276,7 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
         textbookSubscriptionDetailVo.setStudentTatolNum(stuNum);
         textbookSubscriptionDetailVo.setTeacherTatolNum(teaNum);
         textbookSubscriptionDetailVo.setSum(stuNum + teaNum);
-        textbookSubscriptionDetailVo.setSumPrice(totalPrice);
+        textbookSubscriptionDetailVo.setSumPrice(totalPrice.stripTrailingZeros());
         return textbookSubscriptionDetailVo;
     }
 
@@ -537,7 +537,7 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
                 .collect(Collectors.groupingBy(
                         TextbookWarehouseRecord::getDataItemId, // 第一层分组:按征订项 ID 分组
                         Collectors.toMap(
-                                p -> p.getPrice().stripTrailingZeros().toPlainString() + "-" + String.format("%.2f", p.getDiscount()), // 第二层映射:按入库定价作为键
+                                p -> p.getPrice().stripTrailingZeros().toString() + "-" + String.format("%.2f", p.getDiscount()), // 第二层映射:按入库定价作为键
                                 wr -> wr,                      // 值为 TextbookStudentClaim 对象本身
                                 (existing, replacement) -> existing   // 如果有重复键,保留现有的值
                         )
@@ -594,7 +594,7 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
                 }
 
                 if(MapUtils.isNotEmpty(oldTextbookWarehouseRecordByPrice)){
-                    oldTextbookWarehouseRecord = oldTextbookWarehouseRecordByPrice.get(dto.getPrice().stripTrailingZeros().toPlainString() + "-" + String.format("%.2f", dto.getDiscount()));
+                    oldTextbookWarehouseRecord = oldTextbookWarehouseRecordByPrice.get(dto.getPrice().stripTrailingZeros().toString() + "-" + String.format("%.2f", dto.getDiscount()));
                 }
             }
 
@@ -708,7 +708,7 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
                 .collect(Collectors.groupingBy(
                         TextbookWarehouseRecord::getDataItemId, // 第一层分组:按征订项 ID 分组
                         Collectors.toMap(
-                                p -> p.getPrice().stripTrailingZeros().toPlainString() + "-" + String.format("%.2f", p.getDiscount()), // 第二层映射:按入库定价作为键
+                                p -> p.getPrice().stripTrailingZeros().toString() + "-" + String.format("%.2f", p.getDiscount()), // 第二层映射:按入库定价作为键
                                 wr -> wr,                      // 值为 TextbookStudentClaim 对象本身
                                 (existing, replacement) -> existing   // 如果有重复键,保留现有的值
                         )
@@ -779,7 +779,7 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
 
             oldTextbookWarehouseRecordByPrice = textbookWarehouseRecordByItemIdByPriceMap.get(Long.parseLong(vo.getTextbookSubscriptionItemId()));
             if(MapUtils.isNotEmpty(oldTextbookWarehouseRecordByPrice)){
-                oldTextbookWarehouseRecord = oldTextbookWarehouseRecordByPrice.get(vo.getPrice().stripTrailingZeros().toPlainString() + "-" + String.format("%.2f", vo.getDiscount()));
+                oldTextbookWarehouseRecord = oldTextbookWarehouseRecordByPrice.get(vo.getPrice().stripTrailingZeros().toString() + "-" + String.format("%.2f", vo.getDiscount()));
             }
 
             updateItem = new TextbookSubscriptionItem();

+ 15 - 1
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookWarehouseRecordServiceImpl.java

@@ -112,7 +112,21 @@ public class TextbookWarehouseRecordServiceImpl extends MPJBaseServiceImpl<Textb
                 .gt(ObjectUtils.isNotEmpty(dto.getReturnState()) && dto.getReturnState() == 1, TextbookWarehouseRecord::getRecedeNumber, 0)
                 .orderByDesc(TextbookWarehouseRecord::getCreateDate)
         ;
-        return this.selectJoinListPage(ConventPage.getPage(dto), TextbookWarehouseRecordPageVo.class, textbookWarehouseRecordMPJLambdaWrapper);
+
+        IPage<TextbookWarehouseRecordPageVo> page = this.selectJoinListPage(ConventPage.getPage(dto), TextbookWarehouseRecordPageVo.class, textbookWarehouseRecordMPJLambdaWrapper);
+        for (TextbookWarehouseRecordPageVo vo : page.getRecords()){
+            if(ObjectUtils.isNotEmpty(vo.getPrice())){
+                vo.setPrice(vo.getPrice().stripTrailingZeros());
+            }
+            if(ObjectUtils.isNotEmpty(vo.getSubtotal())){
+                vo.setSubtotal(vo.getSubtotal().stripTrailingZeros());
+            }
+            if(ObjectUtils.isNotEmpty(vo.getActualTotalPrice())){
+                vo.setActualTotalPrice(vo.getActualTotalPrice().stripTrailingZeros());
+            }
+        }
+
+        return page;
 //        return textbookWarehouseRecordMapper.getPage(page, dto);
     }
 

+ 7 - 1
src/main/resources/sqlScript/20250603sql.sql

@@ -8,4 +8,10 @@ alter table textbook_discount_alter_record
     add new_price decimal(15, 6) null comment '新的价格' after old_price;
 
 alter table textbook_student_claim
-    add textbook_warehouse_record_id bigint null comment '关联入库主键' after textbook_id;
+    add textbook_warehouse_record_id bigint null comment '关联入库主键' after textbook_id;
+
+INSERT INTO `tl`.`magic_api_file` (`file_path`, `file_content`)
+VALUES ('/magic-api/api/教务/可以退书的入库记录.ms',
+        '{\n  \"properties\" : { },\n  \"id\" : \"copy1740020189208d10722\",\n  \"script\" : null,\n  \"groupId\" : \"b28ab2a82c5d460f95b60a0c70ac1d15\",\n  \"name\" : \"可以退书的入库记录\",\n  \"createTime\" : null,\n  \"updateTime\" : 1740644714570,\n  \"lock\" : null,\n  \"createBy\" : null,\n  \"updateBy\" : null,\n  \"path\" : \"can-recede-warehouse-record\",\n  \"method\" : \"GET\",\n  \"parameters\" : [ {\n    \"name\" : \"baseSemesterId\",\n    \"value\" : null,\n    \"description\" : null,\n    \"required\" : false,\n    \"dataType\" : \"String\",\n    \"type\" : null,\n    \"defaultValue\" : null,\n    \"validateType\" : null,\n    \"error\" : null,\n    \"expression\" : null,\n    \"children\" : null\n  } ],\n  \"options\" : [ ],\n  \"requestBody\" : \"\",\n  \"headers\" : [ ],\n  \"paths\" : [ ],\n  \"responseBody\" : \"{\\n    \\\"code\\\": 0,\\n    \\\"msg\\\": \\\"success\\\",\\n    \\\"data\\\": [],\\n    \\\"timestamp\\\": \\\"1740644443211\\\",\\n    \\\"requestTime\\\": \\\"1740644443201\\\",\\n    \\\"executeTime\\\": \\\"10\\\"\\n}\",\n  \"description\" : null,\n  \"requestBodyDefinition\" : null,\n  \"responseBodyDefinition\" : null\n}\r\n================================\r\nreturn db.select(\"\"\"\r\nSELECT t.id,t.textbook_id,tt.book_name,t.order_number,t.remain_number from textbook_warehouse_record t\r\nleft join textbook tt on t.textbook_id = tt.id\r\nwhere t.delete_mark = 0\r\nand t.remain_number > 0\r\nand t.base_semester_id = #{baseSemesterId}\r\norder by t.create_date desc\r\n\"\"\");');
+
+

+ 4 - 2
src/test/java/com/xjrsoft/xjrsoftboot/StringTest.java

@@ -4,6 +4,7 @@ import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
 import com.xjrsoft.module.base.entity.BaseClass;
 import org.junit.jupiter.api.Test;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -15,8 +16,9 @@ public class StringTest {
 
     @Test
     void test2(){
-
-        System.out.println(underscoreToCamel("create_user_id"));
+        BigDecimal bigDecimal = new BigDecimal("40001");
+        String str = bigDecimal.stripTrailingZeros().toString();
+        System.out.println(str); // 输出: 123.45
     }
 
     public static String underscoreToCamel(String input) {