增加软删除

This commit is contained in:
wuweihua
2026-10-12 09:52:24 +08:00
parent 5aba8af49d
commit d08485d738
25 changed files with 561 additions and 101 deletions
@@ -112,6 +112,7 @@ price.zone.countryCode.empty=国家编码不能为空,请检查 region.country
# 产品导入 BmsProduct # 产品导入 BmsProduct
price.product.codeDate.exists=同一产品代码与生效日期已存在,不能覆盖历史数据 price.product.codeDate.exists=同一产品代码与生效日期已存在,不能覆盖历史数据
price.product.effectiveDate.empty=生效日期不能为空 price.product.effectiveDate.empty=生效日期不能为空
price.redline.delete.pendingOnly=仅待生效红线价可删除,以下不符合:{0}
price.product.delete.pendingOnly=仅待生效产品可删除,以下不符合:{0} price.product.delete.pendingOnly=仅待生效产品可删除,以下不符合:{0}
price.product.import.effEmpty=缺少生效日期,已跳过 price.product.import.effEmpty=缺少生效日期,已跳过
price.product.import.effRequired=请选择生效时间 price.product.import.effRequired=请选择生效时间
@@ -31,7 +31,12 @@ public class BmsProduct extends BaseEntity
public static final String STATUS_PENDING = "0"; public static final String STATUS_PENDING = "0";
public static final String STATUS_ACTIVE = "1"; public static final String STATUS_ACTIVE = "1";
public static final String STATUS_EXPIRED = "2"; public static final String STATUS_EXPIRED = "2";
/** 0未删除 1已删除 */
public static final String IS_DEL_NO = "0";
public static final String IS_DEL_YES = "1";
private String status; private String status;
/** 0未删除 1已删除 */
private String isDel;
private String sourceSheet; private String sourceSheet;
/** FK prc_price_excel_file.pef_id */ /** FK prc_price_excel_file.pef_id */
private Long pefId; private Long pefId;
@@ -40,6 +40,10 @@ public class BmsProductCountry implements Serializable
private Date expireDate; private Date expireDate;
/** 0 pending, 1 active, 2 expired */ /** 0 pending, 1 active, 2 expired */
private String status; private String status;
/** 0未删除 1已删除 */
public static final String IS_DEL_NO = "0";
public static final String IS_DEL_YES = "1";
private String isDel;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime; private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -31,7 +31,12 @@ public class BmsRedlineProduct extends BaseEntity
public static final String STATUS_PENDING = "0"; public static final String STATUS_PENDING = "0";
public static final String STATUS_ACTIVE = "1"; public static final String STATUS_ACTIVE = "1";
public static final String STATUS_EXPIRED = "2"; public static final String STATUS_EXPIRED = "2";
/** 0未删除 1已删除 */
public static final String IS_DEL_NO = "0";
public static final String IS_DEL_YES = "1";
private String status; private String status;
/** 0未删除 1已删除 */
private String isDel;
private String sourceSheet; private String sourceSheet;
/** FK prc_price_excel_file.pef_id */ /** FK prc_price_excel_file.pef_id */
private Long pefId; private Long pefId;
@@ -38,6 +38,10 @@ public class BmsRedlineProductCountry implements Serializable
private Date expireDate; private Date expireDate;
/** 0 pending, 1 active, 2 expired */ /** 0 pending, 1 active, 2 expired */
private String status; private String status;
/** 0未删除 1已删除 */
public static final String IS_DEL_NO = "0";
public static final String IS_DEL_YES = "1";
private String isDel;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime; private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -24,6 +24,10 @@ public class PrcSurcharge extends BaseEntity
private String roundMode; private String roundMode;
/** on / of */ /** on / of */
private String ssCode; private String ssCode;
/** 0未删除 1已删除 */
public static final String IS_DEL_NO = "0";
public static final String IS_DEL_YES = "1";
private String isDel;
private String countryCode; private String countryCode;
private String scNote; private String scNote;
private Long tmsId; private Long tmsId;
@@ -37,6 +37,10 @@ public class PrcSurchargeRel extends BaseEntity
private String priceType; private String priceType;
/** 适用国家ISO2(空=全部),rel 表字段 */ /** 适用国家ISO2(空=全部),rel 表字段 */
private String countryCode; private String countryCode;
/** 0未删除 1已删除 */
public static final String IS_DEL_NO = "0";
public static final String IS_DEL_YES = "1";
private String isDel;
/** 附加费冗余展示字段 */ /** 附加费冗余展示字段 */
private String scName; private String scName;
@@ -23,10 +23,13 @@ public interface BmsProductCountryMapper
/** Import overlay: update price/zone/attrs on matched country row */ /** Import overlay: update price/zone/attrs on matched country row */
public int updateBmsProductCountryImport(BmsProductCountry country); public int updateBmsProductCountryImport(BmsProductCountry country);
/** Soft delete by product_id */
public int deleteByProductId(Long productId); public int deleteByProductId(Long productId);
/** Soft delete by product_code */
public int deleteByProductCode(String productCode); public int deleteByProductCode(String productCode);
/** Soft delete by product_code + effective_date */
public int deleteByProductCodeAndEffectiveDate( public int deleteByProductCodeAndEffectiveDate(
@Param("productCode") String productCode, @Param("productCode") String productCode,
@Param("effectiveDate") Date effectiveDate); @Param("effectiveDate") Date effectiveDate);
@@ -31,6 +31,7 @@ public interface BmsProductMapper
public int updateBmsProduct(BmsProduct product); public int updateBmsProduct(BmsProduct product);
/** Soft delete: set del_flag = 2 */
public int deleteBmsProductByIds(Long[] productIds); public int deleteBmsProductByIds(Long[] productIds);
/** Close previous open versions: expire_date = newEffectiveDate */ /** Close previous open versions: expire_date = newEffectiveDate */
@@ -39,6 +39,11 @@ public interface BmsRedlineProductCountryMapper
@Param("productCode") String productCode, @Param("productCode") String productCode,
@Param("newEffectiveDate") Date newEffectiveDate); @Param("newEffectiveDate") Date newEffectiveDate);
/** After deleting a pending version: reopen rows closed at that effective date */
public int reopenExpiredByProductCodeAndExpireDate(
@Param("productCode") String productCode,
@Param("expireDate") Date expireDate);
/** /**
* Close open rows for one product + country where effective_date < newEffectiveDate. * Close open rows for one product + country where effective_date < newEffectiveDate.
* Match by country_code when present, otherwise country_name. * Match by country_code when present, otherwise country_name.
@@ -39,6 +39,11 @@ public interface BmsRedlineProductMapper
@Param("newEffectiveDate") Date newEffectiveDate, @Param("newEffectiveDate") Date newEffectiveDate,
@Param("excludeId") Long excludeId); @Param("excludeId") Long excludeId);
/** After deleting a pending version: reopen rows closed at that effective date */
public int reopenExpiredByProductCodeAndExpireDate(
@Param("productCode") String productCode,
@Param("expireDate") Date expireDate);
/** Recompute status from effective_date / expire_date vs today */ /** Recompute status from effective_date / expire_date vs today */
public int refreshStatusByDates(); public int refreshStatusByDates();
} }
@@ -174,6 +174,9 @@ public class BmsRedlineProductServiceImpl implements IBmsRedlineProductService
{ {
return 0; return 0;
} }
List<Long> deletableIds = new ArrayList<Long>();
List<String> notPendingTips = new ArrayList<String>();
List<BmsRedlineProduct> toReopen = new ArrayList<BmsRedlineProduct>();
List<Long> relProductIds = new ArrayList<Long>(); List<Long> relProductIds = new ArrayList<Long>();
for (Long id : productIds) for (Long id : productIds)
{ {
@@ -182,19 +185,51 @@ public class BmsRedlineProductServiceImpl implements IBmsRedlineProductService
{ {
continue; continue;
} }
String liveStatus = resolveStoredStatus(p.getEffectiveDate(), p.getExpireDate());
if (!BmsRedlineProduct.STATUS_PENDING.equals(liveStatus))
{
String tip = p.getProductCode();
if (p.getEffectiveDate() != null)
{
tip = tip + "(" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(p.getEffectiveDate()) + ")";
}
notPendingTips.add(tip);
continue;
}
if (p.getProductId() != null) if (p.getProductId() != null)
{ {
countryMapper.deleteByProductId(p.getProductId()); countryMapper.deleteByProductId(p.getProductId());
relProductIds.add(p.getProductId()); relProductIds.add(p.getProductId());
} }
countryMapper.deleteByProductCodeAndEffectiveDate(p.getProductCode(), p.getEffectiveDate()); countryMapper.deleteByProductCodeAndEffectiveDate(p.getProductCode(), p.getEffectiveDate());
deletableIds.add(p.getProductId());
if (p.getEffectiveDate() != null)
{
toReopen.add(p);
}
}
if (!notPendingTips.isEmpty())
{
throw new ServiceException(MessageUtils.message("price.redline.delete.pendingOnly",
String.join("\u3001", notPendingTips)));
}
if (deletableIds.isEmpty())
{
return 0;
} }
if (!relProductIds.isEmpty()) if (!relProductIds.isEmpty())
{ {
// REDLINE rels bind redline_product.product_id (not shared with product catalog)
surchargeRelMapper.deleteByProductIdsAndPriceType(relProductIds, PrcSurchargeRel.PRICE_TYPE_REDLINE); surchargeRelMapper.deleteByProductIdsAndPriceType(relProductIds, PrcSurchargeRel.PRICE_TYPE_REDLINE);
} }
return productMapper.deleteBmsRedlineProductByIds(productIds); int rows = productMapper.deleteBmsRedlineProductByIds(deletableIds.toArray(new Long[0]));
for (BmsRedlineProduct p : toReopen)
{
productMapper.reopenExpiredByProductCodeAndExpireDate(p.getProductCode(), p.getEffectiveDate());
countryMapper.reopenExpiredByProductCodeAndExpireDate(p.getProductCode(), p.getEffectiveDate());
}
productMapper.refreshStatusByDates();
countryMapper.refreshStatusByDates();
return rows;
} }
@Override @Override
@@ -23,6 +23,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="effectiveDate" column="effective_date" /> <result property="effectiveDate" column="effective_date" />
<result property="expireDate" column="expire_date" /> <result property="expireDate" column="expire_date" />
<result property="status" column="status" /> <result property="status" column="status" />
<result property="isDel" column="is_del" />
<result property="createTime" column="create_time" /> <result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" /> <result property="updateTime" column="update_time" />
<result property="effectStatus" column="status" /> <result property="effectStatus" column="status" />
@@ -33,13 +34,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
c.zone_id, c.zone_code, c.zone_name, c.zone_id, c.zone_code, c.zone_name,
c.weight_min, c.weight_max, c.weight_min, c.weight_max,
c.freight_price, c.registration_fee, c.size_limit, c.last_mile, c.lead_time, c.freight_price, c.registration_fee, c.size_limit, c.last_mile, c.lead_time,
c.effective_date, c.expire_date, c.status, c.create_time, c.update_time c.effective_date, c.expire_date, c.status, c.is_del, c.create_time, c.update_time
from product_country c from product_country c
</sql> </sql>
<select id="selectBmsProductCountryList" parameterType="BmsProductCountry" resultMap="BmsProductCountryResult"> <select id="selectBmsProductCountryList" parameterType="BmsProductCountry" resultMap="BmsProductCountryResult">
<include refid="selectVo"/> <include refid="selectVo"/>
<where> <where>
and ifnull(c.is_del, '0') = '0'
<if test="productId != null"> <if test="productId != null">
AND c.product_id = #{productId} AND c.product_id = #{productId}
</if> </if>
@@ -85,12 +87,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
product_id, product_code, country_name, country_code, zone_id, zone_code, zone_name, product_id, product_code, country_name, country_code, zone_id, zone_code, zone_name,
weight_min, weight_max, weight_min, weight_max,
freight_price, registration_fee, size_limit, last_mile, lead_time, freight_price, registration_fee, size_limit, last_mile, lead_time,
effective_date, expire_date, status, create_time effective_date, expire_date, status, is_del, create_time
) values ( ) values (
#{productId}, #{productCode}, #{countryName}, #{countryCode}, #{zoneId}, #{zoneCode}, #{zoneName}, #{productId}, #{productCode}, #{countryName}, #{countryCode}, #{zoneId}, #{zoneCode}, #{zoneName},
#{weightMin}, #{weightMax}, #{weightMin}, #{weightMax},
#{freightPrice}, #{registrationFee}, #{sizeLimit}, #{lastMile}, #{leadTime}, #{freightPrice}, #{registrationFee}, #{sizeLimit}, #{lastMile}, #{leadTime},
#{effectiveDate}, #{expireDate}, IFNULL(#{status}, '0'), sysdate() #{effectiveDate}, #{expireDate}, IFNULL(#{status}, '0'), IFNULL(#{isDel}, '0'), sysdate()
) )
</insert> </insert>
@@ -132,33 +134,45 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where detail_id = #{detailId} where detail_id = #{detailId}
</update> </update>
<delete id="deleteByProductId" parameterType="Long"> <update id="deleteByProductId" parameterType="Long">
delete from product_country where product_id = #{productId} update product_country
</delete> set is_del = '1', update_time = sysdate()
where product_id = #{productId}
and ifnull(is_del, '0') = '0'
</update>
<delete id="deleteByProductCode" parameterType="String"> <update id="deleteByProductCode" parameterType="String">
delete from product_country where product_code = #{productCode} update product_country
</delete> set is_del = '1', update_time = sysdate()
where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
</update>
<delete id="deleteByProductCodes"> <update id="deleteByProductCodes">
delete from product_country where product_code in update product_country
set is_del = '1', update_time = sysdate()
where ifnull(is_del, '0') = '0'
and product_code in
<foreach item="code" collection="array" open="(" separator="," close=")"> <foreach item="code" collection="array" open="(" separator="," close=")">
#{code} #{code}
</foreach> </foreach>
</delete> </update>
<delete id="deleteByProductCodeAndEffectiveDate"> <update id="deleteByProductCodeAndEffectiveDate">
delete from product_country update product_country
set is_del = '1', update_time = sysdate()
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and ( and (
(#{effectiveDate} is null and effective_date is null) (#{effectiveDate} is null and effective_date is null)
or effective_date = #{effectiveDate} or effective_date = #{effectiveDate}
) )
</delete> </update>
<select id="selectMaxOpenEffectiveDate" resultType="java.util.Date"> <select id="selectMaxOpenEffectiveDate" resultType="java.util.Date">
select max(effective_date) from product_country select max(effective_date) from product_country
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date is null and expire_date is null
</select> </select>
@@ -167,6 +181,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
set expire_date = #{newEffectiveDate}, set expire_date = #{newEffectiveDate},
update_time = sysdate() update_time = sysdate()
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date is null and expire_date is null
and (effective_date is null or effective_date &lt; #{newEffectiveDate}) and (effective_date is null or effective_date &lt; #{newEffectiveDate})
</update> </update>
@@ -176,6 +191,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
set expire_date = null, set expire_date = null,
update_time = sysdate() update_time = sysdate()
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date = #{expireDate} and expire_date = #{expireDate}
</update> </update>
@@ -184,6 +200,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
set expire_date = #{newEffectiveDate}, set expire_date = #{newEffectiveDate},
update_time = sysdate() update_time = sysdate()
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date is null and expire_date is null
and (effective_date is null or effective_date &lt; #{newEffectiveDate}) and (effective_date is null or effective_date &lt; #{newEffectiveDate})
<choose> <choose>
@@ -203,21 +220,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
when effective_date is null or effective_date &gt; now() then '0' when effective_date is null or effective_date &gt; now() then '0'
else '1' else '1'
end end
where ifnull(is_del, '0') = '0'
</update> </update>
<delete id="deleteOpenByProductCodeAndEffectiveDate"> <update id="deleteOpenByProductCodeAndEffectiveDate">
delete from product_country update product_country
set is_del = '1', update_time = sysdate()
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date is null and expire_date is null
and ( and (
(#{effectiveDate} is null and effective_date is null) (#{effectiveDate} is null and effective_date is null)
or effective_date = #{effectiveDate} or effective_date = #{effectiveDate}
) )
</delete> </update>
<delete id="deleteOpenByProductCodeAndCountryOnDate"> <update id="deleteOpenByProductCodeAndCountryOnDate">
delete from product_country update product_country
set is_del = '1', update_time = sysdate()
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date is null and expire_date is null
and ( and (
(#{effectiveDate} is null and effective_date is null) (#{effectiveDate} is null and effective_date is null)
@@ -231,11 +253,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and country_name = #{countryName} and country_name = #{countryName}
</otherwise> </otherwise>
</choose> </choose>
</delete> </update>
<select id="selectMatchByProductCountryWeight" resultMap="BmsProductCountryResult"> <select id="selectMatchByProductCountryWeight" resultMap="BmsProductCountryResult">
<include refid="selectVo"/> <include refid="selectVo"/>
where c.product_code = #{productCode} where c.product_code = #{productCode}
and ifnull(c.is_del, '0') = '0'
and c.weight_min &lt;= #{weight} and c.weight_min &lt;= #{weight}
and c.weight_max &gt;= #{weight} and c.weight_max &gt;= #{weight}
<choose> <choose>
@@ -272,6 +295,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select count(1) select count(1)
from product_country from product_country
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and zone_code is not null and zone_code &lt;&gt; '' and zone_code is not null and zone_code &lt;&gt; ''
<choose> <choose>
<when test="countryCode != null and countryCode != ''"> <when test="countryCode != null and countryCode != ''">
@@ -296,6 +320,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectOpenByProductCode" resultMap="BmsProductCountryResult"> <select id="selectOpenByProductCode" resultMap="BmsProductCountryResult">
<include refid="selectVo"/> <include refid="selectVo"/>
where c.product_code = #{productCode} where c.product_code = #{productCode}
and ifnull(c.is_del, '0') = '0'
and c.expire_date is null and c.expire_date is null
order by c.country_name asc, c.zone_code asc, c.weight_min asc, c.detail_id asc order by c.country_name asc, c.zone_code asc, c.weight_min asc, c.detail_id asc
</select> </select>
@@ -304,14 +329,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
insert into product_country ( insert into product_country (
product_id, product_code, country_name, country_code, zone_id, zone_code, zone_name, product_id, product_code, country_name, country_code, zone_id, zone_code, zone_name,
weight_min, weight_max, freight_price, registration_fee, size_limit, last_mile, lead_time, weight_min, weight_max, freight_price, registration_fee, size_limit, last_mile, lead_time,
effective_date, expire_date, status, create_time effective_date, expire_date, status, is_del, create_time
) )
select select
#{productId}, product_code, country_name, country_code, zone_id, zone_code, zone_name, #{productId}, product_code, country_name, country_code, zone_id, zone_code, zone_name,
weight_min, weight_max, freight_price, registration_fee, size_limit, last_mile, lead_time, weight_min, weight_max, freight_price, registration_fee, size_limit, last_mile, lead_time,
#{effectiveDate}, null, IFNULL(#{status}, '0'), sysdate() #{effectiveDate}, null, IFNULL(#{status}, '0'), '0', sysdate()
from product_country from product_country
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date is null and expire_date is null
and (effective_date is null or effective_date &lt; #{effectiveDate}) and (effective_date is null or effective_date &lt; #{effectiveDate})
order by detail_id asc order by detail_id asc
@@ -16,6 +16,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="effectiveDate" column="effective_date" /> <result property="effectiveDate" column="effective_date" />
<result property="expireDate" column="expire_date" /> <result property="expireDate" column="expire_date" />
<result property="status" column="status" /> <result property="status" column="status" />
<result property="isDel" column="is_del" />
<result property="sourceSheet" column="source_sheet" /> <result property="sourceSheet" column="source_sheet" />
<result property="pefId" column="pef_id" /> <result property="pefId" column="pef_id" />
<result property="remark" column="remark" /> <result property="remark" column="remark" />
@@ -30,28 +31,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="selectBmsProductVo"> <sql id="selectBmsProductVo">
select p.product_id, p.product_code, p.product_name, p.service_level, p.cargo_attr, select p.product_id, p.product_code, p.product_name, p.service_level, p.cargo_attr,
p.dest_region, p.update_note, p.tax_mode, p.effective_date, p.expire_date, p.status, p.dest_region, p.update_note, p.tax_mode, p.effective_date, p.expire_date, p.status, p.is_del,
p.source_sheet, p.pef_id, p.remark, p.tms_id, p.created_by, p.create_time, p.updated_by, p.update_time, p.source_sheet, p.pef_id, p.remark, p.tms_id, p.created_by, p.create_time, p.updated_by, p.update_time,
(select count(distinct c.country_name) from product_country c (select count(distinct c.country_name) from product_country c
where c.product_id = p.product_id where ifnull(c.is_del, '0') = '0'
and (c.product_id = p.product_id
or (c.product_id is null and c.product_code = p.product_code or (c.product_id is null and c.product_code = p.product_code
and ( and (
(p.effective_date is null and c.effective_date is null) (p.effective_date is null and c.effective_date is null)
or c.effective_date = p.effective_date or c.effective_date = p.effective_date
)) )))
) as country_count, ) as country_count,
(select count(*) from prc_surcharge_rel r where r.product_id = p.product_id and r.price_type = 'PRODUCT') as surcharge_count (select count(*) from prc_surcharge_rel r
inner join prc_surcharge s on s.sc_id = r.sc_id and ifnull(s.is_del, '0') = '0'
where ifnull(r.is_del, '0') = '0'
and r.product_id = p.product_id and r.price_type = 'PRODUCT') as surcharge_count
from product p from product p
</sql> </sql>
<select id="selectBmsProductById" parameterType="Long" resultMap="BmsProductResult"> <select id="selectBmsProductById" parameterType="Long" resultMap="BmsProductResult">
<include refid="selectBmsProductVo"/> <include refid="selectBmsProductVo"/>
where p.product_id = #{productId} where p.product_id = #{productId}
and ifnull(p.is_del, '0') = '0'
</select> </select>
<select id="selectBmsProductByCode" parameterType="String" resultMap="BmsProductResult"> <select id="selectBmsProductByCode" parameterType="String" resultMap="BmsProductResult">
<include refid="selectBmsProductVo"/> <include refid="selectBmsProductVo"/>
where p.product_code = #{productCode} where p.product_code = #{productCode}
and ifnull(p.is_del, '0') = '0'
order by p.effective_date desc, p.product_id desc order by p.effective_date desc, p.product_id desc
limit 1 limit 1
</select> </select>
@@ -59,6 +66,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectBmsProductByCodeAndDate" resultMap="BmsProductResult"> <select id="selectBmsProductByCodeAndDate" resultMap="BmsProductResult">
<include refid="selectBmsProductVo"/> <include refid="selectBmsProductVo"/>
where p.product_code = #{productCode} where p.product_code = #{productCode}
and ifnull(p.is_del, '0') = '0'
<choose> <choose>
<when test="effectiveDate != null"> <when test="effectiveDate != null">
AND p.effective_date = #{effectiveDate} AND p.effective_date = #{effectiveDate}
@@ -73,6 +81,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectEffectiveBmsProductByCode" resultMap="BmsProductResult"> <select id="selectEffectiveBmsProductByCode" resultMap="BmsProductResult">
<include refid="selectBmsProductVo"/> <include refid="selectBmsProductVo"/>
where p.product_code = #{productCode} where p.product_code = #{productCode}
and ifnull(p.is_del, '0') = '0'
and (p.effective_date is null or #{bizDate} is null or p.effective_date &lt;= #{bizDate}) and (p.effective_date is null or #{bizDate} is null or p.effective_date &lt;= #{bizDate})
and (p.expire_date is null or #{bizDate} is null or p.expire_date &gt; #{bizDate}) and (p.expire_date is null or #{bizDate} is null or p.expire_date &gt; #{bizDate})
order by p.effective_date desc, p.product_id desc order by p.effective_date desc, p.product_id desc
@@ -82,6 +91,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectBmsProductList" parameterType="BmsProduct" resultMap="BmsProductResult"> <select id="selectBmsProductList" parameterType="BmsProduct" resultMap="BmsProductResult">
<include refid="selectBmsProductVo"/> <include refid="selectBmsProductVo"/>
<where> <where>
and ifnull(p.is_del, '0') = '0'
<if test="productCode != null and productCode != ''"> <if test="productCode != null and productCode != ''">
AND p.product_code like concat('%', #{productCode}, '%') AND p.product_code like concat('%', #{productCode}, '%')
</if> </if>
@@ -139,6 +149,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="effectiveDate != null">effective_date,</if> <if test="effectiveDate != null">effective_date,</if>
<if test="expireDate != null">expire_date,</if> <if test="expireDate != null">expire_date,</if>
<if test="status != null and status != ''">status,</if> <if test="status != null and status != ''">status,</if>
is_del,
<if test="sourceSheet != null">source_sheet,</if> <if test="sourceSheet != null">source_sheet,</if>
<if test="pefId != null">pef_id,</if> <if test="pefId != null">pef_id,</if>
<if test="remark != null">remark,</if> <if test="remark != null">remark,</if>
@@ -156,6 +167,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="effectiveDate != null">#{effectiveDate},</if> <if test="effectiveDate != null">#{effectiveDate},</if>
<if test="expireDate != null">#{expireDate},</if> <if test="expireDate != null">#{expireDate},</if>
<if test="status != null and status != ''">#{status},</if> <if test="status != null and status != ''">#{status},</if>
ifnull(#{isDel}, '0'),
<if test="sourceSheet != null">#{sourceSheet},</if> <if test="sourceSheet != null">#{sourceSheet},</if>
<if test="pefId != null">#{pefId},</if> <if test="pefId != null">#{pefId},</if>
<if test="remark != null">#{remark},</if> <if test="remark != null">#{remark},</if>
@@ -188,18 +200,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where product_id = #{productId} where product_id = #{productId}
</update> </update>
<delete id="deleteBmsProductByIds" parameterType="Long"> <update id="deleteBmsProductByIds" parameterType="Long">
delete from product where product_id in update product
set is_del = '1',
update_time = sysdate()
where ifnull(is_del, '0') = '0'
and product_id in
<foreach item="productId" collection="array" open="(" separator="," close=")"> <foreach item="productId" collection="array" open="(" separator="," close=")">
#{productId} #{productId}
</foreach> </foreach>
</delete> </update>
<update id="expireOpenByProductCode"> <update id="expireOpenByProductCode">
update product update product
set expire_date = #{newEffectiveDate}, set expire_date = #{newEffectiveDate},
update_time = sysdate() update_time = sysdate()
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date is null and expire_date is null
and (effective_date is null or effective_date &lt; #{newEffectiveDate}) and (effective_date is null or effective_date &lt; #{newEffectiveDate})
<if test="excludeId != null"> <if test="excludeId != null">
@@ -212,6 +229,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
set expire_date = null, set expire_date = null,
update_time = sysdate() update_time = sysdate()
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date = #{expireDate} and expire_date = #{expireDate}
</update> </update>
@@ -222,6 +240,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
when effective_date is null or effective_date &gt; now() then '0' when effective_date is null or effective_date &gt; now() then '0'
else '1' else '1'
end end
where ifnull(is_del, '0') = '0'
</update> </update>
</mapper> </mapper>
@@ -23,6 +23,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="effectiveDate" column="effective_date" /> <result property="effectiveDate" column="effective_date" />
<result property="expireDate" column="expire_date" /> <result property="expireDate" column="expire_date" />
<result property="status" column="status" /> <result property="status" column="status" />
<result property="isDel" column="is_del" />
<result property="createTime" column="create_time" /> <result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" /> <result property="updateTime" column="update_time" />
<result property="effectStatus" column="status" /> <result property="effectStatus" column="status" />
@@ -33,13 +34,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
c.zone_id, c.zone_code, c.zone_name, c.zone_id, c.zone_code, c.zone_name,
c.weight_min, c.weight_max, c.weight_min, c.weight_max,
c.freight_price, c.registration_fee, c.size_limit, c.last_mile, c.lead_time, c.freight_price, c.registration_fee, c.size_limit, c.last_mile, c.lead_time,
c.effective_date, c.expire_date, c.status, c.create_time, c.update_time c.effective_date, c.expire_date, c.status, c.is_del, c.create_time, c.update_time
from redline_product_country c from redline_product_country c
</sql> </sql>
<select id="selectBmsRedlineProductCountryList" parameterType="BmsRedlineProductCountry" resultMap="BmsRedlineProductCountryResult"> <select id="selectBmsRedlineProductCountryList" parameterType="BmsRedlineProductCountry" resultMap="BmsRedlineProductCountryResult">
<include refid="selectVo"/> <include refid="selectVo"/>
<where> <where>
and ifnull(c.is_del, '0') = '0'
<if test="productId != null"> <if test="productId != null">
AND c.product_id = #{productId} AND c.product_id = #{productId}
</if> </if>
@@ -85,12 +87,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
product_id, product_code, country_name, country_code, zone_id, zone_code, zone_name, product_id, product_code, country_name, country_code, zone_id, zone_code, zone_name,
weight_min, weight_max, weight_min, weight_max,
freight_price, registration_fee, size_limit, last_mile, lead_time, freight_price, registration_fee, size_limit, last_mile, lead_time,
effective_date, expire_date, status, create_time effective_date, expire_date, status, is_del, create_time
) values ( ) values (
#{productId}, #{productCode}, #{countryName}, #{countryCode}, #{zoneId}, #{zoneCode}, #{zoneName}, #{productId}, #{productCode}, #{countryName}, #{countryCode}, #{zoneId}, #{zoneCode}, #{zoneName},
#{weightMin}, #{weightMax}, #{weightMin}, #{weightMax},
#{freightPrice}, #{registrationFee}, #{sizeLimit}, #{lastMile}, #{leadTime}, #{freightPrice}, #{registrationFee}, #{sizeLimit}, #{lastMile}, #{leadTime},
#{effectiveDate}, #{expireDate}, IFNULL(#{status}, '0'), sysdate() #{effectiveDate}, #{expireDate}, IFNULL(#{status}, '0'), IFNULL(#{isDel}, '0'), sysdate()
) )
</insert> </insert>
@@ -132,41 +134,63 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where detail_id = #{detailId} where detail_id = #{detailId}
</update> </update>
<delete id="deleteByProductId" parameterType="Long"> <update id="deleteByProductId" parameterType="Long">
delete from redline_product_country where product_id = #{productId} update redline_product_country
</delete> set is_del = '1', update_time = sysdate()
where product_id = #{productId}
and ifnull(is_del, '0') = '0'
</update>
<delete id="deleteByProductCode" parameterType="String"> <update id="deleteByProductCode" parameterType="String">
delete from redline_product_country where product_code = #{productCode} update redline_product_country
</delete> set is_del = '1', update_time = sysdate()
where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
</update>
<delete id="deleteByProductCodes"> <update id="deleteByProductCodes">
delete from redline_product_country where product_code in update redline_product_country
set is_del = '1', update_time = sysdate()
where ifnull(is_del, '0') = '0'
and product_code in
<foreach item="code" collection="array" open="(" separator="," close=")"> <foreach item="code" collection="array" open="(" separator="," close=")">
#{code} #{code}
</foreach> </foreach>
</delete> </update>
<delete id="deleteByProductCodeAndEffectiveDate"> <update id="deleteByProductCodeAndEffectiveDate">
delete from redline_product_country update redline_product_country
set is_del = '1', update_time = sysdate()
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and ( and (
(#{effectiveDate} is null and effective_date is null) (#{effectiveDate} is null and effective_date is null)
or effective_date = #{effectiveDate} or effective_date = #{effectiveDate}
) )
</delete> </update>
<select id="selectMaxOpenEffectiveDate" resultType="java.util.Date"> <select id="selectMaxOpenEffectiveDate" resultType="java.util.Date">
select max(effective_date) from redline_product_country select max(effective_date) from redline_product_country
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date is null and expire_date is null
</select> </select>
<update id="reopenExpiredByProductCodeAndExpireDate">
update redline_product_country
set expire_date = null,
update_time = sysdate()
where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date = #{expireDate}
</update>
<update id="expireOpenByProductCode"> <update id="expireOpenByProductCode">
update redline_product_country update redline_product_country
set expire_date = #{newEffectiveDate}, set expire_date = #{newEffectiveDate},
update_time = sysdate() update_time = sysdate()
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date is null and expire_date is null
and (effective_date is null or effective_date &lt; #{newEffectiveDate}) and (effective_date is null or effective_date &lt; #{newEffectiveDate})
</update> </update>
@@ -176,6 +200,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
set expire_date = #{newEffectiveDate}, set expire_date = #{newEffectiveDate},
update_time = sysdate() update_time = sysdate()
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date is null and expire_date is null
and (effective_date is null or effective_date &lt; #{newEffectiveDate}) and (effective_date is null or effective_date &lt; #{newEffectiveDate})
<choose> <choose>
@@ -195,21 +220,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
when effective_date is null or effective_date &gt; now() then '0' when effective_date is null or effective_date &gt; now() then '0'
else '1' else '1'
end end
where ifnull(is_del, '0') = '0'
</update> </update>
<delete id="deleteOpenByProductCodeAndEffectiveDate"> <update id="deleteOpenByProductCodeAndEffectiveDate">
delete from redline_product_country update redline_product_country
set is_del = '1', update_time = sysdate()
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date is null and expire_date is null
and ( and (
(#{effectiveDate} is null and effective_date is null) (#{effectiveDate} is null and effective_date is null)
or effective_date = #{effectiveDate} or effective_date = #{effectiveDate}
) )
</delete> </update>
<delete id="deleteOpenByProductCodeAndCountryOnDate"> <update id="deleteOpenByProductCodeAndCountryOnDate">
delete from redline_product_country update redline_product_country
set is_del = '1', update_time = sysdate()
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date is null and expire_date is null
and ( and (
(#{effectiveDate} is null and effective_date is null) (#{effectiveDate} is null and effective_date is null)
@@ -223,11 +253,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and country_name = #{countryName} and country_name = #{countryName}
</otherwise> </otherwise>
</choose> </choose>
</delete> </update>
<select id="selectMatchByProductCountryWeight" resultMap="BmsRedlineProductCountryResult"> <select id="selectMatchByProductCountryWeight" resultMap="BmsRedlineProductCountryResult">
<include refid="selectVo"/> <include refid="selectVo"/>
where c.product_code = #{productCode} where c.product_code = #{productCode}
and ifnull(c.is_del, '0') = '0'
and c.weight_min &lt;= #{weight} and c.weight_min &lt;= #{weight}
and c.weight_max &gt;= #{weight} and c.weight_max &gt;= #{weight}
<choose> <choose>
@@ -264,6 +295,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select count(1) select count(1)
from redline_product_country from redline_product_country
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and zone_code is not null and zone_code &lt;&gt; '' and zone_code is not null and zone_code &lt;&gt; ''
<choose> <choose>
<when test="countryCode != null and countryCode != ''"> <when test="countryCode != null and countryCode != ''">
@@ -288,6 +320,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectOpenByProductCode" resultMap="BmsRedlineProductCountryResult"> <select id="selectOpenByProductCode" resultMap="BmsRedlineProductCountryResult">
<include refid="selectVo"/> <include refid="selectVo"/>
where c.product_code = #{productCode} where c.product_code = #{productCode}
and ifnull(c.is_del, '0') = '0'
and c.expire_date is null and c.expire_date is null
order by c.country_name asc, c.zone_code asc, c.weight_min asc, c.detail_id asc order by c.country_name asc, c.zone_code asc, c.weight_min asc, c.detail_id asc
</select> </select>
@@ -296,14 +329,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
insert into redline_product_country ( insert into redline_product_country (
product_id, product_code, country_name, country_code, zone_id, zone_code, zone_name, product_id, product_code, country_name, country_code, zone_id, zone_code, zone_name,
weight_min, weight_max, freight_price, registration_fee, size_limit, last_mile, lead_time, weight_min, weight_max, freight_price, registration_fee, size_limit, last_mile, lead_time,
effective_date, expire_date, status, create_time effective_date, expire_date, status, is_del, create_time
) )
select select
#{productId}, product_code, country_name, country_code, zone_id, zone_code, zone_name, #{productId}, product_code, country_name, country_code, zone_id, zone_code, zone_name,
weight_min, weight_max, freight_price, registration_fee, size_limit, last_mile, lead_time, weight_min, weight_max, freight_price, registration_fee, size_limit, last_mile, lead_time,
#{effectiveDate}, null, IFNULL(#{status}, '0'), sysdate() #{effectiveDate}, null, IFNULL(#{status}, '0'), '0', sysdate()
from redline_product_country from redline_product_country
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date is null and expire_date is null
and (effective_date is null or effective_date &lt; #{effectiveDate}) and (effective_date is null or effective_date &lt; #{effectiveDate})
order by detail_id asc order by detail_id asc
@@ -16,6 +16,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="effectiveDate" column="effective_date" /> <result property="effectiveDate" column="effective_date" />
<result property="expireDate" column="expire_date" /> <result property="expireDate" column="expire_date" />
<result property="status" column="status" /> <result property="status" column="status" />
<result property="isDel" column="is_del" />
<result property="sourceSheet" column="source_sheet" /> <result property="sourceSheet" column="source_sheet" />
<result property="pefId" column="pef_id" /> <result property="pefId" column="pef_id" />
<result property="remark" column="remark" /> <result property="remark" column="remark" />
@@ -30,28 +31,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="selectBmsRedlineProductVo"> <sql id="selectBmsRedlineProductVo">
select p.product_id, p.product_code, p.product_name, p.service_level, p.cargo_attr, select p.product_id, p.product_code, p.product_name, p.service_level, p.cargo_attr,
p.dest_region, p.update_note, p.tax_mode, p.effective_date, p.expire_date, p.status, p.dest_region, p.update_note, p.tax_mode, p.effective_date, p.expire_date, p.status, p.is_del,
p.source_sheet, p.pef_id, p.remark, p.tms_id, p.created_by, p.create_time, p.updated_by, p.update_time, p.source_sheet, p.pef_id, p.remark, p.tms_id, p.created_by, p.create_time, p.updated_by, p.update_time,
(select count(distinct c.country_name) from redline_product_country c (select count(distinct c.country_name) from redline_product_country c
where c.product_id = p.product_id where ifnull(c.is_del, '0') = '0'
and (c.product_id = p.product_id
or (c.product_id is null and c.product_code = p.product_code or (c.product_id is null and c.product_code = p.product_code
and ( and (
(p.effective_date is null and c.effective_date is null) (p.effective_date is null and c.effective_date is null)
or c.effective_date = p.effective_date or c.effective_date = p.effective_date
)) )))
) as country_count, ) as country_count,
(select count(*) from prc_surcharge_rel r where r.product_id = p.product_id and r.price_type = 'REDLINE') as surcharge_count (select count(*) from prc_surcharge_rel r
inner join prc_surcharge s on s.sc_id = r.sc_id and ifnull(s.is_del, '0') = '0'
where ifnull(r.is_del, '0') = '0'
and r.product_id = p.product_id and r.price_type = 'REDLINE') as surcharge_count
from redline_product p from redline_product p
</sql> </sql>
<select id="selectBmsRedlineProductById" parameterType="Long" resultMap="BmsRedlineProductResult"> <select id="selectBmsRedlineProductById" parameterType="Long" resultMap="BmsRedlineProductResult">
<include refid="selectBmsRedlineProductVo"/> <include refid="selectBmsRedlineProductVo"/>
where p.product_id = #{productId} where p.product_id = #{productId}
and ifnull(p.is_del, '0') = '0'
</select> </select>
<select id="selectBmsRedlineProductByCode" parameterType="String" resultMap="BmsRedlineProductResult"> <select id="selectBmsRedlineProductByCode" parameterType="String" resultMap="BmsRedlineProductResult">
<include refid="selectBmsRedlineProductVo"/> <include refid="selectBmsRedlineProductVo"/>
where p.product_code = #{productCode} where p.product_code = #{productCode}
and ifnull(p.is_del, '0') = '0'
order by p.effective_date desc, p.product_id desc order by p.effective_date desc, p.product_id desc
limit 1 limit 1
</select> </select>
@@ -59,6 +66,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectBmsRedlineProductByCodeAndDate" resultMap="BmsRedlineProductResult"> <select id="selectBmsRedlineProductByCodeAndDate" resultMap="BmsRedlineProductResult">
<include refid="selectBmsRedlineProductVo"/> <include refid="selectBmsRedlineProductVo"/>
where p.product_code = #{productCode} where p.product_code = #{productCode}
and ifnull(p.is_del, '0') = '0'
<choose> <choose>
<when test="effectiveDate != null"> <when test="effectiveDate != null">
AND p.effective_date = #{effectiveDate} AND p.effective_date = #{effectiveDate}
@@ -73,6 +81,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectEffectiveBmsRedlineProductByCode" resultMap="BmsRedlineProductResult"> <select id="selectEffectiveBmsRedlineProductByCode" resultMap="BmsRedlineProductResult">
<include refid="selectBmsRedlineProductVo"/> <include refid="selectBmsRedlineProductVo"/>
where p.product_code = #{productCode} where p.product_code = #{productCode}
and ifnull(p.is_del, '0') = '0'
and (p.effective_date is null or #{bizDate} is null or p.effective_date &lt;= #{bizDate}) and (p.effective_date is null or #{bizDate} is null or p.effective_date &lt;= #{bizDate})
and (p.expire_date is null or #{bizDate} is null or p.expire_date &gt; #{bizDate}) and (p.expire_date is null or #{bizDate} is null or p.expire_date &gt; #{bizDate})
order by p.effective_date desc, p.product_id desc order by p.effective_date desc, p.product_id desc
@@ -82,6 +91,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectBmsRedlineProductList" parameterType="BmsRedlineProduct" resultMap="BmsRedlineProductResult"> <select id="selectBmsRedlineProductList" parameterType="BmsRedlineProduct" resultMap="BmsRedlineProductResult">
<include refid="selectBmsRedlineProductVo"/> <include refid="selectBmsRedlineProductVo"/>
<where> <where>
and ifnull(p.is_del, '0') = '0'
<if test="productCode != null and productCode != ''"> <if test="productCode != null and productCode != ''">
AND p.product_code like concat('%', #{productCode}, '%') AND p.product_code like concat('%', #{productCode}, '%')
</if> </if>
@@ -139,6 +149,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="effectiveDate != null">effective_date,</if> <if test="effectiveDate != null">effective_date,</if>
<if test="expireDate != null">expire_date,</if> <if test="expireDate != null">expire_date,</if>
<if test="status != null and status != ''">status,</if> <if test="status != null and status != ''">status,</if>
is_del,
<if test="sourceSheet != null">source_sheet,</if> <if test="sourceSheet != null">source_sheet,</if>
<if test="pefId != null">pef_id,</if> <if test="pefId != null">pef_id,</if>
<if test="remark != null">remark,</if> <if test="remark != null">remark,</if>
@@ -156,6 +167,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="effectiveDate != null">#{effectiveDate},</if> <if test="effectiveDate != null">#{effectiveDate},</if>
<if test="expireDate != null">#{expireDate},</if> <if test="expireDate != null">#{expireDate},</if>
<if test="status != null and status != ''">#{status},</if> <if test="status != null and status != ''">#{status},</if>
ifnull(#{isDel}, '0'),
<if test="sourceSheet != null">#{sourceSheet},</if> <if test="sourceSheet != null">#{sourceSheet},</if>
<if test="pefId != null">#{pefId},</if> <if test="pefId != null">#{pefId},</if>
<if test="remark != null">#{remark},</if> <if test="remark != null">#{remark},</if>
@@ -166,7 +178,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</insert> </insert>
<update id="updateBmsRedlineProduct" parameterType="BmsRedlineProduct"> <update id="updateBmsRedlineProduct" parameterType="BmsRedlineProduct">
update product update redline_product
<set> <set>
<if test="productCode != null and productCode != ''">product_code = #{productCode},</if> <if test="productCode != null and productCode != ''">product_code = #{productCode},</if>
<if test="productName != null and productName != ''">product_name = #{productName},</if> <if test="productName != null and productName != ''">product_name = #{productName},</if>
@@ -188,18 +200,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where product_id = #{productId} where product_id = #{productId}
</update> </update>
<delete id="deleteBmsRedlineProductByIds" parameterType="Long"> <update id="deleteBmsRedlineProductByIds" parameterType="Long">
delete from redline_product where product_id in update redline_product
set is_del = '1',
update_time = sysdate()
where ifnull(is_del, '0') = '0'
and product_id in
<foreach item="productId" collection="array" open="(" separator="," close=")"> <foreach item="productId" collection="array" open="(" separator="," close=")">
#{productId} #{productId}
</foreach> </foreach>
</delete> </update>
<update id="reopenExpiredByProductCodeAndExpireDate">
update redline_product
set expire_date = null,
update_time = sysdate()
where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date = #{expireDate}
</update>
<update id="expireOpenByProductCode"> <update id="expireOpenByProductCode">
update product update redline_product
set expire_date = #{newEffectiveDate}, set expire_date = #{newEffectiveDate},
update_time = sysdate() update_time = sysdate()
where product_code = #{productCode} where product_code = #{productCode}
and ifnull(is_del, '0') = '0'
and expire_date is null and expire_date is null
and (effective_date is null or effective_date &lt; #{newEffectiveDate}) and (effective_date is null or effective_date &lt; #{newEffectiveDate})
<if test="excludeId != null"> <if test="excludeId != null">
@@ -208,12 +234,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</update> </update>
<update id="refreshStatusByDates"> <update id="refreshStatusByDates">
update product update redline_product
set status = case set status = case
when expire_date is not null and expire_date &lt;= now() then '2' when expire_date is not null and expire_date &lt;= now() then '2'
when effective_date is null or effective_date &gt; now() then '0' when effective_date is null or effective_date &gt; now() then '0'
else '1' else '1'
end end
where ifnull(is_del, '0') = '0'
</update> </update>
</mapper> </mapper>
@@ -51,7 +51,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
f.content_type, f.file_extension, f.oss_id, f.sheet_names, f.remark, f.content_type, f.file_extension, f.oss_id, f.sheet_names, f.remark,
f.created_by, f.create_time, f.updated_by, f.update_time f.created_by, f.create_time, f.updated_by, f.update_time
from prc_price_excel_file f from prc_price_excel_file f
inner join product p on p.pef_id = f.pef_id inner join product p on p.pef_id = f.pef_id and ifnull(p.is_del, '0') = '0'
where p.product_code = #{productCode} where p.product_code = #{productCode}
and p.pef_id is not null and p.pef_id is not null
order by f.effective_time desc, f.pef_id desc order by f.effective_time desc, f.pef_id desc
@@ -119,7 +119,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
f.content_type, f.file_extension, f.oss_id, f.sheet_names, f.remark, f.content_type, f.file_extension, f.oss_id, f.sheet_names, f.remark,
f.created_by, f.create_time, f.updated_by, f.update_time f.created_by, f.create_time, f.updated_by, f.update_time
from prc_price_excel_file f from prc_price_excel_file f
inner join redline_product p on p.pef_id = f.pef_id inner join redline_product p on p.pef_id = f.pef_id and ifnull(p.is_del, '0') = '0'
where p.product_code = #{productCode} where p.product_code = #{productCode}
and p.pef_id is not null and p.pef_id is not null
order by f.effective_time desc, f.pef_id desc order by f.effective_time desc, f.pef_id desc
@@ -57,7 +57,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
c.registration_fee as base_registration_fee, c.registration_fee as base_registration_fee,
d.discount_value, d.round_mode, d.pr_id, d.effective_date, d.expire_date, d.create_time, d.update_time d.discount_value, d.round_mode, d.pr_id, d.effective_date, d.expire_date, d.create_time, d.update_time
from prc_price_set_detail d from prc_price_set_detail d
left join product_country c on c.detail_id = d.product_country_id left join product_country c on c.detail_id = d.product_country_id and ifnull(c.is_del, '0') = '0'
<where> <where>
<if test="priceSetId != null"> <if test="priceSetId != null">
AND d.price_set_id = #{priceSetId} AND d.price_set_id = #{priceSetId}
@@ -166,9 +166,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
inner join product p on p.product_id = c.product_id inner join product p on p.product_id = c.product_id
<where> <where>
and p.status = '1' and p.status = '1'
and ifnull(p.is_del, '0') = '0'
and ifnull(c.is_del, '0') = '0'
and p.product_id = ( and p.product_id = (
select max(p2.product_id) from product p2 select max(p2.product_id) from product p2
where p2.product_code = p.product_code and p2.status = '1' where p2.product_code = p.product_code and p2.status = '1'
and ifnull(p2.is_del, '0') = '0'
) )
and ifnull(c.status, '1') &lt;&gt; '2' and ifnull(c.status, '1') &lt;&gt; '2'
<choose> <choose>
@@ -226,9 +229,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
inner join product p on p.product_id = c.product_id inner join product p on p.product_id = c.product_id
<where> <where>
and p.status = '1' and p.status = '1'
and ifnull(p.is_del, '0') = '0'
and ifnull(c.is_del, '0') = '0'
and p.product_id = ( and p.product_id = (
select max(p2.product_id) from product p2 select max(p2.product_id) from product p2
where p2.product_code = p.product_code and p2.status = '1' where p2.product_code = p.product_code and p2.status = '1'
and ifnull(p2.is_del, '0') = '0'
) )
and ifnull(c.status, '1') &lt;&gt; '2' and ifnull(c.status, '1') &lt;&gt; '2'
<choose> <choose>
@@ -259,9 +265,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
from product p from product p
<where> <where>
and p.status = '1' and p.status = '1'
and ifnull(p.is_del, '0') = '0'
and p.product_id = ( and p.product_id = (
select max(p2.product_id) from product p2 select max(p2.product_id) from product p2
where p2.product_code = p.product_code and p2.status = '1' where p2.product_code = p.product_code and p2.status = '1'
and ifnull(p2.is_del, '0') = '0'
) )
</where> </where>
order by p.product_code asc order by p.product_code asc
@@ -121,9 +121,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
sysdate() sysdate()
from product p from product p
where p.status = '1' where p.status = '1'
and ifnull(p.is_del, '0') = '0'
and p.product_id = ( and p.product_id = (
select max(p2.product_id) from product p2 select max(p2.product_id) from product p2
where p2.product_code = p.product_code and p2.status = '1' where p2.product_code = p.product_code and p2.status = '1'
and ifnull(p2.is_del, '0') = '0'
) )
order by p.product_code asc order by p.product_code asc
</insert> </insert>
@@ -146,9 +148,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
null as update_time null as update_time
from product p from product p
where p.status = '1' where p.status = '1'
and ifnull(p.is_del, '0') = '0'
and p.product_id = ( and p.product_id = (
select max(p2.product_id) from product p2 select max(p2.product_id) from product p2
where p2.product_code = p.product_code and p2.status = '1' where p2.product_code = p.product_code and p2.status = '1'
and ifnull(p2.is_del, '0') = '0'
) )
order by p.product_code asc order by p.product_code asc
</select> </select>
@@ -13,6 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="currency" column="currency" /> <result property="currency" column="currency" />
<result property="roundMode" column="round_mode" /> <result property="roundMode" column="round_mode" />
<result property="ssCode" column="ss_code" /> <result property="ssCode" column="ss_code" />
<result property="isDel" column="is_del" />
<result property="countryCode" column="country_code" /> <result property="countryCode" column="country_code" />
<result property="scNote" column="sc_note" /> <result property="scNote" column="sc_note" />
<result property="tmsId" column="tms_id" /> <result property="tmsId" column="tms_id" />
@@ -23,7 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap> </resultMap>
<sql id="selectPrcSurchargeVo"> <sql id="selectPrcSurchargeVo">
select sc_id, sc_name, fee_type, charge_type, charge_value, currency, round_mode, ss_code, select sc_id, sc_name, fee_type, charge_type, charge_value, currency, round_mode, ss_code, is_del,
country_code, sc_note, tms_id, created_by, create_time, updated_by, update_time country_code, sc_note, tms_id, created_by, create_time, updated_by, update_time
from prc_surcharge from prc_surcharge
</sql> </sql>
@@ -31,11 +32,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectPrcSurchargeById" parameterType="Long" resultMap="PrcSurchargeResult"> <select id="selectPrcSurchargeById" parameterType="Long" resultMap="PrcSurchargeResult">
<include refid="selectPrcSurchargeVo"/> <include refid="selectPrcSurchargeVo"/>
where sc_id = #{scId} where sc_id = #{scId}
and ifnull(is_del, '0') = '0'
</select> </select>
<select id="selectPrcSurchargeList" parameterType="PrcSurcharge" resultMap="PrcSurchargeResult"> <select id="selectPrcSurchargeList" parameterType="PrcSurcharge" resultMap="PrcSurchargeResult">
<include refid="selectPrcSurchargeVo"/> <include refid="selectPrcSurchargeVo"/>
<where> <where>
and ifnull(is_del, '0') = '0'
<if test="scName != null and scName != ''"> <if test="scName != null and scName != ''">
AND sc_name like concat('%', #{scName}, '%') AND sc_name like concat('%', #{scName}, '%')
</if> </if>
@@ -76,6 +79,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="currency != null and currency != ''">currency,</if> <if test="currency != null and currency != ''">currency,</if>
<if test="roundMode != null and roundMode != ''">round_mode,</if> <if test="roundMode != null and roundMode != ''">round_mode,</if>
<if test="ssCode != null and ssCode != ''">ss_code,</if> <if test="ssCode != null and ssCode != ''">ss_code,</if>
is_del,
<if test="countryCode != null">country_code,</if> <if test="countryCode != null">country_code,</if>
<if test="scNote != null">sc_note,</if> <if test="scNote != null">sc_note,</if>
<if test="tmsId != null">tms_id,</if> <if test="tmsId != null">tms_id,</if>
@@ -89,6 +93,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="currency != null and currency != ''">#{currency},</if> <if test="currency != null and currency != ''">#{currency},</if>
<if test="roundMode != null and roundMode != ''">#{roundMode},</if> <if test="roundMode != null and roundMode != ''">#{roundMode},</if>
<if test="ssCode != null and ssCode != ''">#{ssCode},</if> <if test="ssCode != null and ssCode != ''">#{ssCode},</if>
ifnull(#{isDel}, '0'),
<if test="countryCode != null">#{countryCode},</if> <if test="countryCode != null">#{countryCode},</if>
<if test="scNote != null">#{scNote},</if> <if test="scNote != null">#{scNote},</if>
<if test="tmsId != null">#{tmsId},</if> <if test="tmsId != null">#{tmsId},</if>
@@ -101,7 +106,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<update id="updateSsCodeByIds"> <update id="updateSsCodeByIds">
update prc_surcharge update prc_surcharge
set ss_code = #{ssCode}, updated_by = #{operator}, update_time = sysdate() set ss_code = #{ssCode}, updated_by = #{operator}, update_time = sysdate()
where sc_id in where ifnull(is_del, '0') = '0'
and sc_id in
<foreach item="scId" collection="scIds" open="(" separator="," close=")"> <foreach item="scId" collection="scIds" open="(" separator="," close=")">
#{scId} #{scId}
</foreach> </foreach>
@@ -12,6 +12,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="detailId" column="detail_id" /> <result property="detailId" column="detail_id" />
<result property="priceType" column="price_type" /> <result property="priceType" column="price_type" />
<result property="countryCode" column="country_code" /> <result property="countryCode" column="country_code" />
<result property="isDel" column="is_del" />
<result property="scName" column="sc_name" /> <result property="scName" column="sc_name" />
<result property="feeType" column="fee_type" /> <result property="feeType" column="fee_type" />
<result property="chargeType" column="charge_type" /> <result property="chargeType" column="charge_type" />
@@ -31,20 +32,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="selectPrcSurchargeRelVo"> <sql id="selectPrcSurchargeRelVo">
select r.rel_id, r.sc_id, r.product_id, r.product_code, r.detail_id, select r.rel_id, r.sc_id, r.product_id, r.product_code, r.detail_id,
r.price_type, r.country_code, r.price_type, r.country_code, r.is_del,
r.created_by, r.create_time, r.updated_by, r.update_time, r.created_by, r.create_time, r.updated_by, r.update_time,
s.sc_name, s.fee_type, s.charge_type, s.charge_value, s.currency, s.sc_name, s.fee_type, s.charge_type, s.charge_value, s.currency,
s.round_mode, s.ss_code, s.sc_note, s.round_mode, s.ss_code, s.sc_note,
ifnull(c.country_name, rc.country_name) as country_name, ifnull(c.weight_min, rc.weight_min) as weight_min, ifnull(c.weight_max, rc.weight_max) as weight_max ifnull(c.country_name, rc.country_name) as country_name, ifnull(c.weight_min, rc.weight_min) as weight_min, ifnull(c.weight_max, rc.weight_max) as weight_max
from prc_surcharge_rel r from prc_surcharge_rel r
join prc_surcharge s on s.sc_id = r.sc_id join prc_surcharge s on s.sc_id = r.sc_id and ifnull(s.is_del, '0') = '0'
left join product_country c on c.detail_id = r.detail_id and r.price_type = 'PRODUCT' left join product_country c on c.detail_id = r.detail_id and r.price_type = 'PRODUCT' and ifnull(c.is_del, '0') = '0'
left join redline_product_country rc on rc.detail_id = r.detail_id and r.price_type = 'REDLINE' left join redline_product_country rc on rc.detail_id = r.detail_id and r.price_type = 'REDLINE' and ifnull(rc.is_del, '0') = '0'
</sql> </sql>
<select id="selectPrcSurchargeRelList" parameterType="PrcSurchargeRel" resultMap="PrcSurchargeRelResult"> <select id="selectPrcSurchargeRelList" parameterType="PrcSurchargeRel" resultMap="PrcSurchargeRelResult">
<include refid="selectPrcSurchargeRelVo"/> <include refid="selectPrcSurchargeRelVo"/>
<where> <where>
and ifnull(r.is_del, '0') = '0'
<if test="productId != null"> <if test="productId != null">
AND r.product_id = #{productId} AND r.product_id = #{productId}
</if> </if>
@@ -69,7 +71,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectByDetailIdsAndPriceType" resultMap="PrcSurchargeRelResult"> <select id="selectByDetailIdsAndPriceType" resultMap="PrcSurchargeRelResult">
<include refid="selectPrcSurchargeRelVo"/> <include refid="selectPrcSurchargeRelVo"/>
where r.price_type = #{priceType} where ifnull(r.is_del, '0') = '0'
and r.price_type = #{priceType}
and r.detail_id in and r.detail_id in
<foreach item="id" collection="detailIds" open="(" separator="," close=")"> <foreach item="id" collection="detailIds" open="(" separator="," close=")">
#{id} #{id}
@@ -79,55 +82,66 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<insert id="insertPrcSurchargeRel" parameterType="PrcSurchargeRel" useGeneratedKeys="true" keyProperty="relId"> <insert id="insertPrcSurchargeRel" parameterType="PrcSurchargeRel" useGeneratedKeys="true" keyProperty="relId">
insert into prc_surcharge_rel ( insert into prc_surcharge_rel (
sc_id, product_id, product_code, detail_id, price_type, country_code, sc_id, product_id, product_code, detail_id, price_type, country_code, is_del,
<if test="createBy != null and createBy != ''">created_by,</if> <if test="createBy != null and createBy != ''">created_by,</if>
create_time create_time
) values ( ) values (
#{scId}, #{productId}, #{productCode}, #{detailId}, #{scId}, #{productId}, #{productCode}, #{detailId},
#{priceType}, #{countryCode}, #{priceType}, #{countryCode}, ifnull(#{isDel}, '0'),
<if test="createBy != null and createBy != ''">#{createBy},</if> <if test="createBy != null and createBy != ''">#{createBy},</if>
sysdate() sysdate()
) )
</insert> </insert>
<delete id="deletePrcSurchargeRelByIds" parameterType="Long"> <update id="deletePrcSurchargeRelByIds" parameterType="Long">
delete from prc_surcharge_rel where rel_id in update prc_surcharge_rel
set is_del = '1', update_time = sysdate()
where ifnull(is_del, '0') = '0'
and rel_id in
<foreach item="relId" collection="array" open="(" separator="," close=")"> <foreach item="relId" collection="array" open="(" separator="," close=")">
#{relId} #{relId}
</foreach> </foreach>
</delete> </update>
<delete id="deleteRelByProductCodes"> <update id="deleteRelByProductCodes">
delete from prc_surcharge_rel where product_code in update prc_surcharge_rel
set is_del = '1', update_time = sysdate()
where ifnull(is_del, '0') = '0'
and price_type = 'PRODUCT'
and product_code in
<foreach item="code" collection="array" open="(" separator="," close=")"> <foreach item="code" collection="array" open="(" separator="," close=")">
#{code} #{code}
</foreach> </foreach>
and price_type = 'PRODUCT' </update>
</delete>
<delete id="deleteByDetailIdsAndPriceType"> <update id="deleteByDetailIdsAndPriceType">
delete from prc_surcharge_rel update prc_surcharge_rel
where price_type = #{priceType} set is_del = '1', update_time = sysdate()
where ifnull(is_del, '0') = '0'
and price_type = #{priceType}
and detail_id in and detail_id in
<foreach item="id" collection="detailIds" open="(" separator="," close=")"> <foreach item="id" collection="detailIds" open="(" separator="," close=")">
#{id} #{id}
</foreach> </foreach>
</delete> </update>
<delete id="deleteByProductIdsAndPriceType"> <update id="deleteByProductIdsAndPriceType">
delete from prc_surcharge_rel update prc_surcharge_rel
where price_type = #{priceType} set is_del = '1', update_time = sysdate()
where ifnull(is_del, '0') = '0'
and price_type = #{priceType}
and product_id in and product_id in
<foreach item="id" collection="productIds" open="(" separator="," close=")"> <foreach item="id" collection="productIds" open="(" separator="," close=")">
#{id} #{id}
</foreach> </foreach>
</delete> </update>
<!-- 附加费版本化编辑后,产品关联重指向新记录 --> <!-- 附加费版本化编辑后,产品关联重指向新记录 -->
<update id="rebindRelScId"> <update id="rebindRelScId">
update prc_surcharge_rel update prc_surcharge_rel
set sc_id = #{newScId}, updated_by = #{operator}, update_time = sysdate() set sc_id = #{newScId}, updated_by = #{operator}, update_time = sysdate()
where sc_id = #{oldScId} where ifnull(is_del, '0') = '0'
and sc_id = #{oldScId}
</update> </update>
</mapper> </mapper>
+11 -5
View File
@@ -299,6 +299,7 @@ CREATE TABLE `product` (
`effective_date` datetime DEFAULT NULL COMMENT '目录生效时间(到小时)', `effective_date` datetime DEFAULT NULL COMMENT '目录生效时间(到小时)',
`expire_date` datetime DEFAULT NULL COMMENT '产品失效时间(空=长期;下一版生效时间=本版失效时间)', `expire_date` datetime DEFAULT NULL COMMENT '产品失效时间(空=长期;下一版生效时间=本版失效时间)',
`status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效', `status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效',
`is_del` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '是否删除 0未删除 1已删除',
`source_sheet` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源Excel sheet名', `source_sheet` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源Excel sheet名',
`remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`tms_id` int(11) DEFAULT NULL COMMENT '多租户ID', `tms_id` int(11) DEFAULT NULL COMMENT '多租户ID',
@@ -307,7 +308,7 @@ CREATE TABLE `product` (
`updated_by` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', `updated_by` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`product_id`) USING BTREE, PRIMARY KEY (`product_id`) USING BTREE,
UNIQUE KEY `uk_product_code_eff` (`product_code`,`effective_date`), UNIQUE KEY `uk_product_code_eff_is_del` (`product_code`,`effective_date`,`is_del`),
KEY `idx_tax_status` (`tax_mode`,`status`) USING BTREE, KEY `idx_tax_status` (`tax_mode`,`status`) USING BTREE,
KEY `idx_product_code` (`product_code`) KEY `idx_product_code` (`product_code`)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产品主表-来自产品目录'; ) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产品主表-来自产品目录';
@@ -336,10 +337,11 @@ CREATE TABLE `product_country` (
`effective_date` datetime DEFAULT NULL COMMENT '产品价表生效时间(到小时)', `effective_date` datetime DEFAULT NULL COMMENT '产品价表生效时间(到小时)',
`expire_date` datetime DEFAULT NULL COMMENT '失效时间(空=开放;下一版导入生效时间=本版失效时间)', `expire_date` datetime DEFAULT NULL COMMENT '失效时间(空=开放;下一版导入生效时间=本版失效时间)',
`status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效', `status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效',
`is_del` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '是否删除 0未删除 1已删除',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`detail_id`) USING BTREE, PRIMARY KEY (`detail_id`) USING BTREE,
UNIQUE KEY `uk_product_country_zone_weight_eff` (`product_code`,`country_name`,`zone_code`,`weight_min`,`weight_max`,`effective_date`), UNIQUE KEY `uk_product_country_zone_weight_eff_is_del` (`product_code`,`country_name`,`zone_code`,`weight_min`,`weight_max`,`effective_date`,`is_del`),
KEY `idx_country_code` (`country_code`) USING BTREE, KEY `idx_country_code` (`country_code`) USING BTREE,
KEY `idx_weight_match` (`product_code`,`country_code`,`weight_min`,`weight_max`) USING BTREE, KEY `idx_weight_match` (`product_code`,`country_code`,`weight_min`,`weight_max`) USING BTREE,
KEY `idx_product_eff` (`product_code`,`effective_date`,`expire_date`), KEY `idx_product_eff` (`product_code`,`effective_date`,`expire_date`),
@@ -364,6 +366,7 @@ CREATE TABLE IF NOT EXISTS `redline_product` (
`effective_date` datetime DEFAULT NULL COMMENT '目录生效时间(到小时)', `effective_date` datetime DEFAULT NULL COMMENT '目录生效时间(到小时)',
`expire_date` datetime DEFAULT NULL COMMENT '失效时间(空=长期)', `expire_date` datetime DEFAULT NULL COMMENT '失效时间(空=长期)',
`status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效', `status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效',
`is_del` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '是否删除 0未删除 1已删除',
`source_sheet` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源Excel sheet名', `source_sheet` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源Excel sheet名',
`pef_id` bigint(20) DEFAULT NULL COMMENT '关联导入价表Excel附件 prc_price_excel_file.pef_id', `pef_id` bigint(20) DEFAULT NULL COMMENT '关联导入价表Excel附件 prc_price_excel_file.pef_id',
`remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
@@ -373,7 +376,7 @@ CREATE TABLE IF NOT EXISTS `redline_product` (
`updated_by` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', `updated_by` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`product_id`) USING BTREE, PRIMARY KEY (`product_id`) USING BTREE,
UNIQUE KEY `uk_redline_product_code_eff` (`product_code`,`effective_date`), UNIQUE KEY `uk_redline_product_code_eff_is_del` (`product_code`,`effective_date`,`is_del`),
KEY `idx_redline_tax_status` (`tax_mode`,`status`) USING BTREE, KEY `idx_redline_tax_status` (`tax_mode`,`status`) USING BTREE,
KEY `idx_redline_product_code` (`product_code`), KEY `idx_redline_product_code` (`product_code`),
KEY `idx_redline_product_pef_id` (`pef_id`) KEY `idx_redline_product_pef_id` (`pef_id`)
@@ -398,10 +401,11 @@ CREATE TABLE IF NOT EXISTS `redline_product_country` (
`effective_date` datetime DEFAULT NULL COMMENT '生效时间(到小时)', `effective_date` datetime DEFAULT NULL COMMENT '生效时间(到小时)',
`expire_date` datetime DEFAULT NULL COMMENT '失效时间(空=开放)', `expire_date` datetime DEFAULT NULL COMMENT '失效时间(空=开放)',
`status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效', `status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效',
`is_del` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '是否删除 0未删除 1已删除',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`detail_id`) USING BTREE, PRIMARY KEY (`detail_id`) USING BTREE,
UNIQUE KEY `uk_redline_country_zone_weight_eff` (`product_code`,`country_name`,`zone_code`,`weight_min`,`weight_max`,`effective_date`), UNIQUE KEY `uk_redline_country_zone_weight_eff_is_del` (`product_code`,`country_name`,`zone_code`,`weight_min`,`weight_max`,`effective_date`,`is_del`),
KEY `idx_redline_country_code` (`country_code`) USING BTREE, KEY `idx_redline_country_code` (`country_code`) USING BTREE,
KEY `idx_redline_weight_match` (`product_code`,`country_code`,`weight_min`,`weight_max`) USING BTREE, KEY `idx_redline_weight_match` (`product_code`,`country_code`,`weight_min`,`weight_max`) USING BTREE,
KEY `idx_redline_product_eff` (`product_code`,`effective_date`,`expire_date`), KEY `idx_redline_product_eff` (`product_code`,`effective_date`,`expire_date`),
@@ -1505,6 +1509,7 @@ CREATE TABLE `prc_surcharge` (
`currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CNY' COMMENT '币种', `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CNY' COMMENT '币种',
`round_mode` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'HALF_UP' COMMENT '取值方式(字典bms_round_mode)', `round_mode` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'HALF_UP' COMMENT '取值方式(字典bms_round_mode)',
`ss_code` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'on' COMMENT '状态 on/of', `ss_code` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'on' COMMENT '状态 on/of',
`is_del` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '是否删除 0未删除 1已删除',
`country_code` char(2) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '适用国家ISO2(空=全部)', `country_code` char(2) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '适用国家ISO2(空=全部)',
`sc_note` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', `sc_note` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
`tms_id` bigint(20) DEFAULT NULL COMMENT '租户ID', `tms_id` bigint(20) DEFAULT NULL COMMENT '租户ID',
@@ -1529,12 +1534,13 @@ CREATE TABLE `prc_surcharge_rel` (
`detail_id` bigint(20) DEFAULT NULL COMMENT '明细ID:PRODUCT/REDLINE=product_country.detail_id(空=产品全部);SALES=prc_price_set_detail.psd_id', `detail_id` bigint(20) DEFAULT NULL COMMENT '明细ID:PRODUCT/REDLINE=product_country.detail_id(空=产品全部);SALES=prc_price_set_detail.psd_id',
`price_type` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PRODUCT' COMMENT '价格类型 PRODUCT产品价/SALES销售价/REDLINE红线价', `price_type` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PRODUCT' COMMENT '价格类型 PRODUCT产品价/SALES销售价/REDLINE红线价',
`country_code` char(2) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '适用国家ISO2(空=全部)', `country_code` char(2) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '适用国家ISO2(空=全部)',
`is_del` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '是否删除 0未删除 1已删除',
`created_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建人', `created_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建人',
`create_time` datetime DEFAULT NULL, `create_time` datetime DEFAULT NULL,
`updated_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新人', `updated_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新人',
`update_time` datetime DEFAULT NULL, `update_time` datetime DEFAULT NULL,
PRIMARY KEY (`rel_id`), PRIMARY KEY (`rel_id`),
UNIQUE KEY `uk_rel_scope` (`sc_id`,`product_id`,`detail_id`,`price_type`,`country_code`), UNIQUE KEY `uk_rel_scope_is_del` (`sc_id`,`product_id`,`detail_id`,`price_type`,`country_code`,`is_del`),
KEY `idx_rel_sc` (`sc_id`), KEY `idx_rel_sc` (`sc_id`),
KEY `idx_rel_product` (`product_id`), KEY `idx_rel_product` (`product_id`),
KEY `idx_rel_product_code` (`product_code`), KEY `idx_rel_product_code` (`product_code`),
@@ -0,0 +1,185 @@
-- product / product_country / prc_surcharge: is_del (0 not deleted / 1 deleted)
SET NAMES utf8mb4;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'product'
AND COLUMN_NAME = 'is_del'
LIMIT 1
);
SET @sql := IF(@col IS NULL,
'ALTER TABLE product ADD COLUMN is_del char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ''0'' COMMENT ''是否删除 0未删除 1已删除'' AFTER status',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'product'
AND INDEX_NAME = 'uk_product_code_eff'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'SELECT 1', 'ALTER TABLE product DROP INDEX uk_product_code_eff');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'product'
AND INDEX_NAME = 'uk_product_code_eff_is_del'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'ALTER TABLE product ADD UNIQUE KEY uk_product_code_eff_is_del (product_code, effective_date, is_del)', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'product_country'
AND COLUMN_NAME = 'is_del'
LIMIT 1
);
SET @sql := IF(@col IS NULL,
'ALTER TABLE product_country ADD COLUMN is_del char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ''0'' COMMENT ''是否删除 0未删除 1已删除'' AFTER status',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'product_country'
AND INDEX_NAME = 'uk_product_country_zone_weight_eff'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'SELECT 1', 'ALTER TABLE product_country DROP INDEX uk_product_country_zone_weight_eff');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'product_country'
AND INDEX_NAME = 'uk_product_country_zone_weight_eff_is_del'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'ALTER TABLE product_country ADD UNIQUE KEY uk_product_country_zone_weight_eff_is_del (product_code, country_name, zone_code, weight_min, weight_max, effective_date, is_del)', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_surcharge'
AND COLUMN_NAME = 'is_del'
LIMIT 1
);
SET @sql := IF(@col IS NULL,
'ALTER TABLE prc_surcharge ADD COLUMN is_del char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ''0'' COMMENT ''是否删除 0未删除 1已删除'' AFTER ss_code',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
UPDATE product SET is_del = '0' WHERE is_del IS NULL;
UPDATE product_country SET is_del = '0' WHERE is_del IS NULL;
UPDATE prc_surcharge SET is_del = '0' WHERE is_del IS NULL;
-- redline_product / redline_product_country
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'redline_product'
AND COLUMN_NAME = 'is_del'
LIMIT 1
);
SET @sql := IF(@col IS NULL,
'ALTER TABLE redline_product ADD COLUMN is_del char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ''0'' COMMENT ''是否删除 0未删除 1已删除'' AFTER status',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'redline_product'
AND INDEX_NAME = 'uk_redline_product_code_eff'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'SELECT 1', 'ALTER TABLE redline_product DROP INDEX uk_redline_product_code_eff');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'redline_product'
AND INDEX_NAME = 'uk_redline_product_code_eff_is_del'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'ALTER TABLE redline_product ADD UNIQUE KEY uk_redline_product_code_eff_is_del (product_code, effective_date, is_del)', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'redline_product_country'
AND COLUMN_NAME = 'is_del'
LIMIT 1
);
SET @sql := IF(@col IS NULL,
'ALTER TABLE redline_product_country ADD COLUMN is_del char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ''0'' COMMENT ''是否删除 0未删除 1已删除'' AFTER status',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'redline_product_country'
AND INDEX_NAME = 'uk_redline_country_zone_weight_eff'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'SELECT 1', 'ALTER TABLE redline_product_country DROP INDEX uk_redline_country_zone_weight_eff');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'redline_product_country'
AND INDEX_NAME = 'uk_redline_country_zone_weight_eff_is_del'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'ALTER TABLE redline_product_country ADD UNIQUE KEY uk_redline_country_zone_weight_eff_is_del (product_code, country_name, zone_code, weight_min, weight_max, effective_date, is_del)', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
UPDATE redline_product SET is_del = '0' WHERE is_del IS NULL;
UPDATE redline_product_country SET is_del = '0' WHERE is_del IS NULL;
-- prc_surcharge_rel
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_surcharge_rel'
AND COLUMN_NAME = 'is_del'
LIMIT 1
);
SET @sql := IF(@col IS NULL,
'ALTER TABLE prc_surcharge_rel ADD COLUMN is_del char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ''0'' COMMENT ''是否删除 0未删除 1已删除'' AFTER country_code',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_surcharge_rel'
AND INDEX_NAME = 'uk_rel_scope'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'SELECT 1', 'ALTER TABLE prc_surcharge_rel DROP INDEX uk_rel_scope');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_surcharge_rel'
AND INDEX_NAME = 'uk_rel_scope_is_del'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'ALTER TABLE prc_surcharge_rel ADD UNIQUE KEY uk_rel_scope_is_del (sc_id, product_id, detail_id, price_type, country_code, is_del)', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
UPDATE prc_surcharge_rel SET is_del = '0' WHERE is_del IS NULL;
+4 -2
View File
@@ -13,6 +13,7 @@ CREATE TABLE IF NOT EXISTS `redline_product` (
`effective_date` datetime DEFAULT NULL COMMENT '目录生效时间(到小时)', `effective_date` datetime DEFAULT NULL COMMENT '目录生效时间(到小时)',
`expire_date` datetime DEFAULT NULL COMMENT '失效时间(空=长期)', `expire_date` datetime DEFAULT NULL COMMENT '失效时间(空=长期)',
`status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效', `status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效',
`is_del` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '是否删除 0未删除 1已删除',
`source_sheet` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源Excel sheet名', `source_sheet` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源Excel sheet名',
`pef_id` bigint(20) DEFAULT NULL COMMENT '关联导入价表Excel附件 prc_price_excel_file.pef_id', `pef_id` bigint(20) DEFAULT NULL COMMENT '关联导入价表Excel附件 prc_price_excel_file.pef_id',
`remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
@@ -22,7 +23,7 @@ CREATE TABLE IF NOT EXISTS `redline_product` (
`updated_by` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', `updated_by` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`product_id`) USING BTREE, PRIMARY KEY (`product_id`) USING BTREE,
UNIQUE KEY `uk_redline_product_code_eff` (`product_code`,`effective_date`), UNIQUE KEY `uk_redline_product_code_eff_is_del` (`product_code`,`effective_date`,`is_del`),
KEY `idx_redline_tax_status` (`tax_mode`,`status`) USING BTREE, KEY `idx_redline_tax_status` (`tax_mode`,`status`) USING BTREE,
KEY `idx_redline_product_code` (`product_code`), KEY `idx_redline_product_code` (`product_code`),
KEY `idx_redline_product_pef_id` (`pef_id`) KEY `idx_redline_product_pef_id` (`pef_id`)
@@ -47,10 +48,11 @@ CREATE TABLE IF NOT EXISTS `redline_product_country` (
`effective_date` datetime DEFAULT NULL COMMENT '生效时间(到小时)', `effective_date` datetime DEFAULT NULL COMMENT '生效时间(到小时)',
`expire_date` datetime DEFAULT NULL COMMENT '失效时间(空=开放)', `expire_date` datetime DEFAULT NULL COMMENT '失效时间(空=开放)',
`status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效', `status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效',
`is_del` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '是否删除 0未删除 1已删除',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`detail_id`) USING BTREE, PRIMARY KEY (`detail_id`) USING BTREE,
UNIQUE KEY `uk_redline_country_zone_weight_eff` (`product_code`,`country_name`,`zone_code`,`weight_min`,`weight_max`,`effective_date`), UNIQUE KEY `uk_redline_country_zone_weight_eff_is_del` (`product_code`,`country_name`,`zone_code`,`weight_min`,`weight_max`,`effective_date`,`is_del`),
KEY `idx_redline_country_code` (`country_code`) USING BTREE, KEY `idx_redline_country_code` (`country_code`) USING BTREE,
KEY `idx_redline_weight_match` (`product_code`,`country_code`,`weight_min`,`weight_max`) USING BTREE, KEY `idx_redline_weight_match` (`product_code`,`country_code`,`weight_min`,`weight_max`) USING BTREE,
KEY `idx_redline_product_eff` (`product_code`,`effective_date`,`expire_date`), KEY `idx_redline_product_eff` (`product_code`,`effective_date`,`expire_date`),
@@ -15,6 +15,7 @@
:search-columns="searchColumns" :search-columns="searchColumns"
:query="queryList" :query="queryList"
row-key="productId" row-key="productId"
:selection="true"
> >
<template #toolbar="{ selection }"> <template #toolbar="{ selection }">
<el-col :span="1.5"> <el-col :span="1.5">
@@ -33,6 +34,16 @@
</template> </template>
</el-dropdown> </el-dropdown>
</el-col> </el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="!selection.length"
@click="handleBatchDelete(selection)"
v-hasPermi="['price:redline:remove']"
>批量删除</el-button>
</el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button plain icon="Clock" @click="expiredRef.open()" v-hasPermi="['price:redline:list']">失效价格</el-button> <el-button plain icon="Clock" @click="expiredRef.open()" v-hasPermi="['price:redline:list']">失效价格</el-button>
</el-col> </el-col>
@@ -152,9 +163,10 @@ import RedlineExcelFileDrawer from './components/RedlineExcelFileDrawer.vue'
import RedlineCountryDrawer from './components/RedlineCountryDrawer.vue' import RedlineCountryDrawer from './components/RedlineCountryDrawer.vue'
import RedlineSurchargeDrawer from './components/RedlineSurchargeDrawer.vue' import RedlineSurchargeDrawer from './components/RedlineSurchargeDrawer.vue'
import RedlineExpiredDrawer from './components/RedlineExpiredDrawer.vue' import RedlineExpiredDrawer from './components/RedlineExpiredDrawer.vue'
import { listRedline, importRedlineExcelAsync, importRedlineCountryExcelAsync } from '@/api/price/redline' import { listRedline, delRedline, importRedlineExcelAsync, importRedlineCountryExcelAsync } from '@/api/price/redline'
import { listRegionOptions } from '@/api/data/region' import { listRegionOptions } from '@/api/data/region'
const { proxy } = getCurrentInstance()
const { bms_product_effect_status } = useDict('bms_product_effect_status') const { bms_product_effect_status } = useDict('bms_product_effect_status')
const extraParams = { statusGroup: 'active' } const extraParams = { statusGroup: 'active' }
@@ -240,6 +252,47 @@ function handleUpdate(row) {
formRef.value.open(row) formRef.value.open(row)
} }
function isPendingProduct(row) {
if (!row) return false
if (String(row.status) === '0') return true
if (!row.effectiveDate) return false
const eff = new Date(String(row.effectiveDate).replace(/-/g, '/')).getTime()
if (Number.isNaN(eff) || eff <= Date.now()) return false
if (row.expireDate) {
const exp = new Date(String(row.expireDate).replace(/-/g, '/')).getTime()
if (!Number.isNaN(exp) && exp <= Date.now()) return false
}
return true
}
function handleBatchDelete(selection) {
const rows = (selection || []).filter(r => r && r.productId != null)
if (!rows.length) {
proxy.$modal.msgWarning('请先勾选红线价')
return
}
const pending = rows.filter(isPendingProduct)
const blocked = rows.filter(r => !isPendingProduct(r))
if (!pending.length) {
proxy.$modal.msgWarning('仅待生效红线价可删除,当前勾选无待生效记录')
return
}
if (blocked.length) {
const tip = blocked.map(r => r.productCode || r.productId).join('、')
proxy.$modal.msgWarning('已跳过非待生效红线价:' + tip)
}
const codes = pending.map(r => r.productCode || r.productId).join('、')
const ids = pending.map(r => r.productId)
proxy.$modal.confirm(
'确认删除已选待生效红线价(' + pending.length + '个):'
+ codes
+ '?删除后产品及国家/重量段明细将一并清除,且不可恢复。'
).then(() => delRedline(ids)).then(() => {
tableRef.value.refresh()
proxy.$modal.msgSuccess('删除成功')
}).catch(() => {})
}
function handleImportCommand(command) { function handleImportCommand(command) {
if (command === 'country') { if (command === 'country') {
handleCountryImport() handleCountryImport()