Ver código fonte

08 19 01 修改json依赖 统一使用jackson

hr 4 anos atrás
pai
commit
76dc919670

+ 1 - 5
pom.xml

@@ -106,11 +106,7 @@
             <version>8.0.16</version>
         </dependency>
 
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>fastjson</artifactId>
-            <version>1.2.7</version>
-        </dependency>
+
         <!--数据连接池-->
         <dependency>
             <groupId>com.alibaba</groupId>

+ 6 - 6
src/main/java/com/imed/costaccount/common/shiro/OAuth2Filter.java

@@ -1,11 +1,11 @@
 package com.imed.costaccount.common.shiro;
 
 import cn.hutool.core.util.StrUtil;
-import cn.hutool.json.JSONUtil;
 import com.auth0.jwt.exceptions.TokenExpiredException;
 import com.imed.costaccount.common.token.JwtUtil;
 import com.imed.costaccount.common.token.RedisUtil;
 import com.imed.costaccount.common.util.ErrorResult;
+import com.imed.costaccount.common.util.JacksonUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.authc.AuthenticationException;
 import org.apache.shiro.authc.AuthenticationToken;
@@ -92,7 +92,7 @@ public class  OAuth2Filter extends AuthenticatingFilter {
         String token = this.getRequestToken(req);
         // 如果前端传过来的token是null
         if (StrUtil.isBlank(token)) {
-            String json = JSONUtil.toJsonStr(ErrorResult.errorMsg(499, "请先登录"));
+            String json = JacksonUtil.obj2Str(ErrorResult.errorMsg(499, "请先登录"));
             resp.getWriter().print(json);
             return false;
         }
@@ -101,13 +101,13 @@ public class  OAuth2Filter extends AuthenticatingFilter {
         int userId = jwtUtil.getUserId(token);
         String redisToken = (String) redisUtil.get(userId + "");
         if (StrUtil.isBlank(redisToken)) {
-            String json = JSONUtil.toJsonStr(ErrorResult.errorMsg(499, "令牌失效"));
+            String json = JacksonUtil.obj2Str(ErrorResult.errorMsg(499, "令牌失效"));
             resp.getWriter().print(json);
             return false;
         }
         // 如果两个缓存不一致,说明有人重新登录了
         if (!token.equalsIgnoreCase(redisToken)) {
-            String json = JSONUtil.toJsonStr(ErrorResult.errorMsg(499, "您的账户在其他地方登录,请重新登录或修改密码!"));
+            String json = JacksonUtil.obj2Str(ErrorResult.errorMsg(499, "您的账户在其他地方登录,请重新登录或修改密码!"));
             resp.getWriter().print(json);
             return false;
         }
@@ -118,13 +118,13 @@ public class  OAuth2Filter extends AuthenticatingFilter {
         } catch (TokenExpiredException e) {
             resp.setStatus(499);
             resp.getWriter().print("token过期");
-            String json = JSONUtil.toJsonStr(ErrorResult.errorMsg(499, "令牌过期,请重新登录"));
+            String json = JacksonUtil.obj2Str(ErrorResult.errorMsg(499, "令牌过期,请重新登录"));
             resp.getWriter().print(json);
             return false;
         } catch (Exception e) {
             resp.setStatus(499);
             resp.getWriter().print("无效的令牌");
-            String json = JSONUtil.toJsonStr(ErrorResult.errorMsg(499, "令牌异常,请重新登录"));
+            String json = JacksonUtil.obj2Str(ErrorResult.errorMsg(499, "令牌异常,请重新登录"));
             resp.getWriter().print(json);
             return false;
         }

+ 189 - 0
src/main/java/com/imed/costaccount/common/util/JacksonUtil.java

@@ -0,0 +1,189 @@
+package com.imed.costaccount.common.util;
+
+import cn.hutool.core.util.StrUtil;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * spring自带的jackson(json)工具类
+ */
+@Slf4j
+public class JacksonUtil {
+    private static ObjectMapper objectMapper = new ObjectMapper();
+    // 日起格式化
+    private static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";
+
+    // 以下静态初始化可以根据需求去掉对应的
+    static {
+        //对象的所有字段全部列入
+        objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
+        //取消默认转换timestamps形式
+        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+        //忽略空Bean转json的错误
+        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+        //所有的日期格式都统一为以下的样式,即yyyy-MM-dd HH:mm:ss
+        objectMapper.setDateFormat(new SimpleDateFormat(STANDARD_FORMAT));
+        //忽略 在json字符串中存在,但是在java对象中不存在对应属性的情况。防止错误
+        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+    }
+
+    /**
+     * 对象转json 字符串
+     *
+     * @param obj 对象
+     * @return Json格式字符串
+     */
+    public static <T> String obj2Str(T obj) {
+        try {
+            return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);
+        } catch (JsonProcessingException e) {
+            log.error("parse object to string error {}", e.getMessage());
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 对象转Json格式字符串(格式化的Json字符串)
+     *
+     * @param obj 对象
+     * @return 美化的Json格式字符串
+     */
+    public static <T> String obj2StrPretty(T obj) {
+        if (obj == null) {
+            return null;
+        }
+        try {
+            return obj instanceof String ? (String) obj : objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
+        } catch (JsonProcessingException e) {
+            log.warn("Parse Object to String error : {}", e.getMessage());
+            return null;
+        }
+    }
+
+    /**
+     * json字符串转对象
+     *
+     * @param str   json字符串
+     * @param clazz clazz对象
+     * @param <T>   泛型
+     * @return T
+     */
+    public static <T> T str2Obj(String str, Class<T> clazz) {
+        if (StrUtil.isBlank(str) || Objects.isNull(clazz)) {
+            log.error("parse string to object error : Params is null");
+            return null;
+        }
+        T t = null;
+
+        try {
+            t = clazz.equals(String.class) ? (T) str : objectMapper.readValue(str, clazz);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        return t;
+    }
+
+    /**
+     * 字符串转List等集合类型使用
+     *   样例:
+     *      *  JacksonUtil.string2ObjList(str,new TypeReference<List<User>>{})
+     * @param str 字符串
+     * @param typeReference 泛型包装
+     * @param <T> 泛型
+     * @return T
+     *
+     */
+    public static <T> T str2ObjList(String str, TypeReference<T> typeReference) {
+        if (StrUtil.isBlank(str) || Objects.isNull(typeReference)) {
+            log.error("parse string to object error : Params is null");
+            return null;
+        }
+        try {
+            return (T) (typeReference.getType().equals(String.class) ? str : objectMapper.readValue(str, typeReference));
+        } catch (JsonProcessingException e) {
+            log.warn("Parse String to Object error", e);
+            return null;
+        }
+    }
+
+    /**
+     *  字符串转List等集合类型使用
+     *         样例:
+     *              JacksonUtil.string2ObjList(str,List.class,User.class)
+     * @param str json字符串
+     * @param collectionClazz 集合class对象
+     * @param elementClazzs 元素class对象
+     * @param <T> 返回的类型
+     * @return T
+     */
+    public static <T> T str2ObjList(String str, Class<?> collectionClazz, Class<?>... elementClazzs) {
+        JavaType javaType = objectMapper.getTypeFactory().constructParametricType(collectionClazz, elementClazzs);
+        try {
+            return objectMapper.readValue(str, javaType);
+        } catch (IOException e) {
+            log.warn("Parse String to Object error : {}" + e.getMessage());
+            return null;
+        }
+    }
+
+    /**
+     * json字符串转为泛型 Map<String,Object>
+     *     可根据类型自己创建不同的泛型Map
+     * @param str json字符串
+     * @return
+     */
+    public static Map str2Map(String str) {
+        JavaType javaType = objectMapper.getTypeFactory().constructParametricType(Map.class, String.class, Object.class);
+        try {
+            return objectMapper.readValue(str, javaType);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 构建json字符串
+     * @return json Str
+     */
+    public static JacksonUtil.JsonBuilder builder() {
+        return new JacksonUtil.JsonBuilder();
+    }
+
+
+
+    public static class JsonBuilder {
+        private Map<String, Object> map = new HashMap<>();
+
+        JsonBuilder(){}
+
+        public JacksonUtil.JsonBuilder put(String key, Object value) {
+            map.put(key, value);
+            return this;
+        }
+
+        public String build() {
+            ObjectMapper objectMapper = new ObjectMapper();
+
+            try {
+                objectMapper.writeValueAsString(this.map);
+            } catch (JsonProcessingException e) {
+                e.printStackTrace();
+            }
+            return "{}";
+        }
+    }
+}

+ 0 - 144
src/main/java/com/imed/costaccount/common/util/JsonUtil.java

@@ -1,144 +0,0 @@
-package com.imed.costaccount.common.util;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.serializer.SerializeConfig;
-import com.alibaba.fastjson.serializer.SerializerFeature;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * @Auther: mukehua
- * @Date: 2018/10/18 10:20
- * @Description:
- */
-public final class JsonUtil {
-
-    private static final SerializeConfig config;
-
-    static {
-        config = new SerializeConfig();
-//        config.put(java.util.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
-//        config.put(java.sql.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
-    }
-
-    private static final SerializerFeature[] features = {SerializerFeature.WriteMapNullValue, // 输出空置字段
-            SerializerFeature.WriteNullListAsEmpty, // list字段如果为null,输出为[],而不是null
-            SerializerFeature.WriteNullNumberAsZero, // 数值字段如果为null,输出为0,而不是null
-            SerializerFeature.WriteNullBooleanAsFalse, // Boolean字段如果为null,输出为false,而不是null
-            SerializerFeature.WriteNullStringAsEmpty // 字符类型字段如果为null,输出为"",而不是null
-    };
-
-    /**
-     * 将对象转为JSON字符串
-     * @param object
-     * @return
-     */
-    public static String toJSONString(Object object) {
-        return JSON.toJSONString(object, config, features);
-    }
-
-    public static String toJSONStringNoFeatures(Object object) {
-        return JSON.toJSONString(object, config);
-    }
-
-    public static Object toBean(String text) {
-        return JSON.parse(text);
-    }
-
-    /**
-     * 将字符串转成指定类型bean
-     * @param text
-     * @param clazz
-     * @param <T>
-     * @return
-     */
-    public static <T> T toBean(String text, Class<T> clazz) {
-        return JSON.parseObject(text, clazz);
-    }
-
-    // 转换为数组
-    public static Object[] toArray(String text) {
-        return toArray(text, null);
-    }
-
-    /**
-     * 将字符串转成指定类型数组
-     * @param text
-     * @param clazz
-     * @param <T>
-     * @return
-     */
-    public static <T> Object[] toArray(String text, Class<T> clazz) {
-        return JSON.parseArray(text, clazz).toArray();
-    }
-
-    /**
-     * 将字符串转成指定类型集合
-     * @param text
-     * @param clazz
-     * @param <T>
-     * @return
-     */
-    public static <T> List<T> toList(String text, Class<T> clazz) {
-        return JSON.parseArray(text, clazz);
-    }
-
-//    /**
-//     * 将javabean转化为序列化的json字符串
-//     * @param keyvalue
-//     * @return
-//     */
-    /*public static Object beanToJson(KeyValue keyvalue) {
-        String textJson = JSON.toJSONString(keyvalue);
-        Object objectJson  = JSON.parse(textJson);
-        return objectJson;
-    }*/
-
-    /**
-     * 将string转化为序列化的json字符串
-     * @param text
-     * @return
-     */
-    public static Object textToJson(String text) {
-        Object objectJson  = JSON.parse(text);
-        return objectJson;
-    }
-
-    /**
-     * json字符串转化为map
-     * @param s
-     * @return
-     */
-    public static <K, V> Map<K, V>  stringToCollect(String s) {
-        Map<K, V> m = (Map<K, V>) JSONObject.parseObject(s);
-        return m;
-    }
-
-    /**
-     * 转换JSON字符串为对象
-     * @param jsonData
-     * @param clazz
-     * @return
-     */
-    public static Object convertJsonToObject(String jsonData, Class<?> clazz) {
-        return JSONObject.parseObject(jsonData, clazz);
-    }
-
-    public static Object convertJSONToObject(String content, Class<?> clazz) {
-        return JSONObject.parseObject(content, clazz);
-    }
-
-    /**
-     * 将map转化为string
-     * @param m
-     * @return
-     */
-    public static <K, V> String collectToString(Map<K, V> m) {
-        String s = JSONObject.toJSONString(m);
-        return s;
-    }
-}
-
-

+ 3 - 3
src/main/java/com/imed/costaccount/common/xss/XssHttpServletRequestWrapper.java

@@ -2,7 +2,7 @@ package com.imed.costaccount.common.xss;
 
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.HtmlUtil;
-import cn.hutool.json.JSONUtil;
+import com.imed.costaccount.common.util.JacksonUtil;
 
 import javax.servlet.ReadListener;
 import javax.servlet.ServletInputStream;
@@ -85,7 +85,7 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
         buffer.close();
         reader.close();
         in.close();
-        Map<String, Object> map = JSONUtil.parseObj(body.toString());
+        Map<String, Object> map = JacksonUtil.str2Map(body.toString());
         Map<String, Object> result = new LinkedHashMap<>();
         for (String key : map.keySet()) {
             Object val = map.get(key);
@@ -97,7 +97,7 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
                 result.put(key, val);
             }
         }
-        String json = JSONUtil.toJsonStr(result);
+        String json = JacksonUtil.obj2Str(result);
         ByteArrayInputStream bain = new ByteArrayInputStream(json.getBytes());
         return new ServletInputStream() {
             @Override

+ 79 - 73
src/main/java/com/imed/costaccount/service/impl/CostAccountShareServiceImpl.java

@@ -4,9 +4,10 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.core.type.TypeReference;
 import com.imed.costaccount.common.exception.CostException;
 import com.imed.costaccount.common.util.BeanUtil;
-import com.imed.costaccount.common.util.JsonUtil;
+import com.imed.costaccount.common.util.JacksonUtil;
 import com.imed.costaccount.common.util.PageUtils;
 import com.imed.costaccount.constants.NumberConstant;
 import com.imed.costaccount.mapper.CostAccountShareMapper;
@@ -68,12 +69,12 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
         List<CostAccountShare> costAccountShareList = pages.getRecords();
 
         List<CostAccountShareVO> costAccountShareVOList = BeanUtil.convertList(costAccountShareList, CostAccountShareVO.class);
-        costAccountShareVOList.forEach(i->{
+        costAccountShareVOList.forEach(i -> {
             String accountingIds = i.getAccountingIds();
-            if (StrUtil.isNotBlank(accountingIds)){
+            if (StrUtil.isNotBlank(accountingIds)) {
                 List<String> list = Arrays.asList(accountingIds.split(StrUtil.COMMA));
                 i.setAccountingIdList(list);
-            }else {
+            } else {
                 i.setAccountingIdList(null);
             }
         });
@@ -117,7 +118,7 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
      * @param costAccountShareSaveDto {@link CostAccountShareSaveDto}
      */
     @Override
-    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void addCostAccountShare(CostAccountShareSaveDto costAccountShareSaveDto) {
         User user = (User) SecurityUtils.getSubject().getPrincipal();
         Long hospId = user.getHospId();
@@ -131,27 +132,28 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
 
     /**
      * 检验输入数据的合理性
+     *
      * @param costAccountShareSaveDto
      * @param hospId
      */
     private void checkAccountShare(CostAccountShareSaveDto costAccountShareSaveDto, Long hospId) {
         Long responsibilityId = costAccountShareSaveDto.getResponsibilityId();
-        Responsibility responsibility = responsibilityService.getOne(new QueryWrapper<Responsibility>().lambda().eq(Responsibility::getHospId,hospId).eq(Responsibility::getId, responsibilityId));
-        if (Objects.isNull(responsibility)){
-            throw new CostException(500,"输入的责任不存在");
+        Responsibility responsibility = responsibilityService.getOne(new QueryWrapper<Responsibility>().lambda().eq(Responsibility::getHospId, hospId).eq(Responsibility::getId, responsibilityId));
+        if (Objects.isNull(responsibility)) {
+            throw new CostException(500, "输入的责任不存在");
         }
         costAccountShareSaveDto.setResponsibilityId(responsibilityId);
         costAccountShareSaveDto.setResponsibilityCode(responsibility.getResponsibilityCode());
         costAccountShareSaveDto.setResponsibilityName(responsibility.getResponsibilityName());
         costAccountShareSaveDto.setShareLevel(responsibility.getShareLevel());
-        List<CostAccountShare> costAccountShareList = baseMapper.selectList(new QueryWrapper<CostAccountShare>().lambda().eq(CostAccountShare::getHospId,hospId).eq(CostAccountShare::getResponsibilityId,costAccountShareSaveDto.getResponsibilityId()));
-        if (!StringUtils.isEmpty(costAccountShareSaveDto.getAccountingIds())){
+        List<CostAccountShare> costAccountShareList = baseMapper.selectList(new QueryWrapper<CostAccountShare>().lambda().eq(CostAccountShare::getHospId, hospId).eq(CostAccountShare::getResponsibilityId, costAccountShareSaveDto.getResponsibilityId()));
+        if (!StringUtils.isEmpty(costAccountShareSaveDto.getAccountingIds())) {
             // 这个责任中心允许输入会计科目
             List<Long> accountIdList = Arrays.stream(costAccountShareSaveDto.getAccountingIds().split(StrUtil.COMMA)).map(Long::valueOf).collect(Collectors.toList());
             List<Accounting> accountingList = accountingService.list(new QueryWrapper<Accounting>().lambda().eq(Accounting::getHospId, hospId).in(Accounting::getId, accountIdList).orderByDesc(Accounting::getCreateTime));
-            if (CollectionUtils.isEmpty(accountingList)){
-                throw new CostException(500,"输入的会计科目不存在");
-            }else {
+            if (CollectionUtils.isEmpty(accountingList)) {
+                throw new CostException(500, "输入的会计科目不存在");
+            } else {
                 String accountIds = accountingList.stream().map(Accounting::getId).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.joining(StrUtil.COMMA));
                 costAccountShareSaveDto.setAccountingIds(accountIds);
                 String accountNames = accountingList.stream().map(Accounting::getAccountingName).map(String::valueOf).collect(Collectors.joining(StrUtil.COMMA));
@@ -161,41 +163,42 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
             }
 //            Map<String, List<CostAccountShare>> costAccountMap = costAccountShareList.stream().collect(Collectors.groupingBy(CostAccountShare::getResponsibilityCode));
 //            List<CostAccountShare> list = costAccountMap.get(costAccountShareSaveDto.getResponsibilityCode());
-            if (!CollectionUtils.isEmpty(costAccountShareList)){
-                costAccountShareList.forEach(i->{
+            if (!CollectionUtils.isEmpty(costAccountShareList)) {
+                costAccountShareList.forEach(i -> {
                     String accountingIds = i.getAccountingIds();
                     Integer isShareCost = i.getIsShareCost();
                     List<Long> accountIdListRequest = Arrays.stream(accountingIds.split(StrUtil.COMMA)).map(Long::valueOf).collect(Collectors.toList());
-                    if (!Collections.disjoint(accountIdListRequest,accountIdList)){
-                        throw new CostException(500,"存在重复的数据");
-                    }if (NumberConstant.ONE.equals(isShareCost) && NumberConstant.ONE.equals(costAccountShareSaveDto.getIsShareCost())){
-                        throw new CostException(500,"责任中心已包含分摊成本");
+                    if (!Collections.disjoint(accountIdListRequest, accountIdList)) {
+                        throw new CostException(500, "存在重复的数据");
+                    }
+                    if (NumberConstant.ONE.equals(isShareCost) && NumberConstant.ONE.equals(costAccountShareSaveDto.getIsShareCost())) {
+                        throw new CostException(500, "责任中心已包含分摊成本");
                     }
                 });
             }
-        }else {
+        } else {
             // 此时是
             // 责任中心只允许出现一次
-            if (!CollectionUtils.isEmpty(costAccountShareList)){
-                throw new CostException(500,"该责任中心合并计算已存在");
+            if (!CollectionUtils.isEmpty(costAccountShareList)) {
+                throw new CostException(500, "该责任中心合并计算已存在");
             }
-            if (!NumberConstant.ONE.equals(costAccountShareSaveDto.getIsShareCost())){
-                throw new CostException(500,"合并计算责任中心必须要设置成包含分摊参数");
+            if (!NumberConstant.ONE.equals(costAccountShareSaveDto.getIsShareCost())) {
+                throw new CostException(500, "合并计算责任中心必须要设置成包含分摊参数");
             }
         }
         // 检验输入的这个责任中心是否允许输入会计科目
         Long shareId = responsibility.getShareId();
         CostShareLevel costShareLevel = costShareLevelService.getOne(new QueryWrapper<CostShareLevel>().lambda()
                 .eq(CostShareLevel::getHospId, hospId).eq(CostShareLevel::getId, shareId));
-        if (Objects.nonNull(costShareLevel)){
-            if ((!StringUtils.isEmpty(costAccountShareSaveDto.getAccountingIds())) && NumberConstant.ZERO.equals(costShareLevel.getCalcType())){
-                throw new CostException(500,"合并计算不允许选择会计科目");
+        if (Objects.nonNull(costShareLevel)) {
+            if ((!StringUtils.isEmpty(costAccountShareSaveDto.getAccountingIds())) && NumberConstant.ZERO.equals(costShareLevel.getCalcType())) {
+                throw new CostException(500, "合并计算不允许选择会计科目");
             }
-            if ((StringUtils.isEmpty(costAccountShareSaveDto.getAccountingIds())) && NumberConstant.ONE.equals(costShareLevel.getCalcType())){
-                throw new CostException(500,"分开计算的责任中心需要选择会计科目");
+            if ((StringUtils.isEmpty(costAccountShareSaveDto.getAccountingIds())) && NumberConstant.ONE.equals(costShareLevel.getCalcType())) {
+                throw new CostException(500, "分开计算的责任中心需要选择会计科目");
             }
-        }else {
-            throw new CostException(500,"对不起该责任中心没有对应分摊层级");
+        } else {
+            throw new CostException(500, "对不起该责任中心没有对应分摊层级");
         }
     }
 
@@ -205,20 +208,20 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
      * @param costAccountShareEditDto
      */
     @Override
-    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void updateByCostAccountShare(CostAccountShareEditDto costAccountShareEditDto) {
         User user = (User) SecurityUtils.getSubject().getPrincipal();
         Long hospId = user.getHospId();
         Long id = costAccountShareEditDto.getId();
         CostAccountShare costAccountShare = baseMapper.selectById(id);
-        if (Objects.isNull(costAccountShare)){
-            throw new CostException(500,"成本分摊参数对应数据不存在");
+        if (Objects.isNull(costAccountShare)) {
+            throw new CostException(500, "成本分摊参数对应数据不存在");
         }
         baseMapper.deleteById(id);
         // 新增责任中心成本对照数据
         CostAccountShareSaveDto costAccountShareSaveDto = BeanUtil.convertObj(costAccountShareEditDto, CostAccountShareSaveDto.class);
         // 检验输入的数据是否符合规则
-        checkAccountShare(costAccountShareSaveDto,hospId);
+        checkAccountShare(costAccountShareSaveDto, hospId);
         CostAccountShareEditDto accountShareEditDto = BeanUtil.convertObj(costAccountShareSaveDto, CostAccountShareEditDto.class);
         CostAccountShare costAccountShareRequest = BeanUtil.convertObj(accountShareEditDto, CostAccountShare.class);
         costAccountShareRequest.setId(null);
@@ -235,51 +238,52 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
      * @param shareParamEditDto
      */
     @Override
-    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void updateShareParam(ShareParamEditDto shareParamEditDto) {
         List<ShareParamProportionVO> shareParamProportionVOList1 = shareParamEditDto.getShareParamProportionVOList();
-            User user = (User) SecurityUtils.getSubject().getPrincipal();
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
         Long hospId = user.getHospId();
         Long id = shareParamEditDto.getId();
-            CostAccountShare costAccountShare = baseMapper.selectOne(new QueryWrapper<CostAccountShare>().lambda()
-                    .eq(CostAccountShare::getHospId, hospId)
-                    .eq(CostAccountShare::getId, id));
-            if (Objects.isNull(costAccountShare)){
-                throw new CostException(500,"分摊参数对应数据不存在");
-            }
-        if (!CollectionUtils.isEmpty(shareParamProportionVOList1)){
+        CostAccountShare costAccountShare = baseMapper.selectOne(new QueryWrapper<CostAccountShare>().lambda()
+                .eq(CostAccountShare::getHospId, hospId)
+                .eq(CostAccountShare::getId, id));
+        if (Objects.isNull(costAccountShare)) {
+            throw new CostException(500, "分摊参数对应数据不存在");
+        }
+        if (!CollectionUtils.isEmpty(shareParamProportionVOList1)) {
             List<ShareParamProportionVO> shareParamProportionVOList = shareParamEditDto.getShareParamProportionVOList();
             // 检验输入的成本分摊参数是否存在
             List<CostShareParamVO> costShareParamServiceAll = costShareParamService.getAll(hospId);
             Map<Long, List<CostShareParamVO>> listMap = costShareParamServiceAll.stream().collect(Collectors.groupingBy(CostShareParamVO::getId));
-            shareParamProportionVOList.forEach(i->{
-                if (CollectionUtils.isEmpty(listMap.get(i.getId()))){
-                    throw new CostException(500,"分摊名称:"+i.getShareParamName()+"未找到");
+            shareParamProportionVOList.forEach(i -> {
+                if (CollectionUtils.isEmpty(listMap.get(i.getId()))) {
+                    throw new CostException(500, "分摊名称:" + i.getShareParamName() + "未找到");
                 }
             });
             // 检验输入的数据的和是否是100
-            AtomicReference<Integer> sum= new AtomicReference<>(0);
-            shareParamProportionVOList.forEach(i->{
+            AtomicReference<Integer> sum = new AtomicReference<>(0);
+            shareParamProportionVOList.forEach(i -> {
                 sum.updateAndGet(v -> v + i.getShareParamPopout());
             });
             int max = Integer.parseInt(sum.toString());
-            if (!NumberConstant.ONE_HUNDRED.equals(max)){
-                throw new CostException(500,"分摊比例的和不是100");
+            if (!NumberConstant.ONE_HUNDRED.equals(max)) {
+                throw new CostException(500, "分摊比例的和不是100");
             }
 
             // 判断添加的分摊是否存在一样的
             HashMap<Long, ShareParamProportionVO> hashMap = new HashMap<>();
-            shareParamProportionVOList.forEach(i->{
+            shareParamProportionVOList.forEach(i -> {
                 Long paramId = i.getId();
-                if (hashMap.containsKey(paramId)){
-                    throw new CostException(500,"不可以添加相同的分摊参数");
+                if (hashMap.containsKey(paramId)) {
+                    throw new CostException(500, "不可以添加相同的分摊参数");
                 }
-                hashMap.put(paramId,i);
+                hashMap.put(paramId, i);
             });
             //
-            String paramList = JsonUtil.toJSONString(shareParamProportionVOList);
+//            String paramList = JsonUtil.toJSONString(shareParamProportionVOList);
+            String paramList = JacksonUtil.obj2StrPretty(shareParamProportionVOList);
             costAccountShare.setParamList(paramList);
-        }else{
+        } else {
             costAccountShare.setParamList(null);
         }
 
@@ -297,11 +301,13 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
     public List<ShareParamProportionVO> selectShareParamById(Integer id, Long hospId) {
         CostAccountShare costAccountShare = baseMapper.selectOne(new QueryWrapper<CostAccountShare>().lambda()
                 .eq(CostAccountShare::getHospId, hospId).eq(CostAccountShare::getId, id));
-        if (Objects.isNull(costAccountShare)){
-            throw  new CostException(500,"责任中心成本不存在");
+        if (Objects.isNull(costAccountShare)) {
+            throw new CostException(500, "责任中心成本不存在");
         }
         String paramList = costAccountShare.getParamList();
-        return JsonUtil.toList(paramList, ShareParamProportionVO.class);
+//        return JsonUtil.toList(paramList, ShareParamProportionVO.class);
+//        return JacksonUtil.string2ObjList(paramList, List.class, ShareParamProportionVO.class);
+        return JacksonUtil.str2ObjList(paramList, new TypeReference<List<ShareParamProportionVO>>() {});
     }
 
     /**
@@ -315,13 +321,14 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
     public List<CostShareParamStatusVO> getAllShareParamStatusById(Integer id, Long hospId) {
         List<CostShareParamVO> costShareParamServiceAll = costShareParamService.getAll(hospId);
         CostAccountShare costAccountShare = baseMapper.selectById(id);
-        if (Objects.isNull(costAccountShare)){
-            throw new CostException(500,"成本分摊对应数据不存在");
+        if (Objects.isNull(costAccountShare)) {
+            throw new CostException(500, "成本分摊对应数据不存在");
         }
         String paramList = costAccountShare.getParamList();
         List<CostShareParamStatusVO> costShareParamStatusVOList = BeanUtil.convertList(costShareParamServiceAll, CostShareParamStatusVO.class);
         if (!StringUtils.isEmpty(paramList)) {
-            List<ShareParamProportionVO> shareParamProportionVOList = JsonUtil.toList(paramList, ShareParamProportionVO.class);
+//            List<ShareParamProportionVO> shareParamProportionVOList = JsonUtil.toList(paramList, ShareParamProportionVO.class);
+            List<ShareParamProportionVO> shareParamProportionVOList = JacksonUtil.str2ObjList(paramList, new TypeReference<List<ShareParamProportionVO>>() {});
             Map<Long, List<ShareParamProportionVO>> map = shareParamProportionVOList.stream().collect(Collectors.groupingBy(ShareParamProportionVO::getId));
             costShareParamStatusVOList.forEach(i -> {
                 Long paramId = i.getId();
@@ -337,22 +344,22 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
      * 拷贝
      *
      * @param accountShareCopyDto 赋值数据
-     * @param hospId 医院Id
+     * @param hospId              医院Id
      */
     @Override
-    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void copyAccountShareData(AccountShareCopyDto accountShareCopyDto, Long hospId) {
         Long id = accountShareCopyDto.getId();
         CostAccountShare costAccountShare = this.getById(id);
-        if (Objects.isNull(costAccountShare)){
-            throw new CostException(500,"成本分摊参数设置对应数据不存在");
+        if (Objects.isNull(costAccountShare)) {
+            throw new CostException(500, "成本分摊参数设置对应数据不存在");
         }
         List<CostAccountShare> accountShareList = new ArrayList<>();
         List<Long> responsibilityIds = accountShareCopyDto.getResponsibilityIds();
         Map<Long, Responsibility> responsibilityMap = responsibilityService.list(new QueryWrapper<Responsibility>().lambda()
-                .eq(Responsibility::getHospId, hospId)).stream().collect(Collectors.toMap(Responsibility::getId, synOne->synOne));
+                .eq(Responsibility::getHospId, hospId)).stream().collect(Collectors.toMap(Responsibility::getId, synOne -> synOne));
         long millis = System.currentTimeMillis();
-        responsibilityIds.forEach(i->{
+        responsibilityIds.forEach(i -> {
             CostAccountShare accountShareRequest = BeanUtil.convertObj(costAccountShare, CostAccountShare.class);
             accountShareRequest.setId(null);
             accountShareRequest.setCreateTime(millis);
@@ -370,7 +377,6 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
     /**
      * 获取指定类型的责任中心集合 分开计算还是合并计算
      *
-     *
      * @param accountShareId
      * @param hospId
      * @return
@@ -378,8 +384,8 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
     @Override
     public List<Responsibility> getResponsibilityCalType(Long accountShareId, Long hospId) {
         CostAccountShare costAccountShare = this.getById(accountShareId);
-        if (Objects.isNull(costAccountShare)){
-            throw new CostException(500,"成本分摊参数设置对应数据不存在");
+        if (Objects.isNull(costAccountShare)) {
+            throw new CostException(500, "成本分摊参数设置对应数据不存在");
         }
         Long responsibilityId = costAccountShare.getResponsibilityId();
         Responsibility responsibility = responsibilityService.getById(responsibilityId);
@@ -390,7 +396,7 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
         List<Long> responsibilityIds = this.list(new QueryWrapper<CostAccountShare>().lambda().eq(CostAccountShare::getHospId, hospId)).stream().map(CostAccountShare::getResponsibilityId).collect(Collectors.toList());
         // 执行类型的分摊级别的Id的集合
         List<Long> costShareIds = costShareLevelService.list(new QueryWrapper<CostShareLevel>().lambda()
-                .eq(CostShareLevel::getHospId,hospId).eq(CostShareLevel::getCalcType, calcType))
+                .eq(CostShareLevel::getHospId, hospId).eq(CostShareLevel::getCalcType, calcType))
                 .stream().map(CostShareLevel::getId).collect(Collectors.toList());
         // 筛选责任中心里面符合指定类型的责任中心
         // 筛选指定类型的责任中心 并且当前没有设置的责任中心

+ 4 - 2
src/main/java/com/imed/costaccount/service/impl/CostCostingGroupServiceImpl.java

@@ -348,7 +348,8 @@ public class CostCostingGroupServiceImpl extends ServiceImpl<CostCostingGroupMap
                     costCostingGroup.setDateYear(year);
                     costCostingGroup.setDateMonth(month);
                     afterCostGroup.setAmount(combined);
-                    String s = JsonUtil.toJSONString(afterCostGroup);
+//                    String s = -JsonUtil.toJSONString(afterCostGroup);
+                    String s = JacksonUtil.obj2Str(combined);
                     costCostingGroup.setAfterCostGroup(s);
                     costCostingGroupArrayList.add(costCostingGroup);
                 } else {
@@ -398,7 +399,8 @@ public class CostCostingGroupServiceImpl extends ServiceImpl<CostCostingGroupMap
                         costCostingGroup.setDateYear(year);
                         costCostingGroup.setDateMonth(month);
                         afterCostGroup.setAmount(new BigDecimal((Objects.isNull(data.get(j)) || "0".equals(data.get(j).toString())) ? "0.00" : data.get(j).toString()));
-                        String s = JsonUtil.toJSONString(afterCostGroup);
+//                        String s = JsonUtil.toJSONString(afterCostGroup);
+                        String s = JacksonUtil.obj2Str(afterCostGroup);
                         costCostingGroup.setAfterCostGroup(s);
                         costCostingGroupArrayList.add(costCostingGroup);
                     }

+ 4 - 4
src/main/java/com/imed/costaccount/service/impl/CostIncomeFileServiceImpl.java

@@ -2,14 +2,13 @@ package com.imed.costaccount.service.impl;
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.imed.costaccount.common.exception.CostException;
 import com.imed.costaccount.common.util.BeanUtil;
-import com.imed.costaccount.common.util.JsonUtil;
+import com.imed.costaccount.common.util.JacksonUtil;
 import com.imed.costaccount.common.util.PageUtils;
 import com.imed.costaccount.constants.NumberConstant;
 import com.imed.costaccount.mapper.CostCostingGroupMapper;
@@ -69,7 +68,7 @@ public class CostIncomeFileServiceImpl extends ServiceImpl<CostIncomeFileMapper,
         costIncomeFile.setTotalAmount(list.size());
         if (!CollectionUtils.isEmpty(incomeErrorMessageList)) {
             costIncomeFile.setSuccessAmount(NumberConstant.ZERO);
-            costIncomeFile.setErrorList(JSON.toJSONString(incomeErrorMessageList));
+            costIncomeFile.setErrorList(JacksonUtil.obj2Str(incomeErrorMessageList));
         } else {
             costIncomeFile.setSuccessAmount(list.size());
         }
@@ -186,7 +185,8 @@ public class CostIncomeFileServiceImpl extends ServiceImpl<CostIncomeFileMapper,
         if (StrUtil.isBlank(errorList)) {
             return null;
         }
-        List<IncomeErrorMessage> incomeErrorMessageList = JsonUtil.toList(errorList, IncomeErrorMessage.class);
+//        List<IncomeErrorMessage> incomeErrorMessageList = JsonUtil.toList(errorList, IncomeErrorMessage.class);
+        List<IncomeErrorMessage> incomeErrorMessageList = JacksonUtil.str2ObjList(errorList, List.class, IncomeErrorMessage.class);
         return incomeErrorMessageList;
     }
 

+ 1 - 2
src/main/java/com/imed/costaccount/service/impl/CostIncomeGroupServiceImpl.java

@@ -2,7 +2,6 @@ package com.imed.costaccount.service.impl;
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -500,7 +499,7 @@ public class CostIncomeGroupServiceImpl extends ServiceImpl<CostIncomeGroupMappe
                         afterIncomegroup.setOtherResponsibilityDecimal(beforeMoney);
                     }
                 }
-                costIncomeGroup.setAfterIncomeGroup(JSON.toJSONString(afterIncomegroup));
+                costIncomeGroup.setAfterIncomeGroup(JacksonUtil.obj2Str(afterIncomegroup));
             }
         }
     }

+ 2 - 2
src/main/java/com/imed/costaccount/service/impl/IncomeCollectionServiceImpl.java

@@ -3,11 +3,11 @@ package com.imed.costaccount.service.impl;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
-import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.imed.costaccount.common.exception.CostException;
 import com.imed.costaccount.common.util.BeanUtil;
+import com.imed.costaccount.common.util.JacksonUtil;
 import com.imed.costaccount.common.util.PageUtils;
 import com.imed.costaccount.common.util.RedisLock;
 import com.imed.costaccount.mapper.CostIncomeGroupMapper;
@@ -136,7 +136,7 @@ public class IncomeCollectionServiceImpl
                     incomeCollection.setFileId(costIncomeGroup.getFileId());
                     incomeCollection.setCreateTime(System.currentTimeMillis());
                     String afterIncomeGroupStr = costIncomeGroup.getAfterIncomeGroup();
-                    AfterIncomeGroup afterIncomegroup = JSONUtil.toBean(afterIncomeGroupStr, AfterIncomeGroup.class);
+                    AfterIncomeGroup afterIncomegroup = JacksonUtil.str2Obj(afterIncomeGroupStr, AfterIncomeGroup.class);
                     if (Objects.isNull(afterIncomegroup)) {
                         throw new CostException("未能正确归集对应的....");
                     }

+ 1 - 0
src/main/java/com/imed/costaccount/service/impl/ResponsibilityServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.imed.costaccount.common.exception.CostException;
 import com.imed.costaccount.constants.NumberConstant;
 import com.imed.costaccount.enums.ErrorCodeEnum;