Browse Source

feat: 净值振幅审核需求开发

chenjianhua 5 months ago
parent
commit
3830fb2147

+ 46 - 0
service-base/src/main/java/com/simuwang/base/common/enums/NavReviewStatus.java

@@ -0,0 +1,46 @@
+package com.simuwang.base.common.enums;
+
+import java.util.stream.Stream;
+
+/**
+ * FileName: NavReviewStatus
+ * Author:   chenjianhua
+ * Date:     2024/12/3 14:33
+ * Description: ${DESCRIPTION}
+ */
+public enum NavReviewStatus {
+    //单位分红/拆分比例
+    PASS(1, "审核通过"), REFUSE(2, "审核不通过");
+
+    private final Integer code;
+    private final String info;
+
+    NavReviewStatus(Integer code, String info) {
+        this.code = code;
+        this.info = info;
+    }
+
+    public static NavReviewStatus getNavReviewStatusyCode(Integer code) {
+        if (null == code){
+            return null;
+        }
+        for(NavReviewStatus s : NavReviewStatus.values()){
+            if(code.equals(s.getCode())){
+                return s;
+            }
+        }
+        return null;
+    }
+
+    public static NavReviewStatus getNavReviewStatusByInfo(String info) {
+        return Stream.of(NavReviewStatus.values()).filter(e -> e.info.equals(info)).findFirst().orElse(null);
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getInfo() {
+        return info;
+    }
+}

+ 6 - 0
service-base/src/main/java/com/simuwang/base/mapper/EmailFundNavMapper.java

@@ -37,4 +37,10 @@ public interface EmailFundNavMapper {
     Long countEmailNavTotal();
 
     void update(EmailFundNavDO fundNavDO);
+
+    void updateRemark(@Param("id") Integer id, @Param("remark")String remark);
+
+    EmailFundNavDO selectFundNavById(@Param("id")Integer id);
+
+    void updateEmailNav(EmailFundNavDO emailFundNavDO);
 }

+ 7 - 0
service-base/src/main/java/com/simuwang/base/pojo/dos/EmailFundNavDO.java

@@ -96,6 +96,12 @@ public class EmailFundNavDO {
     private Date updateTime;
 
     /**
+     * 审核备注
+     */
+    @TableField(value = "remark")
+    private String remark;
+
+    /**
      * 邮件标题
      */
     private String emailTitle;
@@ -132,6 +138,7 @@ public class EmailFundNavDO {
         vo.setIsStored(this.isStored);
         vo.setExceptionStatus(this.exceptionStatus);
         vo.setUpdateTime(DateUtils.format(this.updateTime, DateUtils.YYYY_MM_DD_HH_MM_SS));
+        vo.setRemark(this.remark);
         return vo;
     }
 }

+ 5 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/EmailFundNavVO.java

@@ -70,4 +70,9 @@ public class EmailFundNavVO {
      * 邮件ID
      */
     private String emailId;
+
+    /**
+     * 审核备注
+     */
+    private String remark;
 }

+ 25 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/NavReviewVO.java

@@ -0,0 +1,25 @@
+package com.simuwang.base.pojo.vo;
+
+import lombok.Data;
+
+/**
+ * FileName: NavReviewVO
+ * Author:   chenjianhua
+ * Date:     2024/12/3 14:30
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class NavReviewVO {
+    /**
+     * 邮件净值ID
+     */
+    private Integer id;
+    /**
+     * 审核结果
+     */
+    private Integer reviewStatus;
+    /**
+     * 审核意见
+     */
+    private String remark;
+}

+ 43 - 0
service-base/src/main/resources/mapper/EmailFundNavMapper.xml

@@ -21,6 +21,7 @@
         <result column="email_title" property="emailTitle"/>
         <result column="target_fund_name" property="targetFundName"/>
         <result column="target_fund_id" property="targetFundId"/>
+        <result column="remark" property="remark"/>
     </resultMap>
 
     <insert id="batchInsert" parameterType="com.simuwang.base.pojo.dos.EmailFundNavDO">
@@ -59,6 +60,25 @@
             and file_id = #{fileId}
         </if>
     </update>
+    <update id="updateRemark">
+        update email_fund_nav set remark=#{remark},updatetime=now() where id=#{id}
+    </update>
+    <update id="updateEmailNav" parameterType="com.simuwang.base.pojo.dos.EmailFundNavDO">
+        update email_fund_nav
+        set
+        exception_status = #{exceptionStatus},
+        updatetime=#{updateTime},
+        is_stored=#{isStored},
+        remark=#{remark},
+        fund_id=#{fundId},
+        fund_name=#{fundName},
+        register_number=#{registerNumber},
+        price_date=#{priceDate},
+        nav=#{nav},
+        cumulative_nav_withdrawal=#{cumulativeNavWithdrawal},
+        updaterid=#{updaterId}
+        where isvalid = 1 and id=#{id}
+    </update>
     <delete id="deleteByFileId" parameterType="java.lang.Integer">
         update email_fund_nav nav set isvalid = 0,updatetime=now() where file_id=#{fileId}
     </delete>
@@ -75,6 +95,7 @@
             nav.exception_status,
             nav.is_stored,
             nav.updatetime,
+            nav.remark,
             parse.email_title,
             parse.id as email_id
         FROM
@@ -294,6 +315,28 @@
     <select id="countEmailNavTotal" resultType="java.lang.Long">
         select count(1) from email_fund_nav where isvalid=1
     </select>
+    <select id="selectFundNavById" resultMap="BaseResultMap"
+            parameterType="java.lang.Integer">
+        select nav.id,
+               nav.file_id,
+               nav.fund_id,
+               nav.fund_name,
+               nav.register_number,
+               nav.price_date,
+               nav.nav,
+               nav.cumulative_nav_withdrawal,
+               nav.exception_status,
+               nav.is_stored,
+               nav.isvalid,
+               nav.creatorid,
+               nav.updaterid,
+               nav.updatetime,
+               nav.createtime,
+               nav.remark
+        from email_fund_nav nav
+        where nav.isvalid =1
+          and nav.id=#{id}
+    </select>
 
 
 </mapper>

+ 2 - 1
service-base/src/main/resources/mapper/NavMapper.xml

@@ -51,7 +51,8 @@
         <set>
             nav = #{nav},
             cumulative_nav_withdrawal = #{cumulativeNavWithdrawal},
-            updatetime=#{updateTime}
+            updatetime=#{updateTime},
+            updaterid=#{updaterId}
         </set>
         where isvalid = 1
         and id=#{id}

+ 15 - 0
service-manage/src/main/java/com/simuwang/manage/api/email/EmailNavDetailController.java

@@ -3,8 +3,11 @@ package com.simuwang.manage.api.email;
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.pojo.dto.query.ParseDetailPageQuery;
 import com.simuwang.base.pojo.vo.EmailFundNavVO;
+import com.simuwang.base.pojo.vo.NavReviewVO;
 import com.simuwang.logging.SystemLog;
 import com.simuwang.manage.service.ParseEmailDetailService;
+import com.smppw.common.pojo.ResultVo;
+import com.smppw.common.pojo.enums.status.ResultCode;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -33,5 +36,17 @@ public class EmailNavDetailController{
         return result;
     }
 
+    /**
+     * 净值振幅审核
+     * @param navReviewVO
+     * @return
+     */
+    @SystemLog(value = "净值振幅审核")
+    @PostMapping("/review-email-nav")
+    public ResultVo reviewEmailNav(@RequestBody NavReviewVO navReviewVO){
+        ResultVo vo = parseEmailDetailService.reviewEmailNav(navReviewVO);
+        return vo;
+    }
+
 
 }

+ 4 - 4
service-manage/src/main/java/com/simuwang/manage/service/ParseEmailDetailService.java

@@ -2,10 +2,8 @@ package com.simuwang.manage.service;
 
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.pojo.dto.query.ParseDetailPageQuery;
-import com.simuwang.base.pojo.vo.EmailFundAssetVO;
-import com.simuwang.base.pojo.vo.EmailFundNavVO;
-import com.simuwang.base.pojo.vo.FundAssetVO;
-import com.simuwang.base.pojo.vo.FundNavVO;
+import com.simuwang.base.pojo.vo.*;
+import com.smppw.common.pojo.ResultVo;
 
 /**
  * FileName: ParseEmailDetailService
@@ -17,4 +15,6 @@ public interface ParseEmailDetailService {
     MybatisPage<EmailFundNavVO> searchNavDetail(ParseDetailPageQuery parseDetailPageQuery);
 
     MybatisPage<EmailFundAssetVO> searchAssetDetail(ParseDetailPageQuery parseDetailPageQuery);
+
+    ResultVo reviewEmailNav(NavReviewVO navReviewVO);
 }

+ 54 - 0
service-manage/src/main/java/com/simuwang/manage/service/impl/ParseEmailDetailServiceImpl.java

@@ -1,5 +1,7 @@
 package com.simuwang.manage.service.impl;
 
+import com.simuwang.base.common.conts.NavParseStatusConst;
+import com.simuwang.base.common.enums.NavReviewStatus;
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.common.util.DateUtils;
 import com.simuwang.base.common.util.StringUtil;
@@ -8,12 +10,16 @@ import com.simuwang.base.pojo.dos.*;
 import com.simuwang.base.pojo.dto.query.ParseDetailPageQuery;
 import com.simuwang.base.pojo.vo.*;
 import com.simuwang.manage.service.ParseEmailDetailService;
+import com.simuwang.shiro.utils.UserUtils;
+import com.smppw.common.pojo.ResultVo;
+import com.smppw.common.pojo.enums.status.ResultCode;
 import com.smppw.utils.DateUtil;
 import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -32,6 +38,9 @@ public class ParseEmailDetailServiceImpl implements ParseEmailDetailService {
     @Autowired
     private EmailFundAssetMapper emailFundAssetMapper;
 
+    @Autowired
+    private NavMapper navMapper;
+
     @Override
     public MybatisPage<EmailFundNavVO> searchNavDetail(ParseDetailPageQuery parseDetailPageQuery) {
         if(StringUtil.isNotEmpty(parseDetailPageQuery.getUpdateEndDate())){
@@ -53,4 +62,49 @@ public class ParseEmailDetailServiceImpl implements ParseEmailDetailService {
         long total = emailFundAssetMapper.countAssetDetail(parseDetailPageQuery);
         return MybatisPage.of(total,voList);
     }
+
+    @Override
+    public ResultVo reviewEmailNav(NavReviewVO navReviewVO) {
+        ResultVo vo = new ResultVo(ResultCode.SUCCESS.getCode());
+        try{
+            if(navReviewVO.getReviewStatus().equals(NavReviewStatus.PASS.getCode())){
+                //审核通过的情况,需要修改解析状态以及入库数据
+                EmailFundNavDO emailFundNavDO = emailFundNavMapper.selectFundNavById(navReviewVO.getId());
+                emailFundNavDO.setRemark(navReviewVO.getRemark());
+                emailFundNavDO.setIsStored(1);
+                emailFundNavDO.setExceptionStatus(NavParseStatusConst.SUCCESS);
+                emailFundNavDO.setUpdateTime(new Date());
+                Integer userId = UserUtils.getLoginUser().getUserId();
+                emailFundNavDO.setUpdaterId(userId);
+                emailFundNavMapper.updateEmailNav(emailFundNavDO);
+                //将净值入库
+                NavDO navDO = navMapper.queryNavByFundIdDate(emailFundNavDO.getFundId(),DateUtils.format(emailFundNavDO.getPriceDate(),DateUtils.YYYY_MM_DD));
+                if(navDO == null){
+                    navDO = new NavDO();
+                    navDO.setNav(emailFundNavDO.getNav());
+                    navDO.setCumulativeNav(emailFundNavDO.getCumulativeNavWithdrawal());
+                    navDO.setFundId(emailFundNavDO.getFundId());
+                    navDO.setPriceDate(emailFundNavDO.getPriceDate());
+                    navDO.setUpdaterId(userId);
+                    navDO.setCreatorId(userId);
+                    navDO.setIsvalid(1);
+                    navDO.setUpdateTime(new Date());
+                    navDO.setCreateTime(new Date());
+                    navMapper.saveNav(navDO);
+                }else{
+                    navDO.setNav(emailFundNavDO.getNav());
+                    navDO.setCumulativeNav(emailFundNavDO.getCumulativeNavWithdrawal());
+                    navDO.setUpdaterId(userId);
+                    navDO.setUpdateTime(new Date());
+                    navMapper.updateNav(navDO);
+                }
+            }else{
+                //审核不通过的情况,保存审核备注
+                emailFundNavMapper.updateRemark(navReviewVO.getId(),navReviewVO.getRemark());
+            }
+        }catch (Exception e){
+            vo = new ResultVo(ResultCode.SAVE_FAILED.getCode());
+        }
+        return vo;
+    }
 }