Prechádzať zdrojové kódy

增加 动态单价,结算金额

wangyunpeng 1 mesiac pred
rodič
commit
46bbf7a620

+ 2 - 0
api-module/src/main/java/com/tzld/piaoquan/api/common/enums/ExceptionEnum.java

@@ -26,6 +26,8 @@ public enum ExceptionEnum {
     USER_NOT_EXIST(1008, "user not exist"),
     SmsCodeExpired(1010, "短信验证码无效"),
     ACCOUNT_NOT_EXISTS_WRONG(1011, "用户不存在"),
+    ACCOUNT_PRICE_ERROR(1012, "定价格式错误"),
+    ACCOUNT_PRICE_NULL_ERROR(1013, "定价不能为空"),
 
     // 合作账号
     GZH_EXISTS(2000, "公众号已由别的用户授权,该用户不能再授权此公众号,请联系平台运营"),

+ 35 - 0
api-module/src/main/java/com/tzld/piaoquan/api/common/enums/contentplatform/BussinessTypeEnum.java

@@ -0,0 +1,35 @@
+package com.tzld.piaoquan.api.common.enums.contentplatform;
+
+import lombok.Getter;
+
+import java.util.Objects;
+
+@Getter
+public enum BussinessTypeEnum {
+    GZH_AUTO_REPLY("gzh_autoReply", "gongzhonghaozidonghuifu", "公众号自动回复"),
+    FWH_PUSH("fwh_push", "fuwuhaodaiyunying", "服务号推送"),
+    QW("qw", "qiweihezuo", "企微"),
+
+    ;
+
+    private final String val;
+    private final String prefix;
+    private final String description;
+
+    BussinessTypeEnum(String val, String prefix, String description) {
+        this.val = val;
+        this.prefix = prefix;
+        this.description = description;
+    }
+
+    public static BussinessTypeEnum from(String val) {
+        for (BussinessTypeEnum typeEnum : BussinessTypeEnum.values()) {
+            if (Objects.equals(typeEnum.getVal(), val)) {
+                return typeEnum;
+            }
+        }
+        return null;
+    }
+
+
+}

+ 101 - 50
api-module/src/main/java/com/tzld/piaoquan/api/job/ContentPlatformDatastatJob.java

@@ -1,6 +1,9 @@
 package com.tzld.piaoquan.api.job;
 
+import com.alibaba.fastjson.JSONObject;
 import com.aliyun.odps.data.Record;
+import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
+import com.tzld.piaoquan.api.common.enums.contentplatform.BussinessTypeEnum;
 import com.tzld.piaoquan.api.component.AigcApiService;
 import com.tzld.piaoquan.api.dao.mapper.contentplatform.*;
 import com.tzld.piaoquan.api.dao.mapper.contentplatform.ext.ContentPlatformDataStatMapperExt;
@@ -14,7 +17,6 @@ import com.xxl.job.core.handler.annotation.XxlJob;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
 
@@ -54,11 +56,11 @@ public class ContentPlatformDatastatJob {
     @Autowired
     private ContentPlatformPlanService planService;
 
-    @Value("${unit.price.min:0.1}")
-    private Double unitPriceMin;
+    @ApolloJsonValue("${unit.price.min:{\"gzh_autoReply\":0.1,\"fwh_push\":0.1,\"qw\":0.15}}")
+    private Map<String, Double> unitPriceMinConfig;
 
-    @Value("${unit.price.max:0.2}")
-    private Double unitPriceMax;
+    @ApolloJsonValue("${unit.price.max:{\"gzh_autoReply\":0.2,\"fwh_push\":0.2,\"qw\":0.3}}")
+    private Map<String, Double> unitPriceMaxConfig;
 
 
     @XxlJob("syncContentPlatformGzhDatastatJob")
@@ -97,7 +99,7 @@ public class ContentPlatformDatastatJob {
             for (Record record : dataList) {
                 ContentPlatformGzhDataStat item = new ContentPlatformGzhDataStat();
                 String ghId = (String) record.get(1);
-                Integer firstLevelCount = Integer.valueOf((String) record.get(2));
+                int firstLevelCount = Integer.parseInt((String) record.get(2));
                 Integer fissionCount = parseInteger(record.get(3));
                 item.setDateStr(dt);
                 if (!ghIds.contains(ghId)) {
@@ -163,7 +165,7 @@ public class ContentPlatformDatastatJob {
             for (Record record : dataList) {
                 ContentPlatformGzhDataStatTotal item = new ContentPlatformGzhDataStatTotal();
                 String channel = record.getString(0);
-                Integer firstLevelCount = Integer.valueOf((String) record.get(1));
+                int firstLevelCount = Integer.parseInt((String) record.get(1));
                 Integer fissionCount = parseInteger(record.get(2));
                 Double arpu = parseDouble(record.get(3));
                 item.setDateStr(dt);
@@ -184,15 +186,15 @@ public class ContentPlatformDatastatJob {
                 item.setFansIncreaseCount(fansIncreaseCount);
 
                 if (fissionCount > 0 && firstLevelCount > 0) {
-                    BigDecimal num = BigDecimal.valueOf(fissionCount.doubleValue() / firstLevelCount);
-                    BigDecimal rounded = num.multiply(new BigDecimal(10)).setScale(2, RoundingMode.HALF_UP);
+                    BigDecimal fissionRate = BigDecimal.valueOf(fissionCount.doubleValue() / firstLevelCount);
+                    BigDecimal rounded = fissionRate.multiply(new BigDecimal(10)).setScale(2, RoundingMode.HALF_UP);
                     item.setScore(rounded.doubleValue());
-                    BigDecimal unitPrice = num.multiply(new BigDecimal(arpu)).multiply(BigDecimal.valueOf(account.getPrice()))
-                            .setScale(2, RoundingMode.HALF_UP)
-                            .min(BigDecimal.valueOf(unitPriceMax)).max(BigDecimal.valueOf(unitPriceMin));
-                    item.setUnitPrice(unitPrice.doubleValue());
-                    BigDecimal settlementAmount = unitPrice.multiply(new BigDecimal(firstLevelCount));
-                    item.setSettlementAmount(settlementAmount.doubleValue());
+                    Double unitPrice = getUnitPrice(account.getPrice(), fissionRate, arpu, BussinessTypeEnum.GZH_AUTO_REPLY);
+                    item.setUnitPrice(unitPrice);
+                    if (Objects.nonNull(unitPrice)) {
+                        Double settlementAmount = unitPrice * firstLevelCount;
+                        item.setSettlementAmount(settlementAmount);
+                    }
                 }
                 item.setCreateTimestamp(now);
                 saveList.add(item);
@@ -241,7 +243,7 @@ public class ContentPlatformDatastatJob {
             for (Record record : dataList) {
                 ContentPlatformFwhDataStat item = new ContentPlatformFwhDataStat();
                 String ghId = (String) record.get(0);
-                Integer firstLevelCount = Integer.valueOf((String) record.get(1));
+                int firstLevelCount = Integer.parseInt((String) record.get(1));
                 Integer fissionCount = parseInteger(record.get(2));
                 item.setDateStr(dt);
                 if (!ghIds.contains(ghId)) {
@@ -307,7 +309,7 @@ public class ContentPlatformDatastatJob {
             for (Record record : dataList) {
                 ContentPlatformFwhDataStatTotal item = new ContentPlatformFwhDataStatTotal();
                 String channel = record.getString(0);
-                Integer firstLevelCount = Integer.valueOf((String) record.get(1));
+                int firstLevelCount = Integer.parseInt((String) record.get(1));
                 Integer fissionCount = parseInteger(record.get(2));
                 Double arpu = parseDouble(record.get(3));
                 item.setDateStr(dt);
@@ -328,15 +330,15 @@ public class ContentPlatformDatastatJob {
                 item.setFansIncreaseCount(fansIncreaseCount);
 
                 if (fissionCount > 0 && firstLevelCount > 0) {
-                    BigDecimal num = BigDecimal.valueOf(fissionCount.doubleValue() / firstLevelCount);
-                    BigDecimal rounded = num.multiply(new BigDecimal(10)).setScale(2, RoundingMode.HALF_UP);
+                    BigDecimal fissionRate = BigDecimal.valueOf(fissionCount.doubleValue() / firstLevelCount);
+                    BigDecimal rounded = fissionRate.multiply(new BigDecimal(10)).setScale(2, RoundingMode.HALF_UP);
                     item.setScore(rounded.doubleValue());
-                    BigDecimal unitPrice = num.multiply(new BigDecimal(arpu)).multiply(BigDecimal.valueOf(account.getPrice()))
-                            .setScale(2, RoundingMode.HALF_UP)
-                            .min(BigDecimal.valueOf(unitPriceMax)).max(BigDecimal.valueOf(unitPriceMin));
-                    item.setUnitPrice(unitPrice.doubleValue());
-                    BigDecimal settlementAmount = unitPrice.multiply(new BigDecimal(firstLevelCount));
-                    item.setSettlementAmount(settlementAmount.doubleValue());
+                    Double unitPrice = getUnitPrice(account.getPrice(), fissionRate, arpu, BussinessTypeEnum.FWH_PUSH);
+                    item.setUnitPrice(unitPrice);
+                    if (Objects.nonNull(unitPrice)) {
+                        Double settlementAmount = unitPrice * firstLevelCount;
+                        item.setSettlementAmount(settlementAmount);
+                    }
                 }
                 item.setCreateTimestamp(now);
                 saveList.add(item);
@@ -518,19 +520,29 @@ public class ContentPlatformDatastatJob {
                 ContentPlatformAccount account = accountMap.get(channel);
                 if (Objects.isNull(account)) {
                     account = new ContentPlatformAccount();
-                    account.setPrice(1d);
+                    account.setPrice("{\n" +
+                            "\"qiweihezuo_price_mode\": \"static\",\n" +
+                            "\"qiweihezuo_dynamic_times\":3,\n" +
+                            "\"qiweihezuo_static_price\":0.12,\n" +
+                            "\"fuwuhaodaiyunying_price_mode\": \"dynamic\",\n" +
+                            "\"fuwuhaodaiyunying_dynamic_times\":3,\n" +
+                            "\"fuwuhaodaiyunying_static_price\":0.12,\n" +
+                            "\"gongzhonghaozidonghuifu_price_mode\": \"static\",\n" +
+                            "\"gongzhonghaozidonghuifu_dynamic_times\":3,\n" +
+                            "\"gongzhonghaozidonghuifu_static_price\":0.12\n" +
+                            "}");
                 }
 
                 if (fissionCount > 0 && firstLevelCount > 0) {
-                    BigDecimal num = BigDecimal.valueOf(fissionCount.doubleValue() / firstLevelCount);
-                    BigDecimal rounded = num.multiply(new BigDecimal(10)).setScale(2, RoundingMode.HALF_UP);
+                    BigDecimal fissionRate = BigDecimal.valueOf(fissionCount.doubleValue() / firstLevelCount);
+                    BigDecimal rounded = fissionRate.multiply(new BigDecimal(10)).setScale(2, RoundingMode.HALF_UP);
                     item.setScore(rounded.doubleValue());
-                    BigDecimal unitPrice = num.multiply(new BigDecimal(arpu)).multiply(BigDecimal.valueOf(account.getPrice()))
-                            .setScale(2, RoundingMode.HALF_UP)
-                            .min(BigDecimal.valueOf(unitPriceMax)).max(BigDecimal.valueOf(unitPriceMin));
-                    item.setUnitPrice(unitPrice.doubleValue());
-                    BigDecimal settlementAmount = unitPrice.multiply(new BigDecimal(firstLevelCount));
-                    item.setSettlementAmount(settlementAmount.doubleValue());
+                    Double unitPrice = getUnitPrice(account.getPrice(), fissionRate, arpu, BussinessTypeEnum.QW);
+                    item.setUnitPrice(unitPrice);
+                    if (Objects.nonNull(unitPrice)) {
+                        Double settlementAmount = unitPrice * firstLevelCount;
+                        item.setSettlementAmount(settlementAmount);
+                    }
                 }
                 item.setFirstLevelCount(item.getFirstLevelCount() + firstLevelCount);
                 item.setCreateTimestamp(now);
@@ -669,15 +681,15 @@ public class ContentPlatformDatastatJob {
                 item.setFirstLevelCount(firstLevelCount);
 
                 if (fissionCount > 0 && firstLevelCount > 0) {
-                    BigDecimal num = BigDecimal.valueOf(fissionCount.doubleValue() / firstLevelCount);
-                    BigDecimal rounded = num.multiply(new BigDecimal(10)).setScale(2, RoundingMode.HALF_UP);
+                    BigDecimal fissionRate = BigDecimal.valueOf(fissionCount.doubleValue() / firstLevelCount);
+                    BigDecimal rounded = fissionRate.multiply(new BigDecimal(10)).setScale(2, RoundingMode.HALF_UP);
                     item.setScore(rounded.doubleValue());
-                    BigDecimal unitPrice = num.multiply(new BigDecimal(arpu)).multiply(BigDecimal.valueOf(account.getPrice()))
-                            .setScale(2, RoundingMode.HALF_UP)
-                            .min(BigDecimal.valueOf(unitPriceMax)).max(BigDecimal.valueOf(unitPriceMin));
-                    item.setUnitPrice(unitPrice.doubleValue());
-                    BigDecimal settlementAmount = unitPrice.multiply(new BigDecimal(firstLevelCount));
-                    item.setSettlementAmount(settlementAmount.doubleValue());
+                    Double unitPrice = getUnitPrice(account.getPrice(), fissionRate, arpu, BussinessTypeEnum.QW);
+                    item.setUnitPrice(unitPrice);
+                    if (Objects.nonNull(unitPrice)) {
+                        Double settlementAmount = unitPrice * firstLevelCount;
+                        item.setSettlementAmount(settlementAmount);
+                    }
                 }
                 item.setCreateTimestamp(now);
                 saveList.add(item);
@@ -698,15 +710,15 @@ public class ContentPlatformDatastatJob {
                 item.setFirstLevelCount(firstLevelCount);
 
                 if (fissionCount > 0 && firstLevelCount > 0) {
-                    BigDecimal num = BigDecimal.valueOf(fissionCount.doubleValue() / firstLevelCount);
-                    BigDecimal rounded = num.multiply(new BigDecimal(10)).setScale(2, RoundingMode.HALF_UP);
+                    BigDecimal fissionRate = BigDecimal.valueOf(fissionCount.doubleValue() / firstLevelCount);
+                    BigDecimal rounded = fissionRate.multiply(new BigDecimal(10)).setScale(2, RoundingMode.HALF_UP);
                     item.setScore(rounded.doubleValue());
-                    BigDecimal unitPrice = num.multiply(new BigDecimal(arpu)).multiply(BigDecimal.valueOf(account.getPrice()))
-                            .setScale(2, RoundingMode.HALF_UP)
-                            .min(BigDecimal.valueOf(unitPriceMax)).max(BigDecimal.valueOf(unitPriceMin));
-                    item.setUnitPrice(unitPrice.doubleValue());
-                    BigDecimal settlementAmount = unitPrice.multiply(new BigDecimal(firstLevelCount));
-                    item.setSettlementAmount(settlementAmount.doubleValue());
+                    Double unitPrice = getUnitPrice(account.getPrice(), fissionRate, arpu, BussinessTypeEnum.QW);
+                    item.setUnitPrice(unitPrice);
+                    if (Objects.nonNull(unitPrice)) {
+                        Double settlementAmount = unitPrice * firstLevelCount;
+                        item.setSettlementAmount(settlementAmount);
+                    }
                 }
                 item.setCreateTimestamp(now);
                 saveList.add(item);
@@ -741,4 +753,43 @@ public class ContentPlatformDatastatJob {
         }
     }
 
+    private Double getUnitPriceMin(BussinessTypeEnum typeEnum) {
+        return unitPriceMinConfig.get(typeEnum.getVal());
+    }
+
+    private Double getUnitPriceMax(BussinessTypeEnum typeEnum) {
+        return unitPriceMaxConfig.get(typeEnum.getVal());
+    }
+
+    private Double getUnitPrice(String price, BigDecimal fissionRate, Double arpu, BussinessTypeEnum typeEnum) {
+        JSONObject priceJSON;
+        try {
+            priceJSON = JSONObject.parseObject(price);
+        } catch (Exception e) {
+            return null;
+        }
+        String priceModeKey = typeEnum.getPrefix() + "_price_mode";
+        String staticPriceKey = typeEnum.getPrefix() + "_static_price";
+        String dynamicTimesKey = typeEnum.getPrefix() + "_dynamic_times";
+        String priceMode = priceJSON.getString(priceModeKey);
+        Double staticPrice = priceJSON.getDouble(staticPriceKey);
+        Double dynamicTimes = priceJSON.getDouble(dynamicTimesKey);
+        if ("static".equals(priceMode)) {
+            if (Objects.isNull(staticPrice) || staticPrice == 0) {
+                return null;
+            }
+            return staticPrice;
+        } else if ("dynamic".equals(priceMode)) {
+            if (Objects.isNull(fissionRate) || Objects.isNull(arpu) || Objects.isNull(dynamicTimes) || dynamicTimes == 0) {
+                return null;
+            }
+            BigDecimal unitPrice = fissionRate.multiply(new BigDecimal(arpu))
+                    .multiply(BigDecimal.valueOf(dynamicTimes))
+                    .setScale(2, RoundingMode.HALF_UP)
+                    .min(BigDecimal.valueOf(getUnitPriceMax(typeEnum)))
+                    .max(BigDecimal.valueOf(getUnitPriceMin(typeEnum)));
+            return unitPrice.doubleValue();
+        }
+        return null;
+    }
 }

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/model/param/contentplatform/AccountSaveParam.java

@@ -19,7 +19,7 @@ public class AccountSaveParam {
     @ApiModelProperty(value = "手机号")
     private String telNum;
     @ApiModelProperty(value = "定价系数")
-    private Double price;
+    private String price;
     @ApiModelProperty(value = "密码")
     private String password;
 

+ 3 - 3
api-module/src/main/java/com/tzld/piaoquan/api/model/po/contentplatform/ContentPlatformAccount.java

@@ -13,7 +13,7 @@ public class ContentPlatformAccount {
 
     private String telNum;
 
-    private Double price;
+    private String price;
 
     private String password;
 
@@ -79,11 +79,11 @@ public class ContentPlatformAccount {
         this.telNum = telNum;
     }
 
-    public Double getPrice() {
+    public String getPrice() {
         return price;
     }
 
-    public void setPrice(Double price) {
+    public void setPrice(String price) {
         this.price = price;
     }
 

+ 20 - 10
api-module/src/main/java/com/tzld/piaoquan/api/model/po/contentplatform/ContentPlatformAccountExample.java

@@ -525,52 +525,62 @@ public class ContentPlatformAccountExample {
             return (Criteria) this;
         }
 
-        public Criteria andPriceEqualTo(Double value) {
+        public Criteria andPriceEqualTo(String value) {
             addCriterion("price =", value, "price");
             return (Criteria) this;
         }
 
-        public Criteria andPriceNotEqualTo(Double value) {
+        public Criteria andPriceNotEqualTo(String value) {
             addCriterion("price <>", value, "price");
             return (Criteria) this;
         }
 
-        public Criteria andPriceGreaterThan(Double value) {
+        public Criteria andPriceGreaterThan(String value) {
             addCriterion("price >", value, "price");
             return (Criteria) this;
         }
 
-        public Criteria andPriceGreaterThanOrEqualTo(Double value) {
+        public Criteria andPriceGreaterThanOrEqualTo(String value) {
             addCriterion("price >=", value, "price");
             return (Criteria) this;
         }
 
-        public Criteria andPriceLessThan(Double value) {
+        public Criteria andPriceLessThan(String value) {
             addCriterion("price <", value, "price");
             return (Criteria) this;
         }
 
-        public Criteria andPriceLessThanOrEqualTo(Double value) {
+        public Criteria andPriceLessThanOrEqualTo(String value) {
             addCriterion("price <=", value, "price");
             return (Criteria) this;
         }
 
-        public Criteria andPriceIn(List<Double> values) {
+        public Criteria andPriceLike(String value) {
+            addCriterion("price like", value, "price");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceNotLike(String value) {
+            addCriterion("price not like", value, "price");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceIn(List<String> values) {
             addCriterion("price in", values, "price");
             return (Criteria) this;
         }
 
-        public Criteria andPriceNotIn(List<Double> values) {
+        public Criteria andPriceNotIn(List<String> values) {
             addCriterion("price not in", values, "price");
             return (Criteria) this;
         }
 
-        public Criteria andPriceBetween(Double value1, Double value2) {
+        public Criteria andPriceBetween(String value1, String value2) {
             addCriterion("price between", value1, value2, "price");
             return (Criteria) this;
         }
 
-        public Criteria andPriceNotBetween(Double value1, Double value2) {
+        public Criteria andPriceNotBetween(String value1, String value2) {
             addCriterion("price not between", value1, value2, "price");
             return (Criteria) this;
         }

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/model/vo/contentplatform/AccountLoginVO.java

@@ -19,7 +19,7 @@ public class AccountLoginVO {
     @ApiModelProperty(value = "手机号")
     private String telNum;
     @ApiModelProperty(value = "定价系数")
-    private Double price;
+    private String price;
     @ApiModelProperty(value = "创建时间")
     private Long createTimestamp;
     @ApiModelProperty(value = "token")

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/model/vo/contentplatform/AccountVO.java

@@ -19,7 +19,7 @@ public class AccountVO {
 	@ApiModelProperty(value = "手机号")
 	private String telNum;
 	@ApiModelProperty(value = "定价系数")
-	private Double price;
+	private String price;
 	@ApiModelProperty(value = "状态 1-正常 0-封禁")
 	private Integer status;
 	@ApiModelProperty(value = "创建时间")

+ 9 - 0
api-module/src/main/java/com/tzld/piaoquan/api/service/contentplatform/impl/ContentPlatformAccountServiceImpl.java

@@ -1,6 +1,7 @@
 package com.tzld.piaoquan.api.service.contentplatform.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.tzld.piaoquan.api.common.enums.ExceptionEnum;
 import com.tzld.piaoquan.api.common.enums.contentplatform.AccountStatusEnum;
 import com.tzld.piaoquan.api.common.exception.CommonException;
@@ -195,6 +196,14 @@ public class ContentPlatformAccountServiceImpl implements ContentPlatformAccount
         if (!StringUtils.hasText(param.getChannel())) {
             throw new CommonException(ExceptionEnum.CHANNEL_NULL_WRONG);
         }
+        try {
+            JSONObject.parseObject(param.getPrice());
+        } catch (Exception e) {
+            throw new CommonException(ExceptionEnum.ACCOUNT_PRICE_ERROR);
+        }
+        if (!StringUtils.hasText(param.getPrice())) {
+            throw new CommonException(ExceptionEnum.ACCOUNT_PRICE_NULL_ERROR);
+        }
         Long now = System.currentTimeMillis();
         ContentPlatformAccount account = new ContentPlatformAccount();
         account.setName(param.getName());

+ 7 - 7
api-module/src/main/resources/mapper/contentplatform/ContentPlatformAccountMapper.xml

@@ -8,7 +8,7 @@
     <result column="channel" jdbcType="VARCHAR" property="channel" />
     <result column="contact_name" jdbcType="VARCHAR" property="contactName" />
     <result column="tel_num" jdbcType="VARCHAR" property="telNum" />
-    <result column="price" jdbcType="DOUBLE" property="price" />
+    <result column="price" jdbcType="VARCHAR" property="price" />
     <result column="password" jdbcType="VARCHAR" property="password" />
     <result column="token" jdbcType="VARCHAR" property="token" />
     <result column="token_expire_timestamp" jdbcType="BIGINT" property="tokenExpireTimestamp" />
@@ -123,7 +123,7 @@
       )
     values (#{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{identity,jdbcType=INTEGER}, 
       #{channel,jdbcType=VARCHAR}, #{contactName,jdbcType=VARCHAR}, #{telNum,jdbcType=VARCHAR}, 
-      #{price,jdbcType=DOUBLE}, #{password,jdbcType=VARCHAR}, #{token,jdbcType=VARCHAR}, 
+      #{price,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{token,jdbcType=VARCHAR}, 
       #{tokenExpireTimestamp,jdbcType=BIGINT}, #{status,jdbcType=INTEGER}, #{createAccount,jdbcType=VARCHAR}, 
       #{createTimestamp,jdbcType=BIGINT}, #{updateAccount,jdbcType=VARCHAR}, #{updateTimestamp,jdbcType=BIGINT}
       )
@@ -197,7 +197,7 @@
         #{telNum,jdbcType=VARCHAR},
       </if>
       <if test="price != null">
-        #{price,jdbcType=DOUBLE},
+        #{price,jdbcType=VARCHAR},
       </if>
       <if test="password != null">
         #{password,jdbcType=VARCHAR},
@@ -253,7 +253,7 @@
         tel_num = #{record.telNum,jdbcType=VARCHAR},
       </if>
       <if test="record.price != null">
-        price = #{record.price,jdbcType=DOUBLE},
+        price = #{record.price,jdbcType=VARCHAR},
       </if>
       <if test="record.password != null">
         `password` = #{record.password,jdbcType=VARCHAR},
@@ -292,7 +292,7 @@
       channel = #{record.channel,jdbcType=VARCHAR},
       contact_name = #{record.contactName,jdbcType=VARCHAR},
       tel_num = #{record.telNum,jdbcType=VARCHAR},
-      price = #{record.price,jdbcType=DOUBLE},
+      price = #{record.price,jdbcType=VARCHAR},
       `password` = #{record.password,jdbcType=VARCHAR},
       token = #{record.token,jdbcType=VARCHAR},
       token_expire_timestamp = #{record.tokenExpireTimestamp,jdbcType=BIGINT},
@@ -324,7 +324,7 @@
         tel_num = #{telNum,jdbcType=VARCHAR},
       </if>
       <if test="price != null">
-        price = #{price,jdbcType=DOUBLE},
+        price = #{price,jdbcType=VARCHAR},
       </if>
       <if test="password != null">
         `password` = #{password,jdbcType=VARCHAR},
@@ -360,7 +360,7 @@
       channel = #{channel,jdbcType=VARCHAR},
       contact_name = #{contactName,jdbcType=VARCHAR},
       tel_num = #{telNum,jdbcType=VARCHAR},
-      price = #{price,jdbcType=DOUBLE},
+      price = #{price,jdbcType=VARCHAR},
       `password` = #{password,jdbcType=VARCHAR},
       token = #{token,jdbcType=VARCHAR},
       token_expire_timestamp = #{tokenExpireTimestamp,jdbcType=BIGINT},