Authored by mingdan.ge

提现扣税

... ... @@ -9,10 +9,13 @@ public class UnionShareSettlement extends BaseBO {
private String settlementCode;
private BigDecimal settlementAmount;
private BigDecimal settlementAmount;//提现金额
private BigDecimal taxAmount;//扣税金额
private BigDecimal afterTaxAmount;//税后打款金额
private String settlementAmountStr;
private String taxAmountStr;
private String afterTaxAmountStr;
private Integer settlementTime;
private String settlementTimeStr;
... ... @@ -155,6 +158,38 @@ public class UnionShareSettlement extends BaseBO {
this.bankBranch = bankBranch;
}
public BigDecimal getTaxAmount() {
return taxAmount;
}
public void setTaxAmount(BigDecimal taxAmount) {
this.taxAmount = taxAmount;
}
public BigDecimal getAfterTaxAmount() {
return afterTaxAmount;
}
public void setAfterTaxAmount(BigDecimal afterTaxAmount) {
this.afterTaxAmount = afterTaxAmount;
}
public String getTaxAmountStr() {
return taxAmountStr;
}
public void setTaxAmountStr(String taxAmountStr) {
this.taxAmountStr = taxAmountStr;
}
public String getAfterTaxAmountStr() {
return afterTaxAmountStr;
}
public void setAfterTaxAmountStr(String afterTaxAmountStr) {
this.afterTaxAmountStr = afterTaxAmountStr;
}
@Override
public String toString() {
return "UnionShareSettlement{" +
... ... @@ -162,6 +197,10 @@ public class UnionShareSettlement extends BaseBO {
", settlementCode='" + settlementCode + '\'' +
", settlementAmount=" + settlementAmount +
", settlementAmountStr='" + settlementAmountStr + '\'' +
", taxAmount=" + taxAmount +
", taxAmountStr='" + taxAmountStr + '\'' +
", afterTaxAmount=" + afterTaxAmount +
", afterTaxAmountStr='" + afterTaxAmountStr + '\'' +
", settlementTime=" + settlementTime +
", settlementTimeStr='" + settlementTimeStr + '\'' +
", promoteUid=" + promoteUid +
... ...
... ... @@ -5,6 +5,8 @@
<id column="id" property="id" jdbcType="INTEGER" />
<result column="settlement_code" property="settlementCode" jdbcType="VARCHAR" />
<result column="settlement_amount" property="settlementAmount" jdbcType="DECIMAL" />
<result column="tax_mount" property="taxAmount" jdbcType="DECIMAL" />
<result column="after_tax_amount" property="afterTaxAmount" jdbcType="DECIMAL" />
<result column="settlement_time" property="settlementTime" jdbcType="INTEGER" />
<result column="promote_uid" property="promoteUid" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
... ... @@ -16,7 +18,7 @@
<result column="update_time" property="updateTime" jdbcType="INTEGER" />
</resultMap>
<sql id="Base_Column_List" >
id, settlement_code, settlement_amount, settlement_time, promote_uid, name,id_card_no,bank_card_no,bank_name,bank_branch, status, update_time
id, settlement_code, settlement_amount,tax_mount,after_tax_amount, settlement_time, promote_uid, name,id_card_no,bank_card_no,bank_name,bank_branch, status, update_time
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
... ... @@ -47,10 +49,10 @@
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.yoho.unions.dal.model.UnionShareSettlement" >
insert into union_share_settlement (id, settlement_code, settlement_amount,
insert into union_share_settlement (id, settlement_code, settlement_amount, tax_mount, after_tax_amount,
settlement_time, promote_uid, name,id_card_no,bank_card_no,bank_name,bank_branch, status,
update_time)
values (#{id,jdbcType=INTEGER}, #{settlementCode,jdbcType=VARCHAR}, #{settlementAmount,jdbcType=DECIMAL},
values (#{id,jdbcType=INTEGER}, #{settlementCode,jdbcType=VARCHAR}, #{settlementAmount,jdbcType=DECIMAL}, #{taxAmount,jdbcType=DECIMAL}, #{afterTaxAmount,jdbcType=DECIMAL},
#{settlementTime,jdbcType=INTEGER}, #{promoteUid,jdbcType=INTEGER},#{name,jdbcType=VARCHAR},#{idCardNo,jdbcType=VARCHAR},
#{bankCardNo,jdbcType=VARCHAR},#{bankName,jdbcType=VARCHAR},#{bankBranch,jdbcType=VARCHAR}, #{status,jdbcType=TINYINT},
#{updateTime,jdbcType=INTEGER})
... ... @@ -67,6 +69,12 @@
<if test="settlementAmount != null" >
settlement_amount,
</if>
<if test="taxAmount != null" >
tax_mount,
</if>
<if test="afterTaxAmount != null" >
after_tax_amount,
</if>
<if test="settlementTime != null" >
settlement_time,
</if>
... ... @@ -105,6 +113,12 @@
<if test="settlementAmount != null" >
#{settlementAmount,jdbcType=DECIMAL},
</if>
<if test="taxAmount != null" >
#{taxAmount,jdbcType=DECIMAL},
</if>
<if test="afterTaxAmount != null" >
#{afterTaxAmount,jdbcType=DECIMAL},
</if>
<if test="settlementTime != null" >
#{settlementTime,jdbcType=INTEGER},
</if>
... ... @@ -143,6 +157,12 @@
<if test="settlementAmount != null" >
settlement_amount = #{settlementAmount,jdbcType=DECIMAL},
</if>
<if test="taxAmount != null" >
tax_mount = #{taxAmount,jdbcType=DECIMAL},
</if>
<if test="afterTaxAmount != null" >
after_tax_amount = #{afterTaxAmount,jdbcType=DECIMAL},
</if>
<if test="settlementTime != null" >
settlement_time = #{settlementTime,jdbcType=INTEGER},
</if>
... ... @@ -171,6 +191,8 @@
update union_share_settlement
set settlement_code = #{settlementCode,jdbcType=VARCHAR},
settlement_amount = #{settlementAmount,jdbcType=DECIMAL},
tax_mount = #{taxAmount,jdbcType=DECIMAL},
after_tax_amount = #{afterTaxAmount,jdbcType=DECIMAL},
settlement_time = #{settlementTime,jdbcType=INTEGER},
promote_uid = #{promoteUid,jdbcType=INTEGER},
bank_card_no = #{bankCardNo,jdbcType=VARCHAR},
... ...
... ... @@ -3141,6 +3141,9 @@ public class UnionShareServiceImpl implements IUnionShareService,IBusinessExport
insertReq.setSettlementTime(updateTime);
insertReq.setUpdateTime(updateTime);
insertReq.setStatus((byte)1);//是否打款成功:1-处理中,2-已打款
//TODO 扣税和税后金额
insertReq.setTaxAmount(getsetTaxAmount(totalAmount));//扣税
insertReq.setAfterTaxAmount(totalAmount.subtract(insertReq.getTaxAmount()));//税后
int num=unionShareSettlementMapper.insertSelective(insertReq);
if (num < 1) {
settlementLog.warn("relateSettlementAndOrder end,uid is {},settlementCode is {},totalAmount is {},insert nothing.",uid,settlementCode,totalAmount);
... ... @@ -3195,6 +3198,30 @@ public class UnionShareServiceImpl implements IUnionShareService,IBusinessExport
return totalAmount;
}
//扣税金额计算
private BigDecimal getsetTaxAmount(BigDecimal amount) {
// 假设佣金为X
// 增值税(B) 城建税 教育费 地方教育 个人所得税 到手佣金
// (X/1.03)≤500 无税
// 500<(X/1.03)≤800 =F21 =B4*7% =B4*3% =B4*2% 0 =X-B4-C4-D4-E4-F4
// 800<(X/1.03)≤4000 =X/1.03*3% =B5*7% =B5*3% =B5*2% =(X/1.03-800)*20% =X-B5-C5-D5-E5-F5
// 4000<(X/1.03)≤20000 =X/1.03*3% =B6*7% =B6*3% =B6*2% =X/1.03*80%*20% =X-B6-C6-D6-E6-F6
// 20000<(X/1.03)≤50000 =X/1.03*3% =B7*7% =B7*3% =B7*2% =X/1.03*80%*30%-2000 =X-B7-C7-D7-E7-F7
// 50000<(X/1.03)≤100000 =X/1.03*3% =B8*7% =B8*3% =B8*2% =X/1.03*80%*40%-7000 =X-B8-C8-D8-E8-F8
// (X/1.03)>100000 =X/1.03*3% =B9*7% =B9*3% =B9*2% =X/1.03*80%*40%-7000 =X-B9-C9-D9-E9-F9
if (amount.compareTo(new BigDecimal(515))<1) {
return new BigDecimal(0);
}
if (amount.compareTo(new BigDecimal(824))<1) {
return amount.multiply(new BigDecimal(1)).divide(new BigDecimal("1.03")).setScale(2,BigDecimal.ROUND_DOWN);
}
if (amount.compareTo(new BigDecimal(103000))==1) {
return amount.multiply(new BigDecimal(1)).divide(new BigDecimal("1.03")).setScale(2,BigDecimal.ROUND_DOWN);
}
return null;
}
/**
* 提现结算单状态变更
* */
... ...