Procházet zdrojové kódy

1.资金转账单限制

heqinwei před 7 roky
rodič
revize
a88a4bb105

+ 3 - 2
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java

@@ -87,9 +87,10 @@ public enum BizExceptionCode implements BaseExceptionCode {
     SUBLEDGER_NOT_EXIS(74005,"来源单据不存在"),
     CHECK_SETACOUNT_EXIS(74006, "不能删除单据日期小于等于结账期间<u>%s</u>的单据"),
     VERIFICATION_CHECK_BALANCE(74007,"保存失败,本次核销金额不相等!"),
-    DELETE_NOT_EXIS(74008,"删除失败,当前单据不存在!"),
+    DELETE_NOT_EXIS(74008,"当前单据不存在!"),
     DOCUMENTS_AUDITED(74009,"存在已审核单据:%S"),
-    DOCUMENTS_UNAUDITED(74009,"存在未审核单据:%S"),
+    DOCUMENTS_UNAUDITED(74010,"存在未审核单据:%S"),
+    BANK_AMOUNT_NOTENOUGHS(74011, "资金账号不足:%S"),
 
 
 

+ 4 - 0
applications/money/money-server/pom.xml

@@ -107,6 +107,10 @@
             <version>1.0.0-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
     </dependencies>
 
     <build>

+ 2 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/FundtransferMapper.java

@@ -35,4 +35,6 @@ public interface FundtransferMapper extends CommonBaseMapper<Fundtransfer> {
     String validateBatchUnAudit(List<DocBaseDTO> baseDTOs);
 
     String validateAudit(List<DocBaseDTO> baseDTOs);
+
+    List<String> checkAmount(@Param("companyId") Long companyId, @Param("id") Long id);
 }

+ 9 - 1
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/FundtransferServiceImpl.java

@@ -19,6 +19,7 @@ import com.usoftchina.saas.money.service.FundtransferService;
 import com.usoftchina.saas.page.PageRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 
 import java.util.Date;
@@ -47,11 +48,11 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
     private BankinformationMapper bankinformationMapper;
 
     @Override
+    @Transactional
     public DocBaseDTO insert(Fundtran fundtran) {
         Fundtransfer fundtransfer = fundtran.getMain();
         List<Fundtransferdetail> fundtransferdetails = fundtran.getItems();
 
-
         String ft_code = fundtransfer.getFt_code();
 
         //编号校验
@@ -111,6 +112,13 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
         DocBaseDTO docBaseDTO = this.insert(fundtran);
         Long id = docBaseDTO.getId();
 
+        List<String> bankName = fundtransferMapper.checkAmount(BaseContextHolder.getCompanyId(), id);
+        if (bankName.size() > 0){
+            String name = org.apache.commons.lang3.StringUtils.join(bankName, ",");
+            String message = BizExceptionCode.BANK_AMOUNT_NOTENOUGHS.getMessage();
+            throw new BizException(500, String.format(message, name));
+        }
+
 
         //取从表金额更新中间表、资金账号表
         List<Fundtransferdetail> fundtransferdetailList = fundtran.getItems();

+ 15 - 1
applications/money/money-server/src/main/resources/mapper/FundtransferMapper.xml

@@ -277,9 +277,23 @@
     </foreach>
   </select>
   <select id="validateBatchUnAudit" parameterType="com.usoftchina.saas.commons.dto.DocBaseDTO" resultType="java.lang.String">
-    select GROUP_CONCAT(ft_code) from fundtransfer where sa_statuscode='UNAUDITED' and ft_id in
+    select GROUP_CONCAT(ft_code) from fundtransfer where ft_statuscode='UNAUDITED' and ft_id in
     <foreach collection="list" item="item" open="(" close=")" separator=",">
       #{item.id}
     </foreach>
   </select>
+
+  <select id="checkAmount" resultType="java.lang.String">
+    select b.ftd_bankname from
+    (select a.ft_id,a.ft_code,a.companyid,a.ftd_bankid,a.ftd_bankcode,a.ftd_bankname,sum(a.ftd_nowbalance) ftd_nowbalance from
+    (SELECT ft_id,ft_code,fundtransfer.companyid,ftd_bankid,ftd_bankcode,ftd_bankname,-1*ftd_nowbalance ftd_nowbalance
+    FROM fundtransfer,fundtransferdetail
+    WHERE ft_id=ftd_ftid
+    UNION ALL select ft_id,ft_code,fundtransfer.companyid,ftd_inbankid,ftd_inbankcode,ftd_inbankname,ftd_nowbalance
+    FROM fundtransfer,fundtransferdetail
+    WHERE ft_id=ftd_ftid) a group by a.ft_id,a.ft_code,a.companyid,a.ftd_bankid,a.ftd_bankcode,a.ftd_bankname) b,
+    BANKINFORMATION
+    where b.ftd_bankid=BK_ID and 0 > ftd_nowbalance and abs(ftd_nowbalance)>bk_thisamount and b.companyid = #{companyId}
+     and b.ft_id = #{id}
+  </select>
 </mapper>