소스 검색

Merge branch 'release_toaliyun_real_202208' of https://git.malls.iformall.com/server/formallProject into release_toaliyun_real_202208

release_toaliyun_real
xhxu 3 년 전
부모
커밋
10dfb0ec70
11개의 변경된 파일1653개의 추가작업 그리고 114개의 파일을 삭제
  1. +3
    -4
      mallinkAdmin/src/main/java/com/iformall/controller/basic/WxProjectConfigController.java
  2. +1633
    -0
      mallinkAdmin/src/main/resources/db/migration/V2022080800001_pay_v3.sql
  3. +0
    -2
      mallinkService/src/main/java/com/iformall/domain/po/WxAppinfo.java
  4. +0
    -27
      mallinkService/src/main/java/com/iformall/domain/po/WxPayAccountBill.java
  5. +2
    -1
      mallinkService/src/main/java/com/iformall/enums/EnumPayVersion.java
  6. +2
    -4
      mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java
  7. +1
    -9
      mallinkService/src/main/java/com/iformall/service/impl/WxPayAccountBillServiceImpl.java
  8. +10
    -6
      mallinkService/src/main/java/com/iformall/service/impl/WxPayBillServiceImpl.java
  9. +0
    -13
      mallinkService/src/main/java/com/iformall/service/impl/WxProjectConfigServiceImpl.java
  10. +1
    -5
      mallinkService/src/main/resources/mapper/WxAppinfoMapper.xml
  11. +1
    -43
      mallinkService/src/main/resources/mapper/WxPayAccountBillMapper.xml

+ 3
- 4
mallinkAdmin/src/main/java/com/iformall/controller/basic/WxProjectConfigController.java 파일 보기

@@ -293,10 +293,9 @@ public class WxProjectConfigController extends BaseController {
WxPayAccount wxPayAccount = wxPayAccountService.getById(appinfo.getPayId()); WxPayAccount wxPayAccount = wxPayAccountService.getById(appinfo.getPayId());
map.put("wxPayAccount",wxPayAccount); map.put("wxPayAccount",wxPayAccount);
} }
if(appinfo.getPayBillId() != null){
WxPayAccountBill wxPayAccountBill = wxPayAccountBillService.getById(appinfo.getPayBillId());
map.put("wxPayAccountBill",wxPayAccountBill);
}
WxPayAccountBill wxPayAccountBill = wxPayAccountBillService.getByTenantInfo(this.getTenantInfo());
map.put("wxPayAccountBill",wxPayAccountBill);


return new ResultData(map); return new ResultData(map);
}catch (Exception e){ }catch (Exception e){


+ 1633
- 0
mallinkAdmin/src/main/resources/db/migration/V2022080800001_pay_v3.sql
파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
파일 보기


+ 0
- 2
mallinkService/src/main/java/com/iformall/domain/po/WxAppinfo.java 파일 보기

@@ -40,8 +40,6 @@ public class WxAppinfo extends BaseTenantEntity {
private Integer type; private Integer type;
@io.swagger.annotations.ApiModelProperty(value="模板类型",name="mouldType") @io.swagger.annotations.ApiModelProperty(value="模板类型",name="mouldType")
private Integer mouldType; private Integer mouldType;
@io.swagger.annotations.ApiModelProperty(value="支付ID,参看wx_pay_account_bill",name="payBillId")
private Long payBillId;
@io.swagger.annotations.ApiModelProperty(value="是否启用(0:启用,1禁用)",name="enable") @io.swagger.annotations.ApiModelProperty(value="是否启用(0:启用,1禁用)",name="enable")
private Integer enable; private Integer enable;
@io.swagger.annotations.ApiModelProperty(value="app平台 EnumAppPlat ",name="plat") @io.swagger.annotations.ApiModelProperty(value="app平台 EnumAppPlat ",name="plat")


+ 0
- 27
mallinkService/src/main/java/com/iformall/domain/po/WxPayAccountBill.java 파일 보기

@@ -15,26 +15,6 @@ import lombok.EqualsAndHashCode;
public class WxPayAccountBill extends TenantEntity { public class WxPayAccountBill extends TenantEntity {


protected Long id; protected Long id;

@io.swagger.annotations.ApiModelProperty(value="微信商户号/特约服务商号",name="mchId")
private String mchId;
@io.swagger.annotations.ApiModelProperty(value="微信服务商号",name="subMchId")
private String subMchId;
@io.swagger.annotations.ApiModelProperty(value="支付密钥",name="apiKey")
private String apiKey;
@io.swagger.annotations.ApiModelProperty(value="微信回调,支持3种回调,(1.url/pay 2.url/refund3.url/separate)",name="notifyUrl")
private String notifyUrl;
@io.swagger.annotations.ApiModelProperty(value="证书本地存放位置",name="certPath")
private String certPath;
@io.swagger.annotations.ApiModelProperty(value="商户模式-0:普通商户模式1:服务商模式",name="type")
private Integer type;
@io.swagger.annotations.ApiModelProperty(value="是否开启分账(0:未开启分账1:开启分账)",name="type")
private Boolean share;
@io.swagger.annotations.ApiModelProperty(value="手续费(万分之几,默认60)",name="rate")
private Integer rate;
@io.swagger.annotations.ApiModelProperty(value="实际手续费(万分之几,默认60)",name="realRate")
private Integer realRate;

@io.swagger.annotations.ApiModelProperty(value="接收账户名",name="bankAccountName") @io.swagger.annotations.ApiModelProperty(value="接收账户名",name="bankAccountName")
private String bankAccountName; private String bankAccountName;
@io.swagger.annotations.ApiModelProperty(value="接收银行卡号",name="bankCardId") @io.swagger.annotations.ApiModelProperty(value="接收银行卡号",name="bankCardId")
@@ -44,13 +24,6 @@ public class WxPayAccountBill extends TenantEntity {
// 甲方开户银行 // 甲方开户银行
private String bankName; private String bankName;


public String getPayNotifyUrl() {
return notifyUrl + "/pay";
}
public String getRefundNotifyUrl() {
return notifyUrl + "/refund";
}

@io.swagger.annotations.ApiModelProperty(value="手续费费率",name="serviceChargeRate") @io.swagger.annotations.ApiModelProperty(value="手续费费率",name="serviceChargeRate")
private Integer serviceChargeRate; private Integer serviceChargeRate;




+ 2
- 1
mallinkService/src/main/java/com/iformall/enums/EnumPayVersion.java 파일 보기

@@ -9,7 +9,8 @@ public enum EnumPayVersion {
WX_PAY_V3(2, "微信支付3.0,对接电商收付通"), WX_PAY_V3(2, "微信支付3.0,对接电商收付通"),
DY_PAY_V2(3,"抖音支付2.0,对接商品库"), DY_PAY_V2(3,"抖音支付2.0,对接商品库"),
NEU_POS_V1(4,"东软POS支付1.0版本"), NEU_POS_V1(4,"东软POS支付1.0版本"),
NO_VERSION(5,"无需支付,无版本")
NO_VERSION(5,"无需支付,无版本"),
ALI_PAY_V1(6,"支付宝支付1.0")
; ;


public static EnumPayVersion getEnum(Integer code) { public static EnumPayVersion getEnum(Integer code) {


+ 2
- 4
mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java 파일 보기

@@ -102,23 +102,21 @@ public class WxAppinfoServiceImpl implements WxAppinfoService {
public void wxAppinfoInit(String tenantId, Long payId, Long payBillId, WxProjectConfig wxProjectConfig) { public void wxAppinfoInit(String tenantId, Long payId, Long payBillId, WxProjectConfig wxProjectConfig) {
WxAppinfo wxAppinfo = new WxAppinfo(); WxAppinfo wxAppinfo = new WxAppinfo();
wxAppinfo.setTenantId(tenantId); wxAppinfo.setTenantId(tenantId);
wxAppinfo.setType(1);
wxAppinfo.setType(EnumAppType.B.getCode());
wxAppinfo.setAppId(wxProjectConfig.getAppIdB()); wxAppinfo.setAppId(wxProjectConfig.getAppIdB());
wxAppinfo.setParentAppId(wxProjectConfig.getParentAppId()); wxAppinfo.setParentAppId(wxProjectConfig.getParentAppId());
wxAppinfo.setName(wxProjectConfig.getAppNameB()); wxAppinfo.setName(wxProjectConfig.getAppNameB());
wxAppinfo.setSecret(wxProjectConfig.getAppSecretB()); wxAppinfo.setSecret(wxProjectConfig.getAppSecretB());
wxAppinfo.setPayId(payId); wxAppinfo.setPayId(payId);
wxAppinfo.setPayBillId(payBillId);
wxAppinfoMapper.insert(wxAppinfo); wxAppinfoMapper.insert(wxAppinfo);
wxAppinfo = new WxAppinfo(); wxAppinfo = new WxAppinfo();
wxAppinfo.setTenantId(tenantId); wxAppinfo.setTenantId(tenantId);
wxAppinfo.setType(2);
wxAppinfo.setType(EnumAppType.C.getCode());
wxAppinfo.setAppId(wxProjectConfig.getAppIdC()); wxAppinfo.setAppId(wxProjectConfig.getAppIdC());
wxAppinfo.setParentAppId(wxProjectConfig.getParentAppId()); wxAppinfo.setParentAppId(wxProjectConfig.getParentAppId());
wxAppinfo.setName(wxProjectConfig.getAppNameC()); wxAppinfo.setName(wxProjectConfig.getAppNameC());
wxAppinfo.setSecret(wxProjectConfig.getAppSecretC()); wxAppinfo.setSecret(wxProjectConfig.getAppSecretC());
wxAppinfo.setPayId(payId); wxAppinfo.setPayId(payId);
wxAppinfo.setPayBillId(payBillId);
wxAppinfoMapper.insert(wxAppinfo); wxAppinfoMapper.insert(wxAppinfo);
} }




+ 1
- 9
mallinkService/src/main/java/com/iformall/service/impl/WxPayAccountBillServiceImpl.java 파일 보기

@@ -32,16 +32,8 @@ public class WxPayAccountBillServiceImpl implements WxPayAccountBillService {
@Override @Override
public Long wxPayAccountInit(WxPayAccount wxPayAccount) { public Long wxPayAccountInit(WxPayAccount wxPayAccount) {
WxPayAccountBill wxPayAccountBill = new WxPayAccountBill(); WxPayAccountBill wxPayAccountBill = new WxPayAccountBill();
wxPayAccountBill.setParentTenantId(wxPayAccount.getParentTenantId());
wxPayAccountBill.setTenantId(wxPayAccount.getTenantId()); wxPayAccountBill.setTenantId(wxPayAccount.getTenantId());
wxPayAccountBill.setMchId(wxPayAccount.getMchId());
wxPayAccountBill.setSubMchId(wxPayAccount.getSubMchId());
wxPayAccountBill.setApiKey(wxPayAccount.getApiKey());
wxPayAccountBill.setNotifyUrl(wxPayAccount.getNotifyUrl());
wxPayAccountBill.setCertPath(wxPayAccount.getCertPath());
wxPayAccountBill.setType(wxPayAccount.getType());
wxPayAccountBill.setShare(!(wxPayAccount.getShare() == 0));
wxPayAccountBill.setRate(wxPayAccount.getRate());
wxPayAccountBill.setRealRate(wxPayAccount.getRealRate());
wxPayAccountBillMapper.insert(wxPayAccountBill); wxPayAccountBillMapper.insert(wxPayAccountBill);
return wxPayAccountBill.getId(); return wxPayAccountBill.getId();
} }


+ 10
- 6
mallinkService/src/main/java/com/iformall/service/impl/WxPayBillServiceImpl.java 파일 보기

@@ -11,6 +11,7 @@ import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.WxBillSettle; import com.iformall.domain.po.WxBillSettle;
import com.iformall.domain.po.WxMerchant; import com.iformall.domain.po.WxMerchant;
import com.iformall.domain.po.WxMerchantBUser; import com.iformall.domain.po.WxMerchantBUser;
import com.iformall.domain.po.WxPayAccount;
import com.iformall.domain.po.WxPayAccountBill; import com.iformall.domain.po.WxPayAccountBill;
import com.iformall.domain.po.WxPayBill; import com.iformall.domain.po.WxPayBill;
import com.iformall.domain.vo.WxBillAll; import com.iformall.domain.vo.WxBillAll;
@@ -48,6 +49,9 @@ public class WxPayBillServiceImpl implements WxPayBillService {


@Autowired @Autowired
WxPayAccountBillMapper wxPayAccountBillMapper; WxPayAccountBillMapper wxPayAccountBillMapper;
@Autowired
WxPayAccountMapper wxPayAccountMapper;


@Autowired @Autowired
WxPayBillMapper wxPayBillMapper; WxPayBillMapper wxPayBillMapper;
@@ -128,7 +132,7 @@ public class WxPayBillServiceImpl implements WxPayBillService {
return new ResultData(ErrorCode.BILL_OWE_ZERO); return new ResultData(ErrorCode.BILL_OWE_ZERO);
} }
//获取支付账户信息 //获取支付账户信息
WxPayAccountBill payAccount = wxPayAccountBillMapper.selectById(appInfo.getPayBillId());
WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId());
Date currentDate = new Date(); Date currentDate = new Date();
String payBillNo; String payBillNo;
WxPayBill billParam= new WxPayBill(); WxPayBill billParam= new WxPayBill();
@@ -358,7 +362,7 @@ public class WxPayBillServiceImpl implements WxPayBillService {


private String wechatPayBillQuery(WxAppinfo appInfo, WxPayBill record) { private String wechatPayBillQuery(WxAppinfo appInfo, WxPayBill record) {
// get payAccount // get payAccount
WxPayAccountBill payAccount = wxPayAccountBillMapper.selectById(appInfo.getPayBillId());
WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId());
if (payAccount.getType().equals(EnumPayMode.MCH.getCode())) { if (payAccount.getType().equals(EnumPayMode.MCH.getCode())) {
// 普通商户号模式 // 普通商户号模式
WxPayOrderQ payBillQ = new WxPayOrderQ(); WxPayOrderQ payBillQ = new WxPayOrderQ();
@@ -455,7 +459,7 @@ public class WxPayBillServiceImpl implements WxPayBillService {


private String wechatPayBillClose(WxAppinfo appInfo, WxPayBill record) { private String wechatPayBillClose(WxAppinfo appInfo, WxPayBill record) {
// get payAccount // get payAccount
WxPayAccountBill payAccount = wxPayAccountBillMapper.selectById(appInfo.getPayBillId());
WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId());
if (payAccount.getType().equals(EnumPayMode.MCH.getCode())) { if (payAccount.getType().equals(EnumPayMode.MCH.getCode())) {
// 普通商户号模式 // 普通商户号模式
WxPayOrderQ payBillC = new WxPayOrderQ(); WxPayOrderQ payBillC = new WxPayOrderQ();
@@ -480,7 +484,7 @@ public class WxPayBillServiceImpl implements WxPayBillService {
} }
} }


private String closeOrderServer(WxPayAccountBill payAccount, WxPayOrderSQ payBillSC) {
private String closeOrderServer(WxPayAccount payAccount, WxPayOrderSQ payBillSC) {
try { try {
Map map = BeanUtils.toStringMap(payBillSC); Map map = BeanUtils.toStringMap(payBillSC);
payBillSC.setSign(WxPayment.createSignHMAC(map, payAccount.getApiKey())); payBillSC.setSign(WxPayment.createSignHMAC(map, payAccount.getApiKey()));
@@ -494,7 +498,7 @@ public class WxPayBillServiceImpl implements WxPayBillService {
} }
} }


private String closeOrderNormal(WxPayAccountBill payAccount, WxPayOrderQ payBillC) {
private String closeOrderNormal(WxPayAccount payAccount, WxPayOrderQ payBillC) {
try { try {
Map map = BeanUtils.toStringMap(payBillC); Map map = BeanUtils.toStringMap(payBillC);
payBillC.setSign(WxPayment.createSign(map, payAccount.getApiKey())); payBillC.setSign(WxPayment.createSign(map, payAccount.getApiKey()));
@@ -599,7 +603,7 @@ public class WxPayBillServiceImpl implements WxPayBillService {
isNormal = false; isNormal = false;
} }


WxPayAccountBill payAccount = wxPayAccountBillMapper.selectById(appinfo.getPayBillId());
WxPayAccount payAccount = wxPayAccountMapper.selectById(appinfo.getPayId());
if (payAccount == null) { if (payAccount == null) {
throw new MallinkException(ErrorCode.MCH_INFO_NOT_FOUND); throw new MallinkException(ErrorCode.MCH_INFO_NOT_FOUND);
} }


+ 0
- 13
mallinkService/src/main/java/com/iformall/service/impl/WxProjectConfigServiceImpl.java 파일 보기

@@ -201,20 +201,8 @@ public class WxProjectConfigServiceImpl implements WxProjectConfigService {
wxPayAccountService.saveOrUpdate(wxPayAccount); wxPayAccountService.saveOrUpdate(wxPayAccount);


WxPayAccountBill wxPayAccountBill = new WxPayAccountBill(); WxPayAccountBill wxPayAccountBill = new WxPayAccountBill();
if(appinfo.getPayBillId() != null){
wxPayAccountBill.setId(appinfo.getPayBillId());
}
wxPayAccountBill.updateTenantInfo(wxPayAccount); wxPayAccountBill.updateTenantInfo(wxPayAccount);
wxPayAccountBill.setServiceChargeRate(0); wxPayAccountBill.setServiceChargeRate(0);
wxPayAccountBill.setMchId(wxPayAccount.getMchId());
wxPayAccountBill.setSubMchId(wxPayAccount.getSubMchId());
wxPayAccountBill.setApiKey(wxPayAccount.getApiKey());
wxPayAccountBill.setNotifyUrl(wxPayAccount.getNotifyUrl().replaceAll("/wxPay/","/wxPayBill/"));
wxPayAccountBill.setCertPath(wxPayAccount.getCertPath());
wxPayAccountBill.setType(wxPayAccount.getType());
wxPayAccountBill.setShare(!(wxPayAccount.getShare() == 0));
wxPayAccountBill.setRate(wxPayAccount.getRate());
wxPayAccountBill.setRealRate(wxPayAccount.getRealRate());
wxPayAccountBillService.saveOrUpdate(wxPayAccountBill); wxPayAccountBillService.saveOrUpdate(wxPayAccountBill);


if(appinfo.getPayId() == null){ if(appinfo.getPayId() == null){
@@ -222,7 +210,6 @@ public class WxProjectConfigServiceImpl implements WxProjectConfigService {
updApp.updateTenantInfo(appinfo); updApp.updateTenantInfo(appinfo);
updApp.setId(appinfo.getId()); updApp.setId(appinfo.getId());
updApp.setPayId(wxPayAccount.getId()); updApp.setPayId(wxPayAccount.getId());
updApp.setPayBillId(wxPayAccountBill.getId());
} }
} }




+ 1
- 5
mallinkService/src/main/resources/mapper/WxAppinfoMapper.xml 파일 보기

@@ -17,7 +17,6 @@
<result column="pay_id" jdbcType="BIGINT" property="payId"/> <result column="pay_id" jdbcType="BIGINT" property="payId"/>
<result column="type" jdbcType="INTEGER" property="type"/> <result column="type" jdbcType="INTEGER" property="type"/>
<result column="mould_type" jdbcType="INTEGER" property="mouldType"/> <result column="mould_type" jdbcType="INTEGER" property="mouldType"/>
<result column="pay_bill_id" jdbcType="BIGINT" property="payBillId"/>
<result column="enable" jdbcType="INTEGER" property="enable"/> <result column="enable" jdbcType="INTEGER" property="enable"/>
<result column="plat" jdbcType="INTEGER" property="plat"/> <result column="plat" jdbcType="INTEGER" property="plat"/>
<result column="sort_url" jdbcType="VARCHAR" property="sortUrl"/> <result column="sort_url" jdbcType="VARCHAR" property="sortUrl"/>
@@ -31,7 +30,7 @@
<sql id="allColumns"> <sql id="allColumns">
`id`,`tenant_id`,`app_id`,`parent_app_id`,`name`, `id`,`tenant_id`,`app_id`,`parent_app_id`,`name`,
`secret`,`token`,`aes_key`,`msg_data_format`,`access_token`,`last_token_time`,`expires_in`, `secret`,`token`,`aes_key`,`msg_data_format`,`access_token`,`last_token_time`,`expires_in`,
`pay_id`,`type`,`mould_type`,`pay_bill_id`,`enable`,`plat`,`sort_url`,`business_license`,`icp`
`pay_id`,`type`,`mould_type`,`enable`,`plat`,`sort_url`,`business_license`,`icp`
</sql> </sql>


<sql id="dynamicWhereConditions"> <sql id="dynamicWhereConditions">
@@ -90,9 +89,6 @@
<if test=" null != type "> <if test=" null != type ">
and `type` = #{type} and `type` = #{type}
</if> </if>
<if test=" null != payBillId ">
and `pay_bill_id` = #{payBillId}
</if>
<if test=" null != plat "> <if test=" null != plat ">
and `plat` = #{plat} and `plat` = #{plat}
</if> </if>


+ 1
- 43
mallinkService/src/main/resources/mapper/WxPayAccountBillMapper.xml 파일 보기

@@ -5,15 +5,6 @@
<id column="id" jdbcType="BIGINT" property="id"/> <id column="id" jdbcType="BIGINT" property="id"/>
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId" /> <result column="tenant_id" jdbcType="VARCHAR" property="tenantId" />
<result column="parent_tenant_id" jdbcType="VARCHAR" property="parentTenantId" /> <result column="parent_tenant_id" jdbcType="VARCHAR" property="parentTenantId" />
<result column="mch_id" jdbcType="VARCHAR" property="mchId"/>
<result column="sub_mch_id" jdbcType="VARCHAR" property="subMchId"/>
<result column="api_key" jdbcType="VARCHAR" property="apiKey"/>
<result column="notify_url" jdbcType="VARCHAR" property="notifyUrl"/>
<result column="cert_path" jdbcType="VARCHAR" property="certPath"/>
<result column="type" jdbcType="INTEGER" property="type"/>
<result column="share" jdbcType="INTEGER" property="share"/>
<result column="rate" jdbcType="INTEGER" property="rate"/>
<result column="real_rate" jdbcType="INTEGER" property="realRate"/>
<result column="bank_account_name" jdbcType="VARCHAR" property="bankAccountName"/> <result column="bank_account_name" jdbcType="VARCHAR" property="bankAccountName"/>
<result column="bank_card_id" jdbcType="VARCHAR" property="bankCardId"/> <result column="bank_card_id" jdbcType="VARCHAR" property="bankCardId"/>
<result column="social_credit_code" jdbcType="VARCHAR" property="socialCreditCode"/> <result column="social_credit_code" jdbcType="VARCHAR" property="socialCreditCode"/>
@@ -22,8 +13,7 @@
</resultMap> </resultMap>


<sql id="allColumns"> <sql id="allColumns">
`id`,`tenant_id`,`parent_tenant_id`,`mch_id`,`sub_mch_id`,`api_key`,`notify_url`,`cert_path`,
`type`,`share`,`rate`,`real_rate`,`service_charge_rate`
`id`,`tenant_id`,`parent_tenant_id`,`bank_account_name`,`bank_card_id`,`social_credit_code`,`bank_name`,`service_charge_rate`
</sql> </sql>


<sql id="dynamicWhereConditions"> <sql id="dynamicWhereConditions">
@@ -39,38 +29,6 @@
<if test=" null != parentTenantId and '' != parentTenantId"> <if test=" null != parentTenantId and '' != parentTenantId">
and `parent_tenant_id` = #{parentTenantId} and `parent_tenant_id` = #{parentTenantId}
</if> </if>

<if test=" null != mchId ">
and `mch_id` = #{mchId}
</if>

<if test=" null != subMchId ">
and `sub_mch_id` = #{subMchId}
</if>

<if test=" null != apiKey ">
and `api_key` like concat('%', #{apiKey},'%')
</if>

<if test=" null != notifyUrl ">
and `notify_url` like concat('%', #{notifyUrl},'%')
</if>

<if test=" null != certPath ">
and `cert_path` like concat('%', #{certPath},'%')
</if>
<if test=" null != type ">
and `type` = #{type}
</if>
<if test=" null != share ">
and `share` = #{share}
</if>
<if test=" null != rate ">
and `rate` = #{rate}
</if>
<if test=" null != realRate ">
and `real_rate` = #{realRate}
</if>
<if test=" null != ids "> <if test=" null != ids ">
and id in and id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">


불러오는 중...
취소
저장