新增 0xA1并充相关逻辑

This commit is contained in:
Lemon
2025-06-16 15:59:44 +08:00
parent 0f9fdfb009
commit e9573b3ef2
11 changed files with 452 additions and 5 deletions

View File

@@ -104,6 +104,8 @@ public enum YKCFrameTypeCode {
UPLOAD_PILE_FAULT_RECORD_CODE(0xDB, "上传桩端故障记录"),
PILE_APPLY_MERGE_CHARGE_CODE(0xA1, "充电桩主动申请并充充电"),
// 自定义FrameType
PILE_LOG_OUT(9999, "充电桩退出"),

View File

@@ -0,0 +1,37 @@
package com.jsowell.common.enums.ykc;
/**
* 订单类型enum
*
* @author Lemon
* @Date 2025/6/16 13:59:20
*/
public enum OrderTypeEnum {
NORMAL_ORDER("1", "普通订单"),
MERGE_CHARGE_ORDER("2", "并充订单"),
;
private String value;
private String lable;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getLable() {
return lable;
}
public void setLable(String lable) {
this.lable = lable;
}
OrderTypeEnum(String value, String lable) {
this.value = value;
this.lable = lable;
}
}

View File

@@ -226,6 +226,8 @@ public enum ReturnCodeEnum {
CODE_SELECT_INFO_IS_NULL("00700001", "查询信息为空!"),
CODE_THIS_VIN_HAS_BEEN_BINDING("00700002", "该vin已被绑定请检查!"),
CODE_THIS_VIN_INFO_IS_NULL("007000003", "未查到该vin信息"),
;
private String value;

View File

@@ -0,0 +1,145 @@
package com.jsowell.netty.handler.yunkuaichong;
import com.google.common.primitives.Bytes;
import com.jsowell.common.core.domain.ykc.YKCDataProtocol;
import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode;
import com.jsowell.common.util.BytesUtil;
import com.jsowell.common.util.YKCUtils;
import com.jsowell.netty.factory.YKCOperateFactory;
import com.jsowell.pile.dto.VerifyMergeChargeOrderDTO;
import com.jsowell.pile.service.OrderBasicInfoService;
import io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* 0xA1 充电桩主动申请并充充电
*
* @author Lemon
* @Date 2025/6/12 11:37:36
*/
@Slf4j
@Component
public class PileApplyMergeChargeHandler extends AbstractYkcHandler{
private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.PILE_APPLY_MERGE_CHARGE_CODE.getBytes());
@Autowired
private OrderBasicInfoService orderBasicInfoService;
@Override
public void afterPropertiesSet() throws Exception {
YKCOperateFactory.register(type, this);
}
@Override
public byte[] supplyProcess(YKCDataProtocol ykcDataProtocol, ChannelHandlerContext channel) {
// 获取消息体
byte[] msgBody = ykcDataProtocol.getMsgBody();
int startIndex = 0;
int length = 7;
// 桩编号
byte[] pileSnByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
String pileSn = BytesUtil.binary(pileSnByteArr, 16);
// 保存时间
saveLastTimeAndCheckChannel(pileSn, channel);
// 枪号
startIndex += length;
length = 1;
byte[] connectorNumByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
String connectorCode = BytesUtil.bcd2Str(connectorNumByteArr);
// 启动方式
// 0x01 表示通过刷卡启动充电
// 0x02 表求通过帐号启动充电 (暂不支持)
// 0x03 表示vin码启动充电
startIndex += length;
byte[] startModeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
String startMode = BytesUtil.bcd2Str(startModeByteArr);
// 是否需要密码 0x00 不需要 0x01 需要
startIndex += length;
byte[] needPasswordFlagByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
String needPasswordFlag = BytesUtil.bcd2Str(needPasswordFlagByteArr);
// 物理卡号 不足 8 位补 0
startIndex += length;
length = 8;
byte[] cardNumByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
String physicsCard = BytesUtil.binary(cardNumByteArr, 16);
// 输入密码 对用户输入的密码进行16 位MD5 加密,采用小写上传
startIndex += length;
length = 16;
byte[] inputPasswordByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
String inputPasswordHexStr = BytesUtil.bin2HexStr(inputPasswordByteArr);
// VIN码
startIndex += length;
length = 17;
byte[] vinCodeByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
String vinCode = BytesUtil.ascii2StrLittle(vinCodeByteArr);
// 主辅枪标记
// 0x00 主枪
// 0x01 辅枪
startIndex += length;
length = 1;
byte[] connectorMarkByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
String connectorMark = BytesUtil.bcd2Str(connectorMarkByteArr);
// 并充序号
// 由桩生成:年月日时分秒,多个枪并充时上送并充序号一致,表示为同一次并充操作
startIndex += length;
length = 6;
byte[] mergeChargeNumberByteArr = BytesUtil.copyBytes(msgBody, startIndex, length);
String mergeChargeNumber = BytesUtil.bcd2Str(mergeChargeNumberByteArr);
// 鉴权方法(返回交易流水号、账户余额、鉴权成功标识)
String pileConnectorCode = pileSn + connectorCode;
VerifyMergeChargeOrderDTO dto = VerifyMergeChargeOrderDTO.builder()
.pileSn(pileSn)
.connectorCode(connectorCode)
.pileConnectorCode(pileConnectorCode)
.startMode(startMode)
.physicsCard(physicsCard)
.vinCode(vinCode)
.connectorMark(connectorMark)
.mergeChargeNumber(mergeChargeNumber)
.build();
try {
Map<String, Object> map = orderBasicInfoService.verifyMergeChargeOrder(dto);
} catch (Exception e) {
log.error("桩号:{}, 并充订单鉴权失败, ", pileSn, e);
}
String transactionCode = "";
String accountAmount = "";
String verifyFlag = "";
// 应答
// 交易流水号
// 桩编号
// 枪号
// 逻辑卡号
// 账户余额
// 鉴权成功标志
// 失败原因
// 并充序号
byte[] msgBodyByteArr = Bytes.concat(BytesUtil.str2Bcd(transactionCode), pileSnByteArr, connectorNumByteArr, cardNumByteArr,
BytesUtil.str2Bcd(accountAmount), BytesUtil.str2Bcd(verifyFlag), mergeChargeNumberByteArr);
return getResult(ykcDataProtocol, msgBodyByteArr);
}
}

View File

@@ -35,6 +35,21 @@ public class OrderBasicInfo {
*/
private String orderStatus;
/**
* 订单类型1-普通订单2-并充订单)
*/
private String orderType;
/**
* 并充订单序号
*/
private String mergeChargeNumber;
/**
* 主枪枪编号
*/
private String mainConnectorCode;
/**
* 会员id
*/

View File

@@ -88,6 +88,26 @@ public class GenerateOrderDTO extends BasicPileDTO{
*/
private MemberPlateNumberRelation MemberPlateNumberRelation;
/**
* 鉴权成功标识
*/
private boolean verifyFlag;
/**
* 订单类型1-普通订单2-并充订单)
*/
private String orderType;
/**
* 并充序号(并充启动时有值)
*/
private String mergeChargeNumber;
/**
* 主枪枪编码(并充启动时有值)
*/
private String mainConnectorCode;
/**
* 车牌号码
*/

View File

@@ -0,0 +1,47 @@
package com.jsowell.pile.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 鉴权并充订单DTO
*
* @author Lemon
* @Date 2025/6/12 14:32:38
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class VerifyMergeChargeOrderDTO {
// 桩编号
private String pileSn;
// 枪号
private String connectorCode;
// 枪口编号
private String pileConnectorCode;
// 启动方式
// 0x01 表示通过刷卡启动充电
// 0x03 表示vin码启动充电
private String startMode;
// 物理卡号
private String physicsCard;
// vin
private String vinCode;
// 主辅枪标记
// 0x00 主枪
// 0x01 辅枪
private String connectorMark;
// 并充序号
// 由桩生成:年月日时分秒,多个枪并充时上送并充序号一致,表示为同一次并充操作
private String mergeChargeNumber;
}

View File

@@ -566,4 +566,11 @@ public interface OrderBasicInfoService{
* @param dto
*/
void setOrderSupplementAmount(OrderSupplementAmountDTO dto);
/**
* 鉴权并充订单
* @param dto
* @return
*/
Map<String, Object> verifyMergeChargeOrder(VerifyMergeChargeOrderDTO dto) throws Exception;
}

View File

@@ -4542,6 +4542,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
.orderCode(orderCode)
.transactionCode(transactionCode)
.orderStatus(OrderStatusEnum.NOT_START.getValue())
.orderType(OrderTypeEnum.NORMAL_ORDER.getValue()) // 订单类型1-普通订单2-并充订单)
.memberId(dto.getMemberId())
.stationId(stationId)
.merchantId(merchantId)
@@ -4558,6 +4559,18 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
.settleAmount(BigDecimal.ZERO)
.startType(dto.getStartType())
.build();
if (StringUtils.equals(OrderTypeEnum.MERGE_CHARGE_ORDER.getValue(), dto.getOrderType())) {
// 并充订单
orderBasicInfo.setOrderType(dto.getOrderType());
if (StringUtils.isNotBlank(dto.getMergeChargeNumber())) {
// 并充订单序号
orderBasicInfo.setMergeChargeNumber(dto.getMergeChargeNumber());
}
if (StringUtils.isNotBlank(dto.getMainConnectorCode())) {
// 主枪枪编号
orderBasicInfo.setMainConnectorCode(dto.getMainConnectorCode());
}
}
if (StringUtils.equals(dto.getStartMode(), StartModeEnum.AUTH_CARD.getValue())) {
// 鉴权卡启动
orderBasicInfo.setLogicCard(dto.getPileAuthCardInfo().getLogicCard());
@@ -5122,5 +5135,55 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
logger.info("设置订单待补缴金额, orderCode:{}, supplementAmount:{}, 备注:{}", dto.getOrderCode(), dto.getSupplementAmount(), dto.getRemark());
}
/**
* 鉴权并充订单
* @param dto
* @return
*/
@Override
public Map<String, Object> verifyMergeChargeOrder(VerifyMergeChargeOrderDTO dto) throws Exception {
Map<String, Object> map = new LinkedHashMap<>();
GenerateOrderDTO generateOrderDTO = new GenerateOrderDTO();
generateOrderDTO.setPileSn(dto.getPileSn());
generateOrderDTO.setConnectorCode(dto.getConnectorCode());
generateOrderDTO.setMergeChargeNumber(dto.getMergeChargeNumber());
// 判断是否为主枪
if (StringUtils.equals(Constants.DOUBLE_ZERO, dto.getConnectorMark())) {
// 主枪
generateOrderDTO.setMainConnectorCode(dto.getPileConnectorCode());
}
// 区分是卡还是vin充电
String startMode = dto.getStartMode();
if (StringUtils.equals(Constants.ZERO_ONE, startMode)) {
// 刷卡鉴权
// 根据卡号查询用户信息
String physicsCard = dto.getPhysicsCard();
PileAuthCard pileAuthCardInfo = pileAuthCardService.selectCardInfoByLogicCard(physicsCard);
if (pileAuthCardInfo == null) {
// 未查到此卡信息
throw new BusinessException(ReturnCodeEnum.CODE_THIS_CARD_HAS_NO_INFO);
}
generateOrderDTO.setPileAuthCardInfo(pileAuthCardInfo);
generateOrderDTO.setStartMode(StartModeEnum.AUTH_CARD.getValue());
generateOrderDTO.setMemberId(pileAuthCardInfo.getMemberId());
}else if (StringUtils.equals(Constants.ZERO_THREE, startMode)) {
// vin鉴权
// 根据vin查询绑定用户信息
String vinCode = dto.getVinCode();
MemberPlateNumberRelation memberInfo = memberPlateNumberRelationService.getMemberPlateInfoByVinCode(vinCode);
if (memberInfo == null) {
throw new BusinessException(ReturnCodeEnum.CODE_THIS_VIN_INFO_IS_NULL);
}
generateOrderDTO.setMemberPlateNumberRelation(memberInfo);
generateOrderDTO.setStartMode(StartModeEnum.VIN_CODE.getValue());
generateOrderDTO.setMemberId(memberInfo.getMemberId());
}
// 鉴权通过,生成订单启动充电
map = generateOrderByCard(generateOrderDTO);
return map;
}
}

View File

@@ -182,7 +182,10 @@
from member_wallet_info
where del_flag = '0'
and member_id = #{memberId,jdbcType=INTEGER}
and merchant_id = #{merchantId,jdbcType=VARCHAR}
<if test="merchantId != null">
and merchant_id = #{merchantId,jdbcType=VARCHAR}
</if>
</select>
<select id="selectByMemberWalletList" resultMap="BaseResultMap">

View File

@@ -8,6 +8,9 @@
<result column="order_code" jdbcType="VARCHAR" property="orderCode"/>
<result column="transaction_code" jdbcType="VARCHAR" property="transactionCode"/>
<result column="order_status" jdbcType="VARCHAR" property="orderStatus"/>
<result column="order_type" jdbcType="VARCHAR" property="orderType"/>
<result column="merge_charge_number" jdbcType="VARCHAR" property="mergeChargeNumber"/>
<result column="main_connector_code" jdbcType="VARCHAR" property="mainConnectorCode"/>
<result column="member_id" jdbcType="VARCHAR" property="memberId"/>
<result column="station_id" jdbcType="VARCHAR" property="stationId"/>
<result column="merchant_id" jdbcType="VARCHAR" property="merchantId"/>
@@ -50,7 +53,7 @@
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, order_code, transaction_code, order_status, member_id, station_id, merchant_id,
id, order_code, transaction_code, order_status, order_type, merge_charge_number, main_connector_code, member_id, station_id, merchant_id,
pile_sn, connector_code, pile_connector_code, logic_card, vin_code, start_mode, third_party_type,
pay_mode, pay_status, pay_amount, pay_time, plate_number, order_amount, virtual_amount,
group_code, discount_amount, settle_amount, actual_received_amount, remedial_amount, charge_start_time, charge_end_time,
@@ -73,7 +76,7 @@
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.jsowell.pile.domain.OrderBasicInfo"
useGeneratedKeys="true">
<!--@mbg.generated-->
insert into order_basic_info (order_code, transaction_code, order_status,
insert into order_basic_info (order_code, transaction_code, order_status, order_type, merge_charge_number, main_connector_code,
member_id, station_id, merchant_id,
pile_sn, connector_code, pile_connector_code,
logic_card, vin_code, start_mode,
@@ -89,6 +92,7 @@
update_by, update_time, del_flag
)
values (#{orderCode,jdbcType=VARCHAR}, #{transactionCode,jdbcType=VARCHAR}, #{orderStatus,jdbcType=VARCHAR},
#{orderType,jdbcType=VARCHAR}, #{mergeChargeNumber,jdbcType=VARCHAR}, #{mainConnectorCode,jdbcType=VARCHAR},
#{memberId,jdbcType=VARCHAR}, #{stationId,jdbcType=VARCHAR}, #{merchantId,jdbcType=VARCHAR},
#{pileSn,jdbcType=VARCHAR}, #{connectorCode,jdbcType=VARCHAR}, #{pileConnectorCode,jdbcType=VARCHAR},
#{logicCard,jdbcType=VARCHAR}, #{vinCode,jdbcType=VARCHAR}, #{startMode,jdbcType=VARCHAR},
@@ -118,6 +122,15 @@
<if test="orderStatus != null">
order_status,
</if>
<if test="orderType != null">
order_type,
</if>
<if test="mergeChargeNumber != null">
merge_charge_number,
</if>
<if test="mainConnectorCode != null">
main_connector_code,
</if>
<if test="memberId != null">
member_id,
</if>
@@ -246,6 +259,15 @@
<if test="orderStatus != null">
#{orderStatus,jdbcType=VARCHAR},
</if>
<if test="orderType != null">
#{orderType,jdbcType=VARCHAR},
</if>
<if test="mergeChargeNumber != null">
#{mergeChargeNumber,jdbcType=VARCHAR},
</if>
<if test="mainConnectorCode != null">
#{mainConnectorCode,jdbcType=VARCHAR},
</if>
<if test="memberId != null">
#{memberId,jdbcType=VARCHAR},
</if>
@@ -378,6 +400,15 @@
<if test="orderStatus != null">
order_status = #{orderStatus,jdbcType=VARCHAR},
</if>
<if test="orderType != null">
order_type = #{orderType,jdbcType=VARCHAR},
</if>
<if test="mergeChargeNumber != null">
merge_charge_number = #{mergeChargeNumber,jdbcType=VARCHAR},
</if>
<if test="mainConnectorCode != null">
main_connector_code = #{mainConnectorCode,jdbcType=VARCHAR},
</if>
<if test="memberId != null">
member_id = #{memberId,jdbcType=VARCHAR},
</if>
@@ -504,6 +535,9 @@
set order_code = #{orderCode,jdbcType=VARCHAR},
transaction_code = #{transactionCode,jdbcType=VARCHAR},
order_status = #{orderStatus,jdbcType=VARCHAR},
order_type = #{orderType,jdbcType=VARCHAR},
merge_charge_number = #{mergeChargeNumber,jdbcType=VARCHAR},
main_connector_code = #{mainConnectorCode,jdbcType=VARCHAR},
member_id = #{memberId,jdbcType=VARCHAR},
station_id = #{stationId,jdbcType=VARCHAR},
merchant_id = #{merchantId,jdbcType=VARCHAR},
@@ -564,6 +598,21 @@
when id = #{item.id,jdbcType=INTEGER} then #{item.orderStatus,jdbcType=VARCHAR}
</foreach>
</trim>
<trim prefix="order_type = case" suffix="end,">
<foreach collection="list" index="index" item="item">
when id = #{item.id,jdbcType=INTEGER} then #{item.orderType,jdbcType=VARCHAR}
</foreach>
</trim>
<trim prefix="merge_charge_number = case" suffix="end,">
<foreach collection="list" index="index" item="item">
when id = #{item.id,jdbcType=INTEGER} then #{item.mergeChargeNumber,jdbcType=VARCHAR}
</foreach>
</trim>
<trim prefix="main_connector_code = case" suffix="end,">
<foreach collection="list" index="index" item="item">
when id = #{item.id,jdbcType=INTEGER} then #{item.mainConnectorCode,jdbcType=VARCHAR}
</foreach>
</trim>
<trim prefix="member_id = case" suffix="end,">
<foreach collection="list" index="index" item="item">
when id = #{item.id,jdbcType=INTEGER} then #{item.memberId,jdbcType=VARCHAR}
@@ -790,6 +839,27 @@
</if>
</foreach>
</trim>
<trim prefix="order_type = case" suffix="end,">
<foreach collection="list" index="index" item="item">
<if test="item.orderType != null">
when id = #{item.id,jdbcType=INTEGER} then #{item.orderType,jdbcType=VARCHAR}
</if>
</foreach>
</trim>
<trim prefix="merge_charge_number = case" suffix="end,">
<foreach collection="list" index="index" item="item">
<if test="item.mergeChargeNumber != null">
when id = #{item.id,jdbcType=INTEGER} then #{item.mergeChargeNumber,jdbcType=VARCHAR}
</if>
</foreach>
</trim>
<trim prefix="main_connector_code = case" suffix="end,">
<foreach collection="list" index="index" item="item">
<if test="item.mainConnectorCode != null">
when id = #{item.id,jdbcType=INTEGER} then #{item.mainConnectorCode,jdbcType=VARCHAR}
</if>
</foreach>
</trim>
<trim prefix="member_id = case" suffix="end,">
<foreach collection="list" index="index" item="item">
<if test="item.memberId != null">
@@ -1072,7 +1142,7 @@
<insert id="batchInsert" keyColumn="id" keyProperty="id" parameterType="map" useGeneratedKeys="true">
<!--@mbg.generated-->
insert into order_basic_info
(order_code, transaction_code, order_status, member_id, station_id, merchant_id,
(order_code, transaction_code, order_status, order_type, merge_charge_number, main_connector_code, member_id, station_id, merchant_id,
pile_sn, connector_code, pile_connector_code, logic_card, vin_code, start_mode,
third_party_type, pay_mode, pay_status, pay_amount, pay_time, plate_number, order_amount,
virtual_amount, group_code, discount_amount, settle_amount, actual_received_amount, remedial_amount, charge_start_time,
@@ -1083,7 +1153,7 @@
values
<foreach collection="list" item="item" separator=",">
(#{item.orderCode,jdbcType=VARCHAR}, #{item.transactionCode,jdbcType=VARCHAR},
#{item.orderStatus,jdbcType=VARCHAR},
#{item.orderStatus,jdbcType=VARCHAR}, #{item.orderType,jdbcType=VARCHAR}, #{item.mergeChargeNumber,jdbcType=VARCHAR}, #{item.mainConnectorCode,jdbcType=VARCHAR},
#{item.memberId,jdbcType=VARCHAR}, #{item.stationId,jdbcType=VARCHAR}, #{item.merchantId,jdbcType=VARCHAR},
#{item.pileSn,jdbcType=VARCHAR}, #{item.connectorCode,jdbcType=VARCHAR},
#{item.pileConnectorCode,jdbcType=VARCHAR},
@@ -1120,6 +1190,9 @@
order_code,
transaction_code,
order_status,
order_type,
merge_charge_number,
main_connector_code,
member_id,
station_id,
merchant_id,
@@ -1168,6 +1241,9 @@
#{orderCode,jdbcType=VARCHAR},
#{transactionCode,jdbcType=VARCHAR},
#{orderStatus,jdbcType=VARCHAR},
#{orderType,jdbcType=VARCHAR},
#{mergeChargeNumber,jdbcType=VARCHAR},
#{mainConnectorCode,jdbcType=VARCHAR},
#{memberId,jdbcType=VARCHAR},
#{stationId,jdbcType=VARCHAR},
#{merchantId,jdbcType=VARCHAR},
@@ -1216,6 +1292,9 @@
order_code = #{orderCode,jdbcType=VARCHAR},
transaction_code = #{transactionCode,jdbcType=VARCHAR},
order_status = #{orderStatus,jdbcType=VARCHAR},
order_type = #{orderType,jdbcType=VARCHAR},
merge_charge_number = #{mergeChargeNumber,jdbcType=VARCHAR},
main_connector_code = #{mainConnectorCode,jdbcType=VARCHAR},
member_id = #{memberId,jdbcType=VARCHAR},
station_id = #{stationId,jdbcType=VARCHAR},
merchant_id = #{merchantId,jdbcType=VARCHAR},
@@ -1274,6 +1353,15 @@
<if test="orderStatus != null">
order_status,
</if>
<if test="orderType != null">
order_type,
</if>
<if test="mergeChargeNumber != null">
merge_charge_number,
</if>
<if test="mainConnectorCode != null">
main_connector_code,
</if>
<if test="memberId != null">
member_id,
</if>
@@ -1406,6 +1494,15 @@
<if test="orderStatus != null">
#{orderStatus,jdbcType=VARCHAR},
</if>
<if test="orderType != null">
#{orderType,jdbcType=VARCHAR},
</if>
<if test="mergeChargeNumber != null">
#{mergeChargeNumber,jdbcType=VARCHAR},
</if>
<if test="mainConnectorCode != null">
#{mainConnectorCode,jdbcType=VARCHAR},
</if>
<if test="memberId != null">
#{memberId,jdbcType=VARCHAR},
</if>
@@ -1538,6 +1635,15 @@
<if test="orderStatus != null">
order_status = #{orderStatus,jdbcType=VARCHAR},
</if>
<if test="orderType != null">
order_type = #{orderType,jdbcType=VARCHAR},
</if>
<if test="mergeChargeNumber != null">
merge_charge_number = #{mergeChargeNumber,jdbcType=VARCHAR},
</if>
<if test="mainConnectorCode != null">
main_connector_code = #{mainConnectorCode,jdbcType=VARCHAR},
</if>
<if test="memberId != null">
member_id = #{memberId,jdbcType=VARCHAR},
</if>