kotlin的常规使用

package cn.szqhyf.qhyffs.app.fs.ctl

import club.newepoch.ijfinal.http.paras.Parameter
import club.newepoch.ijfinal.kit.buildReturn
import club.newepoch.utils.JsonUtils
import cn.szqhyf.qhyffs.app.fs.iservice.BizAbsProfitInfoService
import cn.szqhyf.qhyffs.app.fs.pojo.po.AddOrRevisionIncomePoJo
import cn.szqhyf.qhyffs.app.fs.pojo.po.BizAbsProfitInfo
import cn.szqhyf.qhyffs.app.fs.pojo.po.ModificationFinancialPoJo
import com.jfinal.core.ActionKey
import com.jfinal.core.action.Rest
import com.jfinal.core.pojo.RestMethod
import com.jfinal.ext.render.Return

/**
 *金融部ABS收益表Controller
 *
 */
open class BizAbsProfitInfoController : QhyffsController() {


    /**
     * ABS收益表画面一览 (所属大期)的获得方法
     */
    @Rest(method = RestMethod.GET)
    @ActionKey(value = "/api/finance/biz/abs/profit/periods")
    fun periods(): Return {
        var r = this.initService<BizAbsProfitInfoService>().periods(iwebReq = getIwebRequest())
        return this.buildReturn(data = r)
    }

    /**
     * ABS收益表画面一览(带分页查询)
     * @param coreEnterpriseId
     *                       核心企业
     * @param financialInstitutionId
     *                       计划管理人ID
     * @param periods
     *               期数
     * @param bigPeriodsId
     *                       所属大区ID
     */
    @Rest(method = RestMethod.GET)
    @ActionKey(value = "/api/finance/biz/abs/profit/info")
    fun index( @Parameter("核心企业ID") coreEnterpriseId: String? =null,
               @Parameter("计划管理人ID") financialInstitutionsId: String? =null,
               @Parameter("期数") periods: String? =null,
               @Parameter("所属大区") bigPeriodsId: String? =null): Return {
        var r = this.initService<BizAbsProfitInfoService>().pages(iwebReq = getIwebRequest(),
                pageInfo = this.pageInfo,coreEnterpriseId = coreEnterpriseId, financialInstitutionsId = financialInstitutionsId,
                periods = periods , bigPeriodsId = bigPeriodsId)

        return this.buildReturn(data = r)
    }




    /**
     * 添加收益信息表画面 中 (查询按钮的实现)
     * @param  coreEnterpriseId
     *                       核心企业(不允许为空)
     * @param financialInstitutionId
     *                       计划管理人ID(不允许为空)
     * @param periodsId
     *           期数id(不允许为空)
     */
    @Rest(method = RestMethod.GET)
    @ActionKey(value = "/api/finance/biz/abs/profit/subject/info")
    fun getQuery( @Parameter("核心企业ID", optional = false) coreEnterpriseId: String,
                    @Parameter("计划管理人ID", optional = false) financialInstitutionsId: String,
                  @Parameter("期数", optional = false) periods: String )
            : Return {
        var r = this.initService<BizAbsProfitInfoService>().getQuery(iwebReq = getIwebRequest(),
                coreEnterpriseId = coreEnterpriseId, financialInstitutionsId = financialInstitutionsId , periods =periods)

        return this.buildReturn(data = r)
    }




    /**
     * 添加收益信息表画面 中 (判断是否跳期的判断依准)
     * @param  coreEnterpriseId
     *                       核心企业(不允许为空)
     * @param financialInstitutionId
     *                       计划管理人ID(不允许为空)
     * @param periodsId
     *           期数id(不允许为空)
     */
    @Rest(method = RestMethod.GET)
    @ActionKey(value = "/api/finance/biz/abs/profit/periods/check")
    fun isjumpPeriods( @Parameter("核心企业ID") coreEnterpriseId: String,
                      @Parameter("计划管理人ID") financialInstitutionsId: String,
                      @Parameter("期数") periods: String )
            : Return {
        var r = this.initService<BizAbsProfitInfoService>().isjumpPeriods(iwebReq = getIwebRequest(),
                coreEnterpriseId = coreEnterpriseId, financialInstitutionsId = financialInstitutionsId , periods =periods)

        return this.buildReturn(data = r)
    }


    /**
     * 添加收益信息表画面 中 (保存按钮的实现)
     * @param  coreEnterpriseId
     *                       核心企业(不允许为空)
     * @param financialInstitutionId
     *                       计划管理人ID(不允许为空)
     * @param periodsId
     *               期数id(不允许为空)
     * @param  information
     *                       信息(费用名称,备注,金额)
     * @param financeOpinion
     *                       意见
     * @param  releaseDate
     *              发行日期
     */
    @Rest(method = RestMethod.POST)
    @ActionKey(value = "/api/finance/biz/abs/profit/save/subject/info")
    fun saveWays( @Parameter("核心企业ID" ,optional = false) coreEnterpriseId: String,
                  @Parameter("计划管理人ID",optional = false) financialInstitutionsId: String,
                  @Parameter("期数",optional = false) periods: String,
                  @Parameter("费用金额备注", optional = false) subjectlist: MutableList<String> ,
                  @Parameter("意见",optional = false) financeOpinion: String? =null ,
                  @Parameter("发行日期",optional = false)  releaseDate :String? =null
                ): Return {
        val  subjectlists:MutableList<AddOrRevisionIncomePoJo> = mutableListOf()
        for (subject in subjectlist!!.listIterator() ){
            // 解析字符窜转对象
            var  obj= JsonUtils.parseJson2T(subject,AddOrRevisionIncomePoJo::class.java)
            subjectlists.add(obj)
        }
        var r = this.initService<BizAbsProfitInfoService>().saveWays(iwebReq = getIwebRequest(),
                subjectlist = subjectlists, financeOpinion = financeOpinion ,releaseDate = releaseDate , coreEnterpriseId = coreEnterpriseId ,
                financialInstitutionsId = financialInstitutionsId , periods = periods)
        return this.buildReturn(data = r)
    }


    /**
     * 根据发行日判断是否超过提交期限
     * @param releaseDate
     *         发行日(不能为空)
     */
    @Rest(method = RestMethod.GET)
    @ActionKey(value = "/api/finance/biz/abs/profit/releasedate/check")
    fun isPassDeadline( @Parameter("发行日") releaseDate: String )
            : Return {
        var r = this.initService<BizAbsProfitInfoService>().isPassDeadline(iwebReq = getIwebRequest(),
                releaseDate = releaseDate)
        return this.buildReturn(data = r)
    }

    /**
     * 添加收益信息表画面 中 (提交按钮的实现)
     * @param  coreEnterpriseId
     *                       核心企业(不允许为空)
     * @param financialInstitutionId
     *                       计划管理人ID(不允许为空)
     * @param periodsId
     *               期数id(不允许为空)
     * @param  information
     *                       信息(费用名称,备注,金额)
     * @param financeOpinion
     *                       意见
     * @param  releaseDate
     *              发行日期   List<AddOrRevisionIncomePoJo>
     */
    @Rest(method = RestMethod.POST)
    @ActionKey(value = "/api/finance/biz/abs/profit/submit/subject/info")
    fun getSubmit(
            @Parameter("核心企业ID") coreEnterpriseId: String,
            @Parameter("计划管理人ID") financialInstitutionsId: String,
            @Parameter("期数") periods: String,
            @Parameter("费用金额备注", optional = false) subjectlist: MutableList<String> ,
            @Parameter("意见") financeOpinion: String ,
            @Parameter("发行日期")  releaseDate :String
    ) : Return {
        val  subjectlists:MutableList<AddOrRevisionIncomePoJo> = mutableListOf()
        for (subject in subjectlist!!.listIterator() ){
            // 解析字符窜转对象
            var  obj= JsonUtils.parseJson2T(subject,AddOrRevisionIncomePoJo::class.java)
            subjectlists.add(obj)
        }
        var r = this.initService<BizAbsProfitInfoService>().getSubmit(iwebReq = getIwebRequest(),
                subjectlist = subjectlists, financeOpinion = financeOpinion ,releaseDate =releaseDate , coreEnterpriseId = coreEnterpriseId ,
                financialInstitutionsId =financialInstitutionsId , periods = periods )
        return this.buildReturn(data = r)
    }


    /**
     * 修改收益信息表画面中(获取表单的单个信息)
     * 根据ABS收益信息表id获取收益共通信息
     * @param  absProfitId
     *          表单的id(ABS收益ID)
     *
     */
    @Rest(method = RestMethod.GET)
    @ActionKey(value = "/api/finance/biz/abs/profit/modify/profit/info")
    fun getFormEarningsInformation(
            @Parameter("ABS收益ID", optional = false) absProfitId: Long ): Return {
        var r = this.initService<BizAbsProfitInfoService>().getFormEarningsInformation(iwebReq = getIwebRequest(), absProfitId = absProfitId)
        return this.buildReturn(data = r)
    }

    /**
     * 修改收益信息表画面中(获取表单的单个信息)
     * 根据ABS收益ID获取对应科目信息
     * @param  absProfitId
     *          表单的id(ABS收益ID)
     *
     */
    @Rest(method = RestMethod.GET)
    @ActionKey(value = "/api/finance/biz/abs/profit/modify/subject/info")
    fun getFormSubjectInformation(
            @Parameter("ABS收益ID", optional = false) absProfitId: Long ): Return {
        var r = this.initService<BizAbsProfitInfoService>().getFormSubjectInformation(iwebReq = getIwebRequest(), absProfitId = absProfitId)
        return this.buildReturn(data = r)
    }

    /**
     * 修改收益信息表画面中
     * 保存金融部收益信息
     * @param  absProfitId
     *          表单的id(ABS收益ID)
     *@param  releaseDate
     *         发行日期
     *@param  financeOpinion
     *         金融意见
     *@param   subjectlist       List<ModificationFinancialPoJo>
     *          科目ID(基础费用科目ID),收益明细ID,收益金额,备注
     */
    @Rest(method = RestMethod.POST)
    @ActionKey(value = "/api/finance/biz/abs/profit/modifysave/subject/info")
    fun saveFinance(
            @Parameter("ABS收益ID", optional = true) absProfitId: Long,
            @Parameter("发行日期", optional = true) releaseDate: String?,
            @Parameter("金融部意见", optional = true) financeOpinion: String?,
            @Parameter("科目的信息", optional = false) subjectlist: MutableList<String>?,
            @Parameter("form表单数据", optional = false) form: String?
            ): Return {
        var subjectlists= mutableListOf<ModificationFinancialPoJo>()
        for (subject in subjectlist!!.iterator()){
           var obj= JsonUtils.parseJson2T(subject,ModificationFinancialPoJo::class.java)
            subjectlists.add(obj)
        }
        var bizAbsProfitInfo=JsonUtils.parseJson2T(form, BizAbsProfitInfo::class.java)
        var r = this.initService<BizAbsProfitInfoService>().saveFinance(iwebReq = getIwebRequest(), absProfitId = absProfitId , releaseDate = releaseDate,
                financeOpinion = financeOpinion ,  subjectlist = subjectlists,bizAbsProfit=bizAbsProfitInfo)
        return this.buildReturn(data = r)
    }

    /**
     * 修改收益信息表画面中
     * 提交金融部收益信息
     * @param  absProfitId
     *          表单的id(ABS收益ID)
     *@param  releaseDate
     *         发行日期
     *@param  financeOpinion
     *         金融意见
     *@param   subjectlist      MutableList<String>?
     *          科目ID(基础费用科目ID),收益明细ID,收益金额,备注
     */
    @Rest(method = RestMethod.POST)
    @ActionKey(value = "/api/finance/biz/abs/profit/modifysubmit/subject/info")
    fun submitFinance(
            @Parameter("ABS收益ID", optional = true) absProfitId: Long ,
            @Parameter("发行日期", optional = true) releaseDate: String? ,
            @Parameter("金融部意见", optional = true) financeOpinion: String? ,
            @Parameter("科目的信息", optional = false) subjectlist: MutableList<String>?,
            @Parameter("form表单数据", optional = false) form: String?
    ): Return {
        //遍历
        val  subjectlists:MutableList<ModificationFinancialPoJo> = mutableListOf()
        for (subject in subjectlist!!.listIterator() ){
            // 解析字符窜转对象
             var  obj=JsonUtils.parseJson2T(subject,ModificationFinancialPoJo::class.java)
             subjectlists.add(obj)
        }
        var bizAbsProfit=JsonUtils.parseJson2T(form, BizAbsProfitInfo::class.java)
        var r = this.initService<BizAbsProfitInfoService>().submitFinance(iwebReq = getIwebRequest(), absProfitId = absProfitId , releaseDate = releaseDate,
                financeOpinion = financeOpinion ,  subjectlist = subjectlists , bizAbsProfit  = bizAbsProfit)
        return this.buildReturn(data = r)
    }


    /**
     * 修改收益信息表画面中
     * 验证上一期的金融部的所有费用金额与财务部费用是否存在差异
     *   未做完
     */
//    @Rest(method = RestMethod.GET)
//    @ActionKey(value = "/api/finance/biz/abs/profit/releasedate/check33333333333333333")
//    fun differenceMoney(
//            @Parameter("ABS收益ID", optional = false) absProfitId: Long ,
//            @Parameter("发行日期", optional = false) releaseDate: String? ,
//            @Parameter("金融部意见", optional = false) financeOpinion: String? ,
//            @Parameter("科目的信息", optional = false) subjectlist: List<ModificationFinancialPoJo>?
//    ): Return {
////        var r = this.initService<BizAbsProfitInfoService>().submitFinance(iwebReq = getIwebRequest(), absProfitId = absProfitId , releaseDate = releaseDate,
////                financeOpinion = financeOpinion ,  subjectlist = null)
//      //  return this.buildReturn(data = r)
//    }






}
package cn.szqhyf.qhyffs.app.fs.iservice

import club.newepoch.iweb.ext.IwebReq
import club.newepoch.persistent.db.common.Model
import club.newepoch.persistent.db.common.Page
import club.newepoch.persistent.db.pojo.Record
import club.newepoch.utils.AssertUtils
import cn.szqhyf.qhyffs.app.fs.idal.BizAbsProfitInfoServiceDal
import cn.szqhyf.qhyffs.app.fs.pojo.po.*
import com.jfinal.aop.Before
import com.jfinal.core.PageInfo
import com.jfinal.plugin.activerecord.tx.Tx
import org.apache.poi.ss.formula.functions.T
import java.sql.Timestamp
import java.text.SimpleDateFormat
import java.util.*

/**
 * ABS收益明细信息表服务类
 *
 */
open class BizAbsProfitInfoService :  QhyffsService() {


    /**
     * ABS收益表管理一览画面
     * @param core_enterprise_id
     *                      核心企业
     * @param financial_institutions_id
     *                      金融机构
     * @param periods
     *             期数
     * @param bigPeriodsId
     *                   所属大区ID
     */
    fun pages(iwebReq: IwebReq, pageInfo: PageInfo, coreEnterpriseId:String ?, financialInstitutionsId:String?, periods: String?, bigPeriodsId:String? ): Page<Record>? {
        return this.intDal<BizAbsProfitInfoServiceDal>().pages(iwebReq = iwebReq, pageInfo = pageInfo, coreEnterpriseId = coreEnterpriseId, financialInstitutionsId = financialInstitutionsId, periods = periods , bigPeriodsId = bigPeriodsId)
    }

    /**
     * ABS收益表画面一览 (所属大期)的获得方法
     */
    fun periods(iwebReq: IwebReq  ): List<Record>? {
        return this.intDal<BizAbsProfitInfoServiceDal>().periods(iwebReq= iwebReq)
    }

    /**
     * 添加收益信息表画面 中 (查询按钮的实现)
     * @param  coreEnterpriseId
     *                       核心企业
     * @param financialInstitutionId
     *                       计划管理人ID
     * @param periodsId
     *           期数ID
     */
    fun getQuery(iwebReq: IwebReq, coreEnterpriseId:String , financialInstitutionsId:String ,periods: String ): List<Record>? {
        if (coreEnterpriseId == null){
            AssertUtils.isTrue(false,"核心企业不能为空!")
        }
        if (financialInstitutionsId == null) {
           AssertUtils.isTrue(false, " 计划管理人不能为空")
        }
        if (periods == null) {
            AssertUtils.isTrue(false, " 期数不能为空")
        }
       var  result= this.intDal<BizAbsProfitInfoServiceDal>().getQuery(iwebReq = iwebReq,  coreEnterpriseId = coreEnterpriseId, financialInstitutionsId = financialInstitutionsId,periods =periods)
        return result
    }


    /**
     * 添加收益信息表画面 中 (判断是否跳期的判断依准)
     * @param  coreEnterpriseId
     *                       核心企业(不允许为空)
     * @param financialInstitutionId
     *                       计划管理人ID(不允许为空)
     * @param periodsId
     *           期数ID(不允许为空)
     */
    fun isjumpPeriods(iwebReq: IwebReq, coreEnterpriseId:String , financialInstitutionsId:String ,periods: String ): Boolean {
        if (coreEnterpriseId == null){
            AssertUtils.isTrue(false,"核心企业不能为空!")
        }
        if (financialInstitutionsId == null) {
            AssertUtils.isTrue(false, " 计划管理人不能为空")
        }
        if (periods == null) {
            AssertUtils.isTrue(false, " 期数不能为空")
        }
        // true:不存在跳期,false:存在跳期
        var periodsCheck = false
        var list = this.intDal<BizAbsProfitInfoServiceDal>().isjumpPeriods(iwebReq = iwebReq,  coreEnterpriseId = coreEnterpriseId, financialInstitutionsId = financialInstitutionsId,periods =periods)

        //如果查询的东西,不为空,不存在跳期
        if (list==null){
            periodsCheck = true
        }
        return  periodsCheck
    }

    /**
     * 根据发行日判断是否超过提交期限
     * @param releaseDate
     *         发行日(不能为空)
     */
    fun isPassDeadline(iwebReq: IwebReq, releaseDate:String ): Boolean {
        if (releaseDate == null){
            AssertUtils.isTrue(false,"发行日不能为空!")
        }
        // true:期限验证通过,false:期限验证不通过
        var releaseDateCheck = true
        // 定义发行到期日  发行日+1个月
        var checkDate = this.subMonth(releaseDate)
        //定义工作日
        var workDateCount = 0
        //循环15次,总会有3次是工作日
        for (i in 1..15 step 1) {
            if (workDateCount == 3){
                break
            }
            //判断"checkDate"的日期是否在配置的法定日期配置表中:
            var isExist=this.intDal<BizAbsProfitInfoServiceDal>().isPassDeadline(iwebReq = iwebReq, releaseDate =releaseDate)
            //查询结果为空
            if (!isExist ){
                var format1 =  SimpleDateFormat("yyyy-mm-dd")
                var bdate = format1.parse(checkDate)
                var cal = Calendar.getInstance()
                cal.setTime(bdate);
                // 判断是否是周六或周日
                if(cal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY && cal.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY){
                    // 说明是工作日
                    workDateCount++
                }
                //加一天
                checkDate =addOneDay(checkDate)

            }else{
               if("w".equals(isExist)){
                  //是工作日
                   workDateCount++
               }
                //加一天
                checkDate =addOneDay(checkDate)
            }
        }
        //string 转data
        var sdf =  SimpleDateFormat("yyyy-MM-dd");
       if (Date().time > sdf.parse(this.subDay(checkDate)).time){
           //说明超过时限
           releaseDateCheck = false
       }
       return releaseDateCheck
    }

    /****
     * 传入具体日期 ,返回具体日期增加一个月。
     * @param date 日期(2017-04-13)
     * @return 2017-05-13
     */
    fun   subMonth(date:String) :String{
        var sdf =  SimpleDateFormat("yyyy-MM-dd");
        var dt = sdf.parse(date)
        var rightNow = Calendar.getInstance()
        rightNow.setTime(dt)
        rightNow.add(Calendar.MONTH, 1)
        var dt1 = rightNow.getTime()
        var reStr = sdf.format(dt1)
        return reStr
    }

    /****
     * 传入具体日期 ,返回具体日期减少一天
     * @param date 日期(2017-04-13)
     * @return 2017-04-12
     * @throws ParseException
     */
    fun   subDay(date:String ):String  {
        var sdf =  SimpleDateFormat("yyyy-MM-dd");
        var dt = sdf.parse(date);
        var rightNow = Calendar.getInstance();
        rightNow.setTime(dt);
        rightNow.add(Calendar.DAY_OF_MONTH, -1);
        var dt1 = rightNow.getTime();
        var reStr = sdf.format(dt1);
        return reStr;
    }


    /****
     * 传入具体日期 ,返回具体日期减少一天
     * @param date 日期(2017-04-13)
     * @return 2017-04-12
     * @throws ParseException
     */
    fun   addOneDay(date:String ):String  {
        var sdf =  SimpleDateFormat("yyyy-MM-dd");
        var dt = sdf.parse(date);
        var rightNow = Calendar.getInstance();
        rightNow.setTime(dt);
        rightNow.add(Calendar.DAY_OF_MONTH, 1);
        var dt1 = rightNow.getTime();
        var reStr = sdf.format(dt1);
        return reStr;
    }



    /**
     * 添加收益信息表画面 中 (提交按钮的实现)
     * @param  coreEnterpriseId
     *                       核心企业(不允许为空)
     * @param financialInstitutionId
     *                       计划管理人ID(不允许为空)
     * @param periodsId
     *               期数id(不允许为空)
     * @param  information
     *                     信息(费用名称,备注,金额)
     * @param financeOpinion
     *                     意见(不允许为空)
     * @param  releaseDate
     *              发行日期(不允许为空)
     */
    fun getSubmit(iwebReq: IwebReq, subjectlist:List<AddOrRevisionIncomePoJo> , financeOpinion:String, releaseDate :String ,
                  coreEnterpriseId : String , financialInstitutionsId : String , periods : String  ): Boolean {
        //判断数据保存到表是否成功
        var isok=false
        if (coreEnterpriseId == null){
            AssertUtils.isTrue(false,"核心企业不能为空!")
        }
        if (financialInstitutionsId == null) {
            AssertUtils.isTrue(false, "计划管理人不能为空")
        }
        if (periods == null) {
            AssertUtils.isTrue(false, "期数不能为空")
        }
        if (financeOpinion == null) {
            AssertUtils.isTrue(false, "意见不能为空")
        }
        if (releaseDate == null) {
            AssertUtils.isTrue(false, "发行日期不能为空")
        }
        //判断当前保存的数据在数据库中是否存在
        var list =this.intDal<BizAbsProfitInfoServiceDal>().isExist(iwebReq = iwebReq,  coreEnterpriseId =coreEnterpriseId , financialInstitutionsId = financialInstitutionsId , periods =periods)
        //遍历financeOpinion
        //存在数据
        if (list != null){
            AssertUtils.isTrue(false, "当前添加的核心企业、金融机构、期数所对应的ABS收益信息已存在!")
        }else{
            //创造ABS收益信息表的实体对象
            var bizAbsProfitInfo = BizAbsProfitInfo()
            //设置核心企业id
            bizAbsProfitInfo.coreEnterpriseId = coreEnterpriseId
            //设置金融机构id
            bizAbsProfitInfo.financialInstitutionsId = financialInstitutionsId
            //设置期数
            bizAbsProfitInfo.periods = Integer.valueOf(periods)
            //设置金融部意见
            bizAbsProfitInfo.financeOpinion=financeOpinion
            // 发行日  release_date
            val format = SimpleDateFormat("yyyy-MM-dd")
            bizAbsProfitInfo.releaseDate=format.parse(releaseDate)
            //设置当前登录的用户
            bizAbsProfitInfo.addUserId= "123"
                   // AdminService().getUserInfo(iwebReq)!!.getStr("id")
            //设置当前时间
            var date = Date()
            var sdf =  SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
            //获取当前时间
            bizAbsProfitInfo.addTime= Timestamp.valueOf(sdf.format(date))
            //设置状态00(没有提交审批)
            bizAbsProfitInfo.status="03"
            this.save(iwebReq = iwebReq, d = bizAbsProfitInfo)
            isok =  true
        }
            if (isok){
                //再次查询获取刚保存的id
                var lists=this.intDal<BizAbsProfitInfoServiceDal>().isExist(iwebReq = iwebReq,   coreEnterpriseId =coreEnterpriseId , financialInstitutionsId = financialInstitutionsId , periods =periods)
                // 获取其中的id
                var id =lists?.getStr("id")
                for (content  in subjectlist!!){
                    //创造ABS收益明细表的实体对象
                    var bizAbsProfitDetail = BizAbsProfitDetail()
                    //获取费用名称,并设置进去
                    bizAbsProfitDetail.subjectId= content.subjectId
                    //获取金额
                    bizAbsProfitDetail.profit=content.profit
                    //获取备注
                    bizAbsProfitDetail.memo=content.memo
                    //设置获取的id
                    bizAbsProfitDetail.absProfitId= id
                    //  isTrue=dbp.merge("biz_abs_profit_detail",bizAbsProfitDetail)
                    this.save(iwebReq = iwebReq, d = bizAbsProfitDetail)
                    isok =true
                }
            }
        return isok
    }

    /**
     * 添加收益信息表画面 中 (保存按钮的实现)
     * @param  coreEnterpriseId
     *                       核心企业(不允许为空)
     * @param financialInstitutionId
     *                       计划管理人ID(不允许为空)
     * @param periodsId
     *               期数id(不允许为空)
     * @param  information
     *                     信息(费用名称,备注,金额)
     * @param financeOpinion
     *                     意见
     * @param  releaseDate
     *              发行日期
     */
    fun saveWays(iwebReq: IwebReq, subjectlist:List<AddOrRevisionIncomePoJo> ?, financeOpinion:String? , releaseDate :String? ,
                 coreEnterpriseId : String , financialInstitutionsId : String , periods : String ): Boolean {
        if (coreEnterpriseId == null){
            AssertUtils.isTrue(false,"核心企业不能为空!")
        }
        if (financialInstitutionsId == null) {
            AssertUtils.isTrue(false, " 计划管理人不能为空")
        }
        if (periods == null) {
            AssertUtils.isTrue(false, " 期数不能为空")
        }
        //判断数据保存到表是否成功
        var isok = false
        var list= this.intDal<BizAbsProfitInfoServiceDal>().isExist(iwebReq = iwebReq, coreEnterpriseId =coreEnterpriseId , financialInstitutionsId = financialInstitutionsId , periods = periods)
        //存在数据
        if (list != null){
            AssertUtils.isTrue(false, "当前添加的核心企业、金融机构、期数所对应的ABS收益信息已存在!")
        }else{
            //创造ABS收益信息表的实体对象
            var bizAbsProfitInfo = BizAbsProfitInfo()
            //设置核心企业id
            bizAbsProfitInfo.coreEnterpriseId = coreEnterpriseId
            //设置金融机构id
            bizAbsProfitInfo.financialInstitutionsId = financialInstitutionsId
            //设置期数
            bizAbsProfitInfo.periods = Integer.valueOf(periods)
            //设置金融部意见
            bizAbsProfitInfo.financeOpinion = financeOpinion
            // 发行日  release_date
            val format = SimpleDateFormat("yyyy-MM-dd")
            bizAbsProfitInfo.releaseDate = format.parse(releaseDate)
            //设置当前登录的用户
            bizAbsProfitInfo.addUserId = iwebReq.userId.toString()
                //    AdminService().getUserInfo(iwebReq)!!.getStr("id")

            //获取当前时间
            bizAbsProfitInfo.addTime = Date()
            //设置状态00(没有提交审批)
            bizAbsProfitInfo.status = "00"
            this.save(iwebReq = iwebReq,d = bizAbsProfitInfo)
            isok = true
        }
        if (isok){
            //再次查询获取刚保存的id
            var lists= this.intDal<BizAbsProfitInfoServiceDal>().isExist(iwebReq = iwebReq,  coreEnterpriseId = coreEnterpriseId , financialInstitutionsId = financialInstitutionsId , periods =periods)
            // 获取其中的id
            var id =lists?.getStr("id")
            //遍历financeOpinion
            for (content  in subjectlist!!){
                //创造ABS收益明细表的实体对象
                var bizAbsProfitDetail = BizAbsProfitDetail()
                //获取费用名称,并设置进去
                bizAbsProfitDetail.subjectId = content.subjectId
                //获取金额
                bizAbsProfitDetail.profit = content.profit
                //获取备注
                bizAbsProfitDetail.memo = content.memo
                //设置获取的id
                bizAbsProfitDetail.absProfitId = id
                this.save(iwebReq = iwebReq, d = bizAbsProfitDetail)
                // isTrue=dbp.merge("biz_abs_profit_detail",bizAbsProfitDetail)
                isok = true
            }
        }
        return isok
    }


    /**
     * 依据表单ID获取表单项信息
     *  根据ABS收益信息表id获取收益共通信息
     * @param id
     *        表单id(ABS收益ID)
     * @return 表单项信息
     */
    fun getFormEarningsInformation(iwebReq: IwebReq, absProfitId: Long): Record{
        if (absProfitId == null){
            AssertUtils.isTrue(false,"ABS收益ID不能为空!")
        }
        //返回一个对象给前端
        var record= this.intDal<BizAbsProfitInfoServiceDal>().getFormEarningsInformation(iwebReq = iwebReq, absProfitId = absProfitId)
        return  record
    }


    /**
     * 依据表单ID获取表单项信息
     *  根据ABS收益ID获取对应科目信息
     * @param id
     *        表单id(ABS收益ID)
     * @return 表单项信息
     */
    fun getFormSubjectInformation(iwebReq: IwebReq, absProfitId: Long): List<Record> {
        if (absProfitId == null){
            AssertUtils.isTrue(false,"ABS收益ID不能为空!")
        }
        //返回一个集合
        var list : List<Record> = this.intDal<BizAbsProfitInfoServiceDal>().getFormSubjectInformation(iwebReq = iwebReq, absProfitId = absProfitId)
        //获取期数
        var  per =list.get(0).getStr("periods")
        var periods =Integer.parseInt(per) -1
        //获取金融机构
        var financialInstitutionsId=list.get(0).getStr("financialInstitutionsId")
        //获取核心企业
        var  coreEnterpriseId= list.get(0).getStr("coreEnterpriseId")
        //遍历集合
        for (li in list){
           //获取科目的id
           var  subjectId=li.getStr("subjectId")
            //查询上一期对应的金额
            var record : Record? = this.intDal<BizAbsProfitInfoServiceDal>().beforeMoney(iwebReq = iwebReq, periods = periods ,
                    financialInstitutionsId = financialInstitutionsId ,  coreEnterpriseId = coreEnterpriseId ,subjectId =subjectId)
            //获取上一期的金额
           var profit= record?.getStr("profit")
            if (profit == null ){
                li.set("lastProfit","")
            }else{
                li.set("lastProfit",profit)
            }
        }
        return  list
    }




    /**
     * 修改收益信息表画面中
     * 保存金融部收益信息
     * @param  absProfitId
     *          表单的id(ABS收益ID)
     *@param  releaseDate
     *         发行日期
     *@param  financeOpinion
     *         金融意见
     *@param   subjectlist
     *          科目ID(基础费用科目ID),收益明细ID,收益金额,备注
     */
    fun saveFinance(iwebReq: IwebReq, absProfitId: Long,releaseDate:String ? ,financeOpinion :String? ,
                    subjectlist :List<ModificationFinancialPoJo>? , bizAbsProfit:BizAbsProfitInfo):Boolean{
        if (absProfitId == null){
            AssertUtils.isTrue(false,"ABS收益ID不能为空!")
        }
        //创造ABS收益信息表的实体对象
        var bizAbsProfitInfo = BizAbsProfitInfo()
        //保存表单的id
        bizAbsProfitInfo.id = absProfitId
        //保存发行日期  string 转data
        val formatter = SimpleDateFormat("yyyy-MM-dd")
//        var  releaseDate=
        bizAbsProfitInfo.releaseDate = formatter.parse(releaseDate)
        //保存金融部意见
        bizAbsProfitInfo.financeOpinion = financeOpinion
        //保存核心企业
        bizAbsProfitInfo.coreEnterpriseId = bizAbsProfit.coreEnterpriseId
        //保存金融机构
        bizAbsProfitInfo.financialInstitutionsId = bizAbsProfit.financialInstitutionsId
        //保存状态
        bizAbsProfitInfo.status = bizAbsProfit.status
        //保存用户id
        bizAbsProfitInfo.addUserId = iwebReq.userId.toString()
      //  this.merge(iwebReq = iwebReq, models = Model<BizAbsProfitInfo>())
        this.merge4T(iwebReq = iwebReq, tableName= "biz_abs_profit_info",datas =bizAbsProfitInfo)
        var isOk = false
        //遍历 subjectlist
        for(subject in subjectlist !!){
           var profitDetailId= subject.profitDetailId
            if (profitDetailId == null){
                //创造ABS收益明细表的实体对象
                var bizAbsProfitDetail = BizAbsProfitDetail()
                //新增数据
                bizAbsProfitDetail.subjectId = subject.subjectId
                bizAbsProfitDetail.profit  = subject.profit
                bizAbsProfitDetail.memo = subject.memo
                bizAbsProfitDetail.absProfitId = absProfitId.toString()
                this.merge4T(iwebReq = iwebReq, tableName= "biz_abs_profit_detail",datas =bizAbsProfitDetail)
                isOk = true
            }else{
                //创造ABS收益明细表的实体对象
                var bizAbsProfitDetail = BizAbsProfitDetail()
                //更新数据
                bizAbsProfitDetail.subjectId = subject.subjectId
                bizAbsProfitDetail.profit  = subject.profit
                bizAbsProfitDetail.memo = subject.memo
                bizAbsProfitDetail.id =  subject.profitDetailId!!.toLong()
                bizAbsProfitDetail.absProfitId = absProfitId.toString()
              //  this.merge(iwebReq = iwebReq, models = bizAbsProfitDetail as Model<*> )
                this.merge4T(iwebReq = iwebReq, tableName= "biz_abs_profit_detail",datas =bizAbsProfitDetail)
                isOk = true
            }
        }
        //调用新增的履历,逻辑的方法
        if (isOk){
            addSavaLogic(iwebReq,absProfitId,subjectlist , "0")
        }

        return  isOk
    }


    /**
     * 修改收益信息表画面中
     * 提交金融部收益信息
     * @param  absProfitId
     *          表单的id(ABS收益ID)
     *@param  releaseDate
     *         发行日期
     *@param  financeOpinion
     *         金融意见
     *@param   subjectlist
     *          科目ID(基础费用科目ID),收益明细ID,收益金额,备注
     */
    fun submitFinance(iwebReq: IwebReq, absProfitId: Long,releaseDate:String ? ,financeOpinion :String? ,
                    subjectlist :MutableList<ModificationFinancialPoJo>?,bizAbsProfit :BizAbsProfitInfo):Boolean{
        if (absProfitId == null){
            AssertUtils.isTrue(false,"ABS收益ID不能为空!")
        }
        //创造ABS收益信息表的实体对象
        var bizAbsProfitInfo = BizAbsProfitInfo()

        //保存表单的id
        bizAbsProfitInfo.id = absProfitId
        //保存发行日期  string 转data
        val formatter = SimpleDateFormat("yyyy-MM-dd")
        var  releaseDa=formatter.parse(releaseDate.toString())
        //  (Date)formatter.parseObject(releaseDate)
        bizAbsProfitInfo.releaseDate = releaseDa
        //保存金融部意见
        bizAbsProfitInfo.financeOpinion = financeOpinion
        //保存核心企业
        bizAbsProfitInfo.coreEnterpriseId = bizAbsProfit.coreEnterpriseId
        //保存金融机构
        bizAbsProfitInfo.financialInstitutionsId = bizAbsProfit.financialInstitutionsId
        //保存状态
        bizAbsProfitInfo.status = bizAbsProfit.status
        //保存用户id
        bizAbsProfitInfo.addUserId = iwebReq.userId.toString()
        //状态设置为03(等待审批)
        bizAbsProfitInfo.status = "03"
        this.merge4T(iwebReq = iwebReq, tableName= "biz_abs_profit_info",datas =bizAbsProfitInfo)
        var isOk = false
        //遍历 subjectlist
        for(subject in subjectlist !!){
            var profitDetailId= subject.profitDetailId
            if (profitDetailId == null){
                //创造ABS收益明细表的实体对象
                var bizAbsProfitDetail = BizAbsProfitDetail()
                //新增数据
                bizAbsProfitDetail.subjectId = subject.subjectId
                bizAbsProfitDetail.profit  = subject.profit
                bizAbsProfitDetail.memo = subject.memo
                bizAbsProfitDetail.absProfitId = absProfitId.toString()
             //   this.save(iwebReq = iwebReq, d = bizAbsProfitDetail)
                this.merge4T(iwebReq = iwebReq, tableName= "biz_abs_profit_detail",datas =bizAbsProfitDetail)
                isOk = true
            }else{
                //创造ABS收益明细表的实体对象
                var bizAbsProfitDetail = BizAbsProfitDetail()
                //更新数据
                bizAbsProfitDetail.subjectId = subject.subjectId
                bizAbsProfitDetail.profit  = subject.profit
                bizAbsProfitDetail.memo = subject.memo
                bizAbsProfitDetail.id =  subject.profitDetailId!!.toLong()
                bizAbsProfitDetail.absProfitId = absProfitId.toString()
               // this.save(iwebReq = iwebReq, d = bizAbsProfitDetail)
                this.merge4T(iwebReq = iwebReq, tableName= "biz_abs_profit_detail",datas =bizAbsProfitDetail)
                isOk = true
            }
        }
        //调用新增的履历,逻辑的方法
        if (isOk){
            addSavaLogic(iwebReq,absProfitId,subjectlist , "1")
        }
        return  isOk
    }


    /**
     *修改页面的保存时候,增加的逻辑
     */
    @Before(Tx::class)
    fun addSavaLogic(iwebReq: IwebReq,absProfitId: Long,subjectlist :List<ModificationFinancialPoJo>?,submitState:String){
        //利用abs_profit_id 获取ABS收益审核结果表的审核数据
        var  isOk=this.intDal<BizAbsProfitInfoServiceDal>().addSavaLogic(iwebReq,absProfitId)
        //等于true时,证明存在审核数据
        if (isOk){
        // 若存在审核数据:
            //a、判断对应的 最大的履历编号对应的履历数据的提交状态:利用abs_profit_id 来查
            var recordHistory=this.intDal<BizAbsProfitInfoServiceDal>().bigNumberState(iwebReq,absProfitId)
            //若不存在履历 或者 提交状态是已提交,则新增对应的科目修改履历数据;
            if (recordHistory == null || recordHistory.getStr("submitState").equals("1")){
                //遍历
                for(subject in subjectlist !!){
                    // 科目ID
                    var subjectId = subject.subjectId
                    // 修改后的收益金额
                    var profit  = subject.profit
                    // 判断金额是否有修改,有修改时保存履历, 为true,有修改数据
                    if( this.intDal<BizAbsProfitInfoServiceDal>().profitModifyState(iwebReq,absProfitId,subjectId,profit)){
                       //创建ABS收益明细修改履历表实力对象
                       var bizAbsProfitModifyHistory= BizAbsProfitModifyHistory()
                        //新增保存
                        //保存 履历编号
                        if (recordHistory == null ){
                            bizAbsProfitModifyHistory.historyNo = 1
                        }else{
                            bizAbsProfitModifyHistory.historyNo = recordHistory.getStr("historyNo").toInt()+1
                        }
                        //保存abs收益ID
                        bizAbsProfitModifyHistory.absProfitId = absProfitId!!.toInt()
                        //保存科目id
                        bizAbsProfitModifyHistory.subjectId = subject.subjectId
                        //保存收益
                        bizAbsProfitModifyHistory.profit = subject.profit
                        //保存提交状态
                        bizAbsProfitModifyHistory.submitState = submitState.toInt()
                        //保存备注
                        bizAbsProfitModifyHistory.memo = subject.memo
                        this.save(iwebReq = iwebReq, d = bizAbsProfitModifyHistory)
                    }
                }
            }
            //  b、若存在履历 且 提交状态是未提交:
            else  if (recordHistory != null && recordHistory.getStr("submitState").equals("0")){
                //遍历
                for(subject in subjectlist !!){
                    // 科目ID
                    var subjectId = subject.subjectId
                    // 修改后的收益金额
                    var profit  = subject.profit
                    // 判断金额是否有修改,有修改时保存履历, 为true,有修改数据
                    if( this.intDal<BizAbsProfitInfoServiceDal>().profitModifyState(iwebReq,absProfitId,subjectId,profit)) {
                        //查询该履历编号、ABS收益ID 下是否有该科目的履历
                        var isExist= this.intDal<BizAbsProfitInfoServiceDal>().isExistResume(iwebReq, recordHistory.getStr("historyNo").toInt(),absProfitId!!.toInt())
                        //如果存在
                        if (isExist != null ){
                            //创建ABS收益明细修改履历表实力对象
                            var bizAbsProfitModifyHistory= BizAbsProfitModifyHistory()
                            // 修改保存 ,需要id
                            //保存 履历编号
                            bizAbsProfitModifyHistory.historyNo = recordHistory.getStr("historyNo").toInt()
                            //保存abs收益ID
                            bizAbsProfitModifyHistory.absProfitId = absProfitId.toInt()
                            //保存科目id
                            bizAbsProfitModifyHistory.subjectId = subject.subjectId
                            //保存收益
                            bizAbsProfitModifyHistory.profit = subject.profit
                            //保存提交状态
                            bizAbsProfitModifyHistory.submitState = submitState.toInt()
                            //保存备注
                            bizAbsProfitModifyHistory.memo = subject.memo
                            //保存id(代表是修改)
                            bizAbsProfitModifyHistory.id = isExist.getStr("id").toLong()
                            this.save(iwebReq = iwebReq, d = bizAbsProfitModifyHistory)
                        }else{
                            //创建ABS收益明细修改履历表实力对象
                            var bizAbsProfitModifyHistory= BizAbsProfitModifyHistory()
                            // 新增保存 ,不需要id
                            //保存 履历编号
                            bizAbsProfitModifyHistory.historyNo = recordHistory.getStr("historyNo").toInt()
                            //保存abs收益ID
                            bizAbsProfitModifyHistory.absProfitId = absProfitId!!.toInt()
                            //保存科目id
                            bizAbsProfitModifyHistory.subjectId = subject.subjectId
                            //保存收益
                            bizAbsProfitModifyHistory.profit = subject.profit
                            //保存提交状态
                            bizAbsProfitModifyHistory.submitState = submitState.toInt()
                            //保存备注
                            bizAbsProfitModifyHistory.memo = subject.memo
                            this.save(iwebReq = iwebReq, d = bizAbsProfitModifyHistory)
                        }
                    }
                }
            }
            //如果是提交,继续走下面这个逻辑
            if (submitState.equals("1")){
                //4、修改画面提交时,将对应的最大编号的履历数据,的提交状态都改成已提交;
                //获取对应的最大编号的履历数据中的id
                 var historyNo=recordHistory.getStr("historyNo")
                var  recordList =this.intDal<BizAbsProfitInfoServiceDal>().getBigNumberResumeData(iwebReq,historyNo,absProfitId)
                //遍历
                for ( record in  recordList ){
                    //获取每次的id
                    var id = record.getStr("id")
                    //创建ABS收益明细修改履历表实例对象
                    var bizAbsProfitModifyHistory= BizAbsProfitModifyHistory()
                    bizAbsProfitModifyHistory.id= id.toLong()
                    bizAbsProfitModifyHistory.submitState = 1
                    bizAbsProfitModifyHistory.memo = record.getStr("memo")
                    this.save(iwebReq = iwebReq, d = bizAbsProfitModifyHistory)
                }
            }
        }else{
            //等于false,证明没有数据,则不用保存履历
            return
        }
    }


}
package cn.szqhyf.qhyffs.app.fs.idal


import club.newepoch.admin.app.sys.service.AdminService
import club.newepoch.iweb.IwebConstant
import club.newepoch.iweb.ext.IwebReq
import club.newepoch.persistent.db.common.DbPro
import club.newepoch.persistent.db.common.Page
import club.newepoch.persistent.db.pojo.Record
import club.newepoch.utils.AssertUtils
import club.newepoch.utils.StringUtils
import cn.szqhyf.qhyffs.app.fs.pojo.po.AddOrRevisionIncomePoJo
import cn.szqhyf.qhyffs.app.fs.pojo.po.BizAbsProfitDetail
import cn.szqhyf.qhyffs.app.fs.pojo.po.BizAbsProfitInfo

import com.alibaba.fastjson.JSONObject
import com.jfinal.core.PageInfo
import org.json.JSONArray
import java.sql.Timestamp
import java.util.*
import java.text.SimpleDateFormat




/**
 *ABS收益表ServiceDal
 */
open class BizAbsProfitInfoServiceDal :  QhyffsDal(){

    /**
     * ABS收益表管理一览画面
     * @param coreEnterpriseId
     *                       核心企业
     * @param financialInstitutionId
     *                       计划管理人
     * @param periods
     *              期数
     * @param bigPeriodsId
     *                       所属大区ID
     */
    fun pages(iwebReq: IwebReq, pageInfo: PageInfo, coreEnterpriseId:String ?, financialInstitutionsId:String?, periods:String? , bigPeriodsId :String? ): Page<Record>? {
        var dbp = DbPro.use(iwebReq.dsName)
        var pageIndex = pageInfo?.pageIndex ?: 1
        var pageSize = pageInfo?.pageSize ?: IwebConstant.DEFAULT_PAGE_SIZE
        var select= """
                  SELECT
                        a.id as abs_profit_id ,
                        a.core_enterprise_id,
                        a.financial_institutions_id,
                        a.periods,
                        a.status ,
                        c.id
                    """
        var from="""
                   FROM
                        biz_abs_profit_info a,
                        biz_big_periods_info c,
                        biz_periods_mapping_info b
                    WHERE
                        a.sys_status = 1
                    AND a.core_enterprise_id = c.core_enterprise_id
                    AND a.financial_institutions_id = c.financial_institutions_id
                    AND c.sys_status = 1
                    AND a.periods = b.periods
                    AND b.sys_status = 1
                    AND c.id = b.big_periods_id
                  """
        var paras = mutableListOf<Any>()
        //核心企业
        if(StringUtils.notBlank(coreEnterpriseId)  ){
            from += " AND a.core_enterprise_id = ? "
            var  coreEnterpriseId="${coreEnterpriseId?.trim()}"
            paras.add(coreEnterpriseId)
        }
        //金融机构
        if(StringUtils.notBlank(financialInstitutionsId) ){
            from += " AND a.financial_institutions_id = ? "
            var financialInstitutionsId="${financialInstitutionsId?.trim()}"
            paras.add(financialInstitutionsId)
        }
        //期数
        if(StringUtils.notBlank(periods) ){
            from += " AND a.periods = ? "
            var periods = "${periods?.trim()}"
            paras.add(periods.trim())
        }
        //所属大区
        if (StringUtils.notBlank(bigPeriodsId)){
            from += " AND c.id =  ? "
            var BelongsToRegional = "${bigPeriodsId?.trim()}"
            paras.add(BelongsToRegional)
        }
      // 设置所属大期
        var pageList=dbp.paginate(pageIndex,pageSize,select,from,*paras.toTypedArray<Any>())
        for (page  in pageList.list){
           //获取大期id
           var bigPeriodsId = page.getStr("id")
            //调用获取所属大期的方法
             var  record = this.getPeriods(iwebReq,bigPeriodsId)
            page.set("bigPeriods",record!!.getStr("bigPeriods"))
        }
        return pageList
    }

    /**
     * 所属大期
     */
    fun getPeriods(iwebReq: IwebReq,bigPeriodsId :String ): Record? {
        var dbp = DbPro.use(iwebReq.dsName)
        var sql= """
                   SELECT
                        b.big_periods_id,
                        concat(
                            MIN(b.periods),
                            '~',
                            MAX(b.periods)
                        ) AS big_periods
                    FROM
                        biz_big_periods_info a
                    LEFT JOIN biz_periods_mapping_info b ON a.id = b.big_periods_id
                    WHERE
                        a.sys_status = 1
                    AND b.sys_status = 1
                    and b.big_periods_id = ?
                    GROUP BY
                        b.big_periods_id
                  """
        var list = dbp.findFirst(sql ,bigPeriodsId)
        return list
    }


    /**
     * ABS收益表画面一览 (所属大期)的获得方法
     */
    fun periods(iwebReq: IwebReq): List<Record>? {
        var dbp = DbPro.use(iwebReq.dsName)
        var sql= """
                   SELECT
                        b.big_periods_id,
                        concat(
                            MIN(b.periods),
                            '~',
                            MAX(b.periods)
                        ) AS big_periods
                    FROM
                        biz_big_periods_info a
                    LEFT JOIN biz_periods_mapping_info b ON a.id = b.big_periods_id
                    WHERE
                        a.sys_status = 1
                    AND b.sys_status = 1
                    GROUP BY
                        b.big_periods_id
                  """
        var list = dbp.find(sql)
     /*   val json = JSONArray()
        for ( li  in list  ){
            val jo = JSONObject()
            jo.put("bigPeriods",li.getStr("bigPeriods"))
            json.put(jo)
        }*/

        return list
}

    /**
     * 添加收益信息表画面 中 (查询按钮)
     * @param  coreEnterpriseId
     *                       核心企业(不允许为空)
     * @param financialInstitutionId
     *                       计划管理人ID (不允许为空)
     * @param periodsId
     *           期数  (不允许为空)

     */
    fun getQuery(iwebReq: IwebReq, coreEnterpriseId:String , financialInstitutionsId:String , periods:String ): List<Record>? {
        var dbp = DbPro.use(iwebReq.dsName)
        var sql= """
                     SELECT
                        c.subject_id,
                        d.name
                    FROM
                        biz_big_periods_info a,
                        biz_periods_mapping_info b,
                        biz_fs_abs_relation c,
                        biz_financial_subjects d,
                        biz_financial_subjects_source e
                    WHERE
                    a.id = b.big_periods_id
                    AND a.id = c.abs_id
                    AND c.subject_id = d.id
                    AND d.source_id = e.id
                    AND a.core_enterprise_id = trim(?)
                    AND a.financial_institutions_id = trim(?)
                    AND b.periods = trim(?)
                    AND e.type in(3,4)
                    AND a.sys_status = 1
                    AND b.sys_status= 1
                    AND c.sys_status=1
                    AND d.sys_status=1
                    AND e.sys_status=1
                  """
        var list = dbp.find(sql,coreEnterpriseId,financialInstitutionsId,periods)
        return list
    }

    /**
     * 添加收益信息表画面中 (判断是否跳期的判断依准)
     * @param  coreEnterpriseId
     *                       核心企业(不允许为空)
     * @param financialInstitutionId
     *                       计划管理人ID (不允许为空)
     * @param periodsId
     *           期数 (不允许为空)
     */
    fun isjumpPeriods(iwebReq: IwebReq, coreEnterpriseId:String , financialInstitutionsId:String , periods:String ): List<Record>? {
        var dbp = DbPro.use(iwebReq.dsName)
        if (Integer.valueOf(periods) - 1 > 0){
            var jumpSql= """
                        SELECT
                            a.id
                        FROM
                            biz_abs_profit_info a
                        WHERE
                            a.core_enterprise_id = ?
                            AND a.financial_institutions_id = ?
                            AND a.periods = (? - 1)
                            AND a.sys_status = 1
                       """

          var record=  dbp.find(jumpSql,coreEnterpriseId,financialInstitutionsId,periods)
            return record
        }else{
            return null
        }

    }

    /**
     * 根据发行日判断是否超过提交期限
     * @param releaseDate
     *         发行日(不能为空)
     */
    fun isPassDeadline(iwebReq: IwebReq,releaseDate: String  ): Boolean {
        var isOk= true
        var dbp = DbPro.use(iwebReq.dsName)
        var sql="""
                 SELECT
                    a.date_type
                FROM
                    biz_legal_date_configure a
                WHERE
                    a.legal_date = ?
                AND a.sys_status = 1
            """
        var release=dbp.findFirst(sql,releaseDate)
        if(release == null){
             isOk=false
        }
        return isOk
    }

    /**
     * 添加收益信息表画面 中 (判断当前保存的数据在数据库中是否存在)
     * @param  coreEnterpriseId
     *                       核心企业(不允许为空)
     * @param financialInstitutionId
     *                       计划管理人ID(不允许为空)
     * @param periodsId
     *               期数id(不允许为空)
     */
    fun isExist(iwebReq: IwebReq, coreEnterpriseId : String , financialInstitutionsId : String , periods :String ): Record? {
        var dbp = DbPro.use(iwebReq.dsName)
        //判断当前保存的数据在数据库中是否存在
        var  sql= """
                SELECT
                    a.id
                FROM
                    biz_abs_profit_info a
                WHERE
                    a.core_enterprise_id = ?
                    AND a.financial_institutions_id = ?
                    AND a.periods = ?
                    AND a.sys_status = 1
            """
        var list= dbp.findFirst(sql,coreEnterpriseId , financialInstitutionsId ,periods)
        return list
    }

    /**
     * 依据表单ID获取表单项信息(修改页面)
     *  根据ABS收益信息表id获取收益共通信息
     * @param absProfitId
     *     表单的id(ABS收益ID)
     * @return 表单项信息
     */
    fun getFormEarningsInformation(iwebReq: IwebReq, absProfitId: Long?): Record{
        var dbp = DbPro.use(iwebReq.dsName)
        var  sql="""
                      SELECT
                        core_enterprise_id,
                        financial_institutions_id,
                        periods,
                        finance_opinion,
                        release_date
                    FROM
                        biz_abs_profit_info
                    WHERE
                        id = ?
                        AND sys_status =1
                  """
       var record= dbp.findFirst(sql,absProfitId)

       var  releaseDate =record.getDate("releaseDate").toString()
        record.set("releaseDate",releaseDate)
        return  record
    }


    /**
     * 依据表单ID获取表单项信息(修改页面)
     * 根据ABS收益ID获取对应科目信息
     * @param absProfitId
     *     表单的id(ABS收益ID)
     * @return 表单项信息
     */
    fun getFormSubjectInformation(iwebReq: IwebReq, absProfitId: Long): List<Record>{
        var dbp = DbPro.use(iwebReq.dsName)
        var  sql="""
                  SELECT
                    c.subject_id,
                    d.name,
                    g.id AS profit_detail_id,
                    g.profit,
                    g.memo,
                    f.periods,
                    f.core_enterprise_id,
                    f.financial_institutions_id
                FROM
                    biz_big_periods_info a,
                    biz_periods_mapping_info b,
                    biz_financial_subjects d,
                    biz_financial_subjects_source e,
                    biz_abs_profit_info f,
                    biz_fs_abs_relation c
                LEFT JOIN biz_abs_profit_detail g ON g.abs_profit_id = ?
                AND g.sys_status = 1
                AND c.subject_id = g.subject_id
                WHERE
                    a.id = b.big_periods_id
                AND a.id = c.abs_id
                AND c.subject_id = d.id
                AND d.source_id = e.id
                AND a.core_enterprise_id = f.core_enterprise_id
                AND a.financial_institutions_id = f.financial_institutions_id
                AND b.periods = f.periods
                AND f.id = ?
                AND e.type IN (3, 4)
                AND a.sys_status = 1
                AND b.sys_status = 1
                AND c.sys_status = 1
                AND d.sys_status = 1
                AND e.sys_status = 1
                AND f.sys_status = 1
                """
        var list=dbp.find(sql,absProfitId,absProfitId)
        return  list
    }

    /**
     * 获取上一期对应的金额
     */
  fun  beforeMoney(iwebReq: IwebReq, coreEnterpriseId: String , financialInstitutionsId : String ,
                    periods: Int , subjectId : String): Record?{
        var dbp = DbPro.use(iwebReq.dsName)
        var  sql =  """
                    SELECT
                        b.profit
                    FROM
                        biz_abs_profit_info a,
                        biz_abs_profit_detail b
                    WHERE
                        a.id = b.abs_profit_id
                        AND a.sys_status = 1
                        AND b.sys_status = 1
                        AND a.core_enterprise_id = ?
                        AND a.financial_institutions_id = ?
                        AND a.periods = ?
                        AND b.subject_id = ?
             """
        var record= dbp.findFirst(sql,coreEnterpriseId,financialInstitutionsId , periods , subjectId)
        return  record
    }

    /**
     * 根据abs_profit_id获取ABS收益审核结果表的审核数据
     */
    fun  addSavaLogic(iwebReq: IwebReq, absProfitId: Long?): Boolean{
        //判断是否数据
        var isOk = false
        var dbp = DbPro.use(iwebReq.dsName)
        var  sql =  """
                    SELECT
                        id
                    FROM
                        biz_abs_profit_approve_result
                    WHERE
                        abs_profit_id = ?
                         AND sys_status = 1
             """
        var record= dbp.find(sql,absProfitId)
        //等于true,有数据,等于false,没有数据
        if(record.size > 0){
              isOk = true
        }
        return  isOk
    }



    /**
     * 判断对应的 最大的履历编号对应的履历数据的提交状态:利用abs_profit_id 来查
     */
    fun  bigNumberState(iwebReq: IwebReq, absProfitId: Long?): Record{
        //判断是否数据
        var isOk = false
        var dbp = DbPro.use(iwebReq.dsName)
        var  sql =  """
                    SELECT
                        id,
                    history_no,
                    submit_state
                    FROM
                        biz_abs_profit_modify_history
                    WHERE
                        abs_profit_id = ?
                        AND sys_status = 1
                    ORDER BY history_no DESC
                """
        var record= dbp.findFirst(sql,absProfitId)
        return  record
    }



    /**
     * 根据abs_profit_id、科目ID判断是否修改了金额
     */
    fun  profitModifyState(iwebReq: IwebReq, absProfitId: Long?, subjectId: Int?, profit: Double?): Boolean{
        //判断是否修改数据
        var isOk = true
        var dbp = DbPro.use(iwebReq.dsName)
        var  sql =  """
                    SELECT
                        id,profit
                    FROM
                        biz_abs_profit_detail
                    WHERE
                        abs_profit_id = ?
                        and subject_id = ?
                         and sys_status = 1
             """
        var record= dbp.findFirst(sql,absProfitId, subjectId)
        // 等于true,有修改数据,等于false, 没有修改数据
        if(record !=null && record.getStr("profit").equals(profit)){
            isOk = false
        }
        return  isOk
    }


    /**
     * 查询该履历编号、ABS收益ID 下是否有该科目的履历

     */
    fun  isExistResume(iwebReq: IwebReq, historyNo: Int, absProfitId: Int):Record{
        var dbp = DbPro.use(iwebReq.dsName)
        var  sql =  """
                    SELECT
                        id
                    FROM
                        biz_abs_profit_modify_history
                    WHERE
                        abs_profit_id = ?
                        and history_no = ?
                        and sys_status = 1
             """
        var record= dbp.findFirst(sql,absProfitId, historyNo)
        return  record
    }

    /**
     * 获取对应的最大编号的履历数据
     */
    fun  getBigNumberResumeData (iwebReq: IwebReq,historyNo: String,absProfitId:Long ):List<Record>{
        var dbp = DbPro.use(iwebReq.dsName)
        //利用最大的履历编号,查询对应的id
        var idSql ="""
                SELECT
                    id,
                    memo
                FROM
                    biz_abs_profit_modify_history
                WHERE
                    history_no = ?
                    and abs_profit_id = ?
                    and submit_state = 0
                    and sys_status = 1
                """
       var recordList = dbp.find(idSql,historyNo,absProfitId)
        return  recordList
    }



}

 

posted on 2018-12-12 17:00  小白菜好吃  阅读(692)  评论(0编辑  收藏  举报

导航