<?xml version="1.0" encoding="UTF-8"?>

<!--
  ~
  ~      Copyright (c) 2018-2025, lengleng All rights reserved.
  ~
  ~  Redistribution and use in source and binary forms, with or without
  ~  modification, are permitted provided that the following conditions are met:
  ~
  ~ Redistributions of source code must retain the above copyright notice,
  ~  this list of conditions and the following disclaimer.
  ~  Redistributions in binary form must reproduce the above copyright
  ~  notice, this list of conditions and the following disclaimer in the
  ~  documentation and/or other materials provided with the distribution.
  ~  Neither the name of the yifu4cloud.com developer nor the names of its
  ~  contributors may be used to endorse or promote products derived from
  ~  this software without specific prior written permission.
  ~  Author: lengleng (wangiegie@gmail.com)
  ~
  -->

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.yifu.cloud.plus.v1.yifu.salary.mapper.TSalaryAccount2022Mapper">

  <resultMap id="tSalaryAccount2022Map" type="com.yifu.cloud.plus.v1.yifu.salary.entity.TSalaryAccount2022">
    <id property="id" column="ID"/>
    <result property="invoiceTitle" column="INVOICE_TITLE"/>
    <result property="empId" column="EMP_ID"/>
    <result property="empName" column="EMP_NAME"/>
    <result property="empIdcard" column="EMP_IDCARD"/>
    <result property="settleDepartId" column="SETTLE_DEPART_ID"/>
    <result property="settleDepartNo" column="SETTLE_DEPART_NO"/>
    <result property="settleDepartName" column="SETTLE_DEPART_NAME"/>
    <result property="settlementMonth" column="SETTLEMENT_MONTH"/>
    <result property="taxMonth" column="TAX_MONTH"/>
    <result property="realSalary" column="REAL_SALARY"/>
    <result property="costReduction" column="cost_reduction"/>
    <result property="specialDeduMoney" column="SPECIAL_DEDU_MONEY"/>
    <result property="childEduinfoMoney" column="child_eduInfo_money"/>
    <result property="housingLoanInterestExpenseMoney" column="housing_loan_Interest_expense_money"/>
    <result property="housingRentalinfoMoney" column="housing_rentalInfo_money"/>
    <result property="continuingEducationExpenseMoney" column="continuing_education_expense_money"/>
    <result property="supportElderlyExpenseMoney" column="support_elderly_expense_money"/>
    <result property="personalSocial" column="PERSONAL_SOCIAL"/>
    <result property="personalFund" column="PERSONAL_FUND"/>
    <result property="withholidingPersonSocial" column="withholiding_person_social"/>
    <result property="withholidingPersonFund" column="withholiding_person_fund"/>
    <result property="enterpriseAnnuity" column="enterprise_annuity"/>
    <result property="salaryTax" column="salary_tax"/>
    <result property="actualSalarySum" column="actual_salary_sum"/>
    <result property="annualBonus" column="annual_bonus"/>
    <result property="annualBonusTax" column="annual_bonus_tax"/>
    <result property="exemptionPersionTax" column="exemption_persion_tax"/>
    <result property="unitId" column="unit_id"/>
    <result property="unitNo" column="unit_no"/>
    <result property="unitName" column="unit_name"/>
    <result property="sumBabyMoney" column="sum_baby_money"/>
	<result property="isNewEmployee" column="IS_NEW_EMPLOYEE"/>
	<result property="createMonth" column="CREATE_MONTH"/>
	<result property="empPhone" column="EMP_PHONE"/>
	<result property="sumPrivatePension" column="SUM_PRIVATE_PENSION"/>
  </resultMap>
    <sql id="Base_Column_List">
                a.ID,
                a.INVOICE_TITLE,
                a.EMP_ID,
                a.EMP_NAME,
                a.EMP_IDCARD,
                a.SETTLE_DEPART_ID,
                a.SETTLE_DEPART_NO,
                a.SETTLE_DEPART_NAME,
                a.SETTLEMENT_MONTH,
                a.TAX_MONTH,
                a.REAL_SALARY,
                a.cost_reduction,
                a.SPECIAL_DEDU_MONEY,
                a.child_eduInfo_money,
                a.housing_loan_Interest_expense_money,
                a.housing_rentalInfo_money,
                a.continuing_education_expense_money,
                a.support_elderly_expense_money,
                a.PERSONAL_SOCIAL,
                a.PERSONAL_FUND,
                a.withholiding_person_social,
                a.withholiding_person_fund,
                a.enterprise_annuity,
                a.salary_tax,
                a.actual_salary_sum,
                a.annual_bonus,
                a.annual_bonus_tax,
                a.exemption_persion_tax,
                a.unit_id,
                a.unit_no,
                a.unit_name,
                a.sum_baby_money,
                a.IS_NEW_EMPLOYEE,
                a.CREATE_MONTH,
                a.EMP_PHONE,
                a.SUM_PRIVATE_PENSION
    </sql>
    <sql id="tSalaryAccount2022_where">
        <if test="tSalaryAccount2022 != null">
                    <if test="tSalaryAccount2022.id != null and tSalaryAccount2022.id.trim() != ''">
                        AND a.ID = #{tSalaryAccount2022.id}
                    </if>
                    <if test="tSalaryAccount2022.invoiceTitle != null and tSalaryAccount2022.invoiceTitle.trim() != ''">
                        AND a.INVOICE_TITLE = #{tSalaryAccount2022.invoiceTitle}
                    </if>
                    <if test="tSalaryAccount2022.empId != null and tSalaryAccount2022.empId.trim() != ''">
                        AND a.EMP_ID = #{tSalaryAccount2022.empId}
                    </if>
                    <if test="tSalaryAccount2022.empName != null and tSalaryAccount2022.empName.trim() != ''">
                        AND a.EMP_NAME = #{tSalaryAccount2022.empName}
                    </if>
                    <if test="tSalaryAccount2022.empIdcard != null and tSalaryAccount2022.empIdcard.trim() != ''">
                        AND a.EMP_IDCARD = #{tSalaryAccount2022.empIdcard}
                    </if>
                    <if test="tSalaryAccount2022.settleDepartId != null and tSalaryAccount2022.settleDepartId.trim() != ''">
                        AND a.SETTLE_DEPART_ID = #{tSalaryAccount2022.settleDepartId}
                    </if>
                    <if test="tSalaryAccount2022.settleDepartNo != null and tSalaryAccount2022.settleDepartNo.trim() != ''">
                        AND a.SETTLE_DEPART_NO = #{tSalaryAccount2022.settleDepartNo}
                    </if>
                    <if test="tSalaryAccount2022.settleDepartName != null and tSalaryAccount2022.settleDepartName.trim() != ''">
                        AND a.SETTLE_DEPART_NAME = #{tSalaryAccount2022.settleDepartName}
                    </if>
                    <if test="tSalaryAccount2022.settlementMonth != null and tSalaryAccount2022.settlementMonth.trim() != ''">
                        AND a.SETTLEMENT_MONTH = #{tSalaryAccount2022.settlementMonth}
                    </if>
                    <if test="tSalaryAccount2022.taxMonth != null and tSalaryAccount2022.taxMonth.trim() != ''">
                        AND a.TAX_MONTH = #{tSalaryAccount2022.taxMonth}
                    </if>
                    <if test="tSalaryAccount2022.realSalary != null">
                        AND a.REAL_SALARY = #{tSalaryAccount2022.realSalary}
                    </if>
                    <if test="tSalaryAccount2022.costReduction != null">
                        AND a.cost_reduction = #{tSalaryAccount2022.costReduction}
                    </if>
                    <if test="tSalaryAccount2022.specialDeduMoney != null">
                        AND a.SPECIAL_DEDU_MONEY = #{tSalaryAccount2022.specialDeduMoney}
                    </if>
                    <if test="tSalaryAccount2022.childEduinfoMoney != null">
                        AND a.child_eduInfo_money = #{tSalaryAccount2022.childEduinfoMoney}
                    </if>
                    <if test="tSalaryAccount2022.housingLoanInterestExpenseMoney != null">
                        AND a.housing_loan_Interest_expense_money = #{tSalaryAccount2022.housingLoanInterestExpenseMoney}
                    </if>
                    <if test="tSalaryAccount2022.housingRentalinfoMoney != null">
                        AND a.housing_rentalInfo_money = #{tSalaryAccount2022.housingRentalinfoMoney}
                    </if>
                    <if test="tSalaryAccount2022.continuingEducationExpenseMoney != null">
                        AND a.continuing_education_expense_money = #{tSalaryAccount2022.continuingEducationExpenseMoney}
                    </if>
                    <if test="tSalaryAccount2022.supportElderlyExpenseMoney != null">
                        AND a.support_elderly_expense_money = #{tSalaryAccount2022.supportElderlyExpenseMoney}
                    </if>
                    <if test="tSalaryAccount2022.personalSocial != null">
                        AND a.PERSONAL_SOCIAL = #{tSalaryAccount2022.personalSocial}
                    </if>
                    <if test="tSalaryAccount2022.personalFund != null">
                        AND a.PERSONAL_FUND = #{tSalaryAccount2022.personalFund}
                    </if>
                    <if test="tSalaryAccount2022.withholidingPersonSocial != null">
                        AND a.withholiding_person_social = #{tSalaryAccount2022.withholidingPersonSocial}
                    </if>
                    <if test="tSalaryAccount2022.withholidingPersonFund != null">
                        AND a.withholiding_person_fund = #{tSalaryAccount2022.withholidingPersonFund}
                    </if>
                    <if test="tSalaryAccount2022.enterpriseAnnuity != null">
                        AND a.enterprise_annuity = #{tSalaryAccount2022.enterpriseAnnuity}
                    </if>
                    <if test="tSalaryAccount2022.salaryTax != null">
                        AND a.salary_tax = #{tSalaryAccount2022.salaryTax}
                    </if>
                    <if test="tSalaryAccount2022.actualSalarySum != null">
                        AND a.actual_salary_sum = #{tSalaryAccount2022.actualSalarySum}
                    </if>
                    <if test="tSalaryAccount2022.annualBonus != null">
                        AND a.annual_bonus = #{tSalaryAccount2022.annualBonus}
                    </if>
                    <if test="tSalaryAccount2022.annualBonusTax != null">
                        AND a.annual_bonus_tax = #{tSalaryAccount2022.annualBonusTax}
                    </if>
                    <if test="tSalaryAccount2022.exemptionPersionTax != null">
                        AND a.exemption_persion_tax = #{tSalaryAccount2022.exemptionPersionTax}
                    </if>
                    <if test="tSalaryAccount2022.unitId != null and tSalaryAccount2022.unitId.trim() != ''">
                        AND a.unit_id = #{tSalaryAccount2022.unitId}
                    </if>
                    <if test="tSalaryAccount2022.unitNo != null and tSalaryAccount2022.unitNo.trim() != ''">
                        AND a.unit_no = #{tSalaryAccount2022.unitNo}
                    </if>
                    <if test="tSalaryAccount2022.unitName != null and tSalaryAccount2022.unitName.trim() != ''">
                        AND a.unit_name = #{tSalaryAccount2022.unitName}
                    </if>
                    <if test="tSalaryAccount2022.sumBabyMoney != null">
                        AND a.sum_baby_money = #{tSalaryAccount2022.sumBabyMoney}
                    </if>
					<if test="tSalaryAccount2022.sumPrivatePension != null">
						AND a.SUM_PRIVATE_PENSION = #{tSalaryAccount2022.sumPrivatePension}
					</if>
        </if>
    </sql>
    <!--tSalaryAccount2022简单分页查询-->
    <select id="getTSalaryAccount2022Page" resultMap="tSalaryAccount2022Map">
        SELECT
        <include refid="Base_Column_List"/>
        FROM t_salary_account_2022 a
        <where>
            1=1
            <include refid="tSalaryAccount2022_where"/>
        </where>
    </select>

	<!-- 自动创建年度报账表 -->
	<update id="createAccountYear" statementType="STATEMENT">
		CREATE TABLE IF NOT EXISTS ${tableName} (
		`ID` varchar(32) NOT NULL COMMENT '主键',
		`INVOICE_TITLE` varchar(50) DEFAULT NULL COMMENT '封面抬头',
		`EMP_ID` varchar(32) DEFAULT NULL COMMENT '员工 ID',
		`EMP_NAME` varchar(50) DEFAULT NULL COMMENT '员工姓名',
		`EMP_IDCARD` varchar(25) DEFAULT NULL COMMENT '员工身份证号',
		`SETTLE_DEPART_ID` varchar(32) DEFAULT NULL COMMENT '结算部门id',
		`SETTLE_DEPART_NO` varchar(50) DEFAULT NULL COMMENT '结算部门no',
		`SETTLE_DEPART_NAME` varchar(50) DEFAULT NULL COMMENT '结算部门name',
		`SETTLEMENT_MONTH` varchar(20) DEFAULT NULL COMMENT '结算月',
		`TAX_MONTH` varchar(6) DEFAULT NULL COMMENT '计税月份',
		`REAL_SALARY` decimal(12,2) DEFAULT '0.00' COMMENT '应发',
		`cost_reduction` decimal(12,2) DEFAULT '0.00' COMMENT '减除',
		`SPECIAL_DEDU_MONEY` decimal(12,2) DEFAULT '0.00' COMMENT '专项',
		`child_eduInfo_money` decimal(12,2) DEFAULT '0.00' COMMENT '累计子女教育',
		`housing_loan_Interest_expense_money` decimal(12,2) DEFAULT '0.00' COMMENT '累计住房贷款利息',
		`housing_rentalInfo_money` decimal(12,2) DEFAULT '0.00' COMMENT '累计住房租金',
		`continuing_education_expense_money` decimal(12,2) DEFAULT '0.00' COMMENT '累计继续教育',
		`support_elderly_expense_money` decimal(12,2) DEFAULT '0.00' COMMENT '累计赡养老人',
		`PERSONAL_SOCIAL` decimal(12,2) DEFAULT '0.00' COMMENT '个人社保',
		`PERSONAL_FUND` decimal(12,2) DEFAULT '0.00' COMMENT '个人公积金',
		`withholiding_person_social` decimal(12,2) DEFAULT '0.00' COMMENT '代扣个人社保',
		`withholiding_person_fund` decimal(12,2) DEFAULT '0.00' COMMENT '代扣个人公积金',
		`enterprise_annuity` decimal(12,2) DEFAULT '0.00' COMMENT '企业年金',
		`salary_tax` decimal(12,2) DEFAULT '0.00' COMMENT '个税',
		`actual_salary_sum` decimal(12,2) DEFAULT '0.00' COMMENT '实发',
		`annual_bonus` decimal(12,2) DEFAULT '0.00' COMMENT '年终奖(单独扣税的部分)',
		`annual_bonus_tax` decimal(12,2) DEFAULT '0.00' COMMENT '年终奖单独扣税',
		`exemption_persion_tax` decimal(12,2) DEFAULT '0.00' COMMENT '免个税个人代扣',
		`unit_id` varchar(32) DEFAULT NULL COMMENT '单位id',
		`unit_no` varchar(50) DEFAULT NULL COMMENT '单位no',
		`unit_name` varchar(50) DEFAULT NULL COMMENT '单位name',
		`sum_baby_money` decimal(12,2) DEFAULT '0.00' COMMENT '累计婴幼儿照护费用',
		`SUM_PRIVATE_PENSION` decimal(12,2) DEFAULT '0.00' COMMENT '累计个人养老金',
		`IS_NEW_EMPLOYEE` varchar(1) DEFAULT NULL COMMENT '是否当月新增人员(0否1是)',
		`CREATE_MONTH` varchar(6) DEFAULT NULL COMMENT '入职年月',
		`EMP_PHONE` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '手机号码',
		PRIMARY KEY (`ID`) USING BTREE,
		UNIQUE KEY `SY_ACCOUNT_ID` (`ID`) USING BTREE,
		KEY `SY_ACCOUNT_SETTLEMENT_MONTH` (`SETTLEMENT_MONTH`) USING BTREE,
		KEY `SY_ACCOUNT_SETTLE_DEPART_ID` (`SETTLE_DEPART_ID`) USING BTREE,
		KEY `SY_ACCOUNT_EMP_IDCARD` (`EMP_IDCARD`) USING BTREE,
		KEY `SY_ACCOUNT_EMP_NAME` (`EMP_NAME`) USING BTREE,
		KEY `SY_ACCOUNT_INVOICETITLE` (`INVOICE_TITLE`) USING BTREE
		) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='工资报账年度表'
	</update>

	<delete id="deleteSalaryAccountYearByMonth" >
		delete from ${tableName} where SETTLEMENT_MONTH = #{lastMonth};
	</delete>

	<!-- 插入2021表 -->
	<insert id="insertIntoSalaryAccountYear">
		insert into ${tableName}  (
			select
				a.id,a.INVOICE_TITLE,a.EMP_ID,a.EMP_NAME,a.EMP_IDCARD,
				a.DEPT_ID SETTLE_DEPART_ID,a.DEPT_NO SETTLE_DEPART_NO,a.DEPT_NAME SETTLE_DEPART_NAME,a.SETTLEMENT_MONTH,a.TAX_MONTH,
				ifnull(sum(relaySalary.SALARY_MONEY),0) REAL_SALARY,
				ifnull(max(costReduction.SALARY_MONEY),0) cost_reduction,
				ifnull(max(specialDeduMoney.SALARY_MONEY),0) SPECIAL_DEDU_MONEY,
				ifnull(max(sumChildEduMoney.SALARY_MONEY),0) child_eduInfo_money,
				ifnull(max(sumHousingLoanMoney.SALARY_MONEY),0) housing_loan_Interest_expense_money,
				ifnull(max(sumHousingRentMoney.SALARY_MONEY),0) housing_rentalInfo_money,
				ifnull(max(sumContinuingEducationMoney.SALARY_MONEY),0) continuing_education_expense_money,
				ifnull(max(sumSupportElderlyMoney.SALARY_MONEY),0) support_elderly_expense_money,
				ifnull(sum(personalSocial.SALARY_MONEY),0) PERSONAL_SOCIAL,
				ifnull(sum(personalFund.SALARY_MONEY),0) PERSONAL_FUND,
				ifnull(sum(withholidingPersonSocial.SALARY_MONEY),0) withholiding_person_social,
				ifnull(sum(withholidingPersonFund.SALARY_MONEY),0) withholiding_person_fund,
				ifnull(sum(enterpriseAnnuity.SALARY_MONEY),0) enterprise_annuity,
				ifnull(sum(salaryTax.SALARY_MONEY),0) salary_tax,
				ifnull(sum(actualSalarySum.SALARY_MONEY),0) actual_salary_sum,
				ifnull(sum(if(annualBonusTax.SALARY_MONEY > 0,annualBonus.SALARY_MONEY,0)),0) annual_bonus,
				ifnull(sum(annualBonusTax.SALARY_MONEY),0) annual_bonus_tax,
				ifnull(sum(exemptionPersionTax.SALARY_MONEY),0) exemption_persion_tax,
				s.unit_id,s.unit_no,s.unit_name,
				ifnull(max(sumBabyMoney.SALARY_MONEY),0) sum_baby_money,
				ifnull(max(sumPrivatePension.SALARY_MONEY),0) SUM_PRIVATE_PENSION,
				if(#{lastMonth} = DATE_FORMAT(e.CREATE_TIME,'%Y%m'),1,0) IS_NEW_EMPLOYEE,
				DATE_FORMAT(e.CREATE_TIME,'%Y%m') CREATE_MONTH,
				e.EMP_PHONE
			from t_salary_account a
					 left join t_salary_standard s on s.id = a.SALARY_FORM_ID
					 left join t_salary_employee e on e.id = a.EMP_ID
					 left join t_salary_account_item relaySalary on relaySalary.SALARY_ACCOUNT_ID = a.id and relaySalary.JAVA_FIED_NAME='relaySalary'
					 left join t_salary_account_item exemptionPersionTax on exemptionPersionTax.SALARY_ACCOUNT_ID = a.id and exemptionPersionTax.JAVA_FIED_NAME='exemptionPersionTax'
					 left join t_salary_account_item costReduction on costReduction.SALARY_ACCOUNT_ID = a.id and costReduction.JAVA_FIED_NAME='costReduction'
					 left join t_salary_account_item sumChildEduMoney on sumChildEduMoney.SALARY_ACCOUNT_ID = a.id and sumChildEduMoney.JAVA_FIED_NAME='sumChildEduMoney'
					 left join t_salary_account_item sumHousingLoanMoney on sumHousingLoanMoney.SALARY_ACCOUNT_ID = a.id and sumHousingLoanMoney.JAVA_FIED_NAME='sumHousingLoanMoney'
					 left join t_salary_account_item sumHousingRentMoney on sumHousingRentMoney.SALARY_ACCOUNT_ID = a.id and sumHousingRentMoney.JAVA_FIED_NAME='sumHousingRentMoney'
					 left join t_salary_account_item sumSupportElderlyMoney on sumSupportElderlyMoney.SALARY_ACCOUNT_ID = a.id and sumSupportElderlyMoney.JAVA_FIED_NAME='sumSupportElderlyMoney'
					 left join t_salary_account_item sumContinuingEducationMoney on sumContinuingEducationMoney.SALARY_ACCOUNT_ID = a.id and sumContinuingEducationMoney.JAVA_FIED_NAME='sumContinuingEducationMoney'
					 left join t_salary_account_item sumBabyMoney on sumBabyMoney.SALARY_ACCOUNT_ID = a.id and sumBabyMoney.JAVA_FIED_NAME='sumBabyMoney'
					 left join t_salary_account_item sumPrivatePension on sumPrivatePension.SALARY_ACCOUNT_ID = a.id and sumPrivatePension.JAVA_FIED_NAME='sumPrivatePension'
					 left join t_salary_account_item personalSocial on personalSocial.SALARY_ACCOUNT_ID = a.id and personalSocial.JAVA_FIED_NAME='personalSocial'
					 left join t_salary_account_item personalFund on personalFund.SALARY_ACCOUNT_ID = a.id and personalFund.JAVA_FIED_NAME='personalFund'
					 left join t_salary_account_item withholidingPersonSocial on withholidingPersonSocial.SALARY_ACCOUNT_ID = a.id and withholidingPersonSocial.JAVA_FIED_NAME='withholidingPersonSocial'
					 left join t_salary_account_item withholidingPersonFund on withholidingPersonFund.SALARY_ACCOUNT_ID = a.id and withholidingPersonFund.JAVA_FIED_NAME='withholidingPersonFund'
					 left join t_salary_account_item actualSalarySum on actualSalarySum.SALARY_ACCOUNT_ID = a.id and actualSalarySum.JAVA_FIED_NAME='actualSalarySum'
					 left join t_salary_account_item salaryTax on salaryTax.SALARY_ACCOUNT_ID = a.id and salaryTax.JAVA_FIED_NAME='salaryTax'
					 left join t_salary_account_item specialDeduMoney on specialDeduMoney.SALARY_ACCOUNT_ID = a.id and specialDeduMoney.JAVA_FIED_NAME='specialDeduMoney'
					 left join t_salary_account_item enterpriseAnnuity on enterpriseAnnuity.SALARY_ACCOUNT_ID = a.id and enterpriseAnnuity.JAVA_FIED_NAME='enterpriseAnnuity'
					 left join t_salary_account_item annualBonusTax on annualBonusTax.SALARY_ACCOUNT_ID = a.id and annualBonusTax.JAVA_FIED_NAME='annualBonusTax'
					 left join t_salary_account_item annualBonus on annualBonus.SALARY_ACCOUNT_ID = a.id and annualBonus.JAVA_FIED_NAME='annualBonus'
			where
				a.SETTLEMENT_MONTH = #{lastMonth} and a.DELETE_FLAG = 0 and a.FORM_TYPE != '7' and a.FORM_TYPE != '3' and a.FORM_TYPE != '4' and s.DELETE_FLAG = 0
			GROUP BY a.EMP_IDCARD,a.INVOICE_TITLE,a.SETTLEMENT_MONTH)
	</insert>

</mapper>