Commit 61ba3c6a authored by fulixin's avatar fulixin

修改/advisory/body/getAdvisoryBodyList 查合作企业合作时间选项的逻辑

parent 5829b3b9
...@@ -146,7 +146,7 @@ security: ...@@ -146,7 +146,7 @@ security:
- /api/** - /api/**
- /actuator/** - /actuator/**
- /monitor/push/insert/** - /monitor/push/insert/**
# - /**
# 多租户配置 # 多租户配置
......
...@@ -25,7 +25,7 @@ public class AddLaborLeaderCustomerRiskBo { ...@@ -25,7 +25,7 @@ public class AddLaborLeaderCustomerRiskBo {
* 劳务队长身份证号 * 劳务队长身份证号
*/ */
@NotBlank(message = "劳务队长身份证号不能为空") @NotBlank(message = "劳务队长身份证号不能为空")
private String laborCaptainIdcard; private String laborCaptainIdCard;
/** /**
* 劳务队长联系电话 * 劳务队长联系电话
*/ */
...@@ -35,7 +35,7 @@ public class AddLaborLeaderCustomerRiskBo { ...@@ -35,7 +35,7 @@ public class AddLaborLeaderCustomerRiskBo {
* 挂靠单位(供应商名称) * 挂靠单位(供应商名称)
*/ */
@NotBlank(message = "挂靠单位名称不能为空") @NotBlank(message = "挂靠单位名称不能为空")
private String cusomerName; private String customerName;
/** /**
* 不良事由 * 不良事由
*/ */
......
...@@ -34,4 +34,16 @@ public class AdvisoryBodySearchBo { ...@@ -34,4 +34,16 @@ public class AdvisoryBodySearchBo {
* 经营范围 * 经营范围
*/ */
private String businessScope; private String businessScope;
/**
* 条数
*/
private Integer pageSize = 50;
/**
* 页数
*/
private Integer pageNum = 1;
} }
...@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; ...@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsk.cscec.domain.AdvisoryBody; import com.dsk.cscec.domain.AdvisoryBody;
import com.dsk.cscec.domain.bo.AdvisoryBodyBo; import com.dsk.cscec.domain.bo.AdvisoryBodyBo;
import com.dsk.cscec.domain.bo.AdvisoryBodySearchBo;
import com.dsk.cscec.domain.vo.AdvisoryBodySearchVo; import com.dsk.cscec.domain.vo.AdvisoryBodySearchVo;
import com.dsk.cscec.domain.vo.AdvisoryBodyVo; import com.dsk.cscec.domain.vo.AdvisoryBodyVo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -20,6 +21,29 @@ import java.util.List; ...@@ -20,6 +21,29 @@ import java.util.List;
* @since 2023-12-12 10:12:04 * @since 2023-12-12 10:12:04
*/ */
public interface AdvisoryBodyMapper extends BaseMapper<AdvisoryBody> { public interface AdvisoryBodyMapper extends BaseMapper<AdvisoryBody> {
/**
* 得到咨询机构及项目相关信息总条数
* @param bo
* @param bo
* @return
*/
Integer getAdvisoryBodyAndProjectMsgCount(@Param("bo") AdvisoryBodySearchBo bo);
/**
* 得到咨询机构及项目相关信息
* @param bo
* @return
*/
List<AdvisoryBodySearchVo> getAdvisoryBodyAndProjectMsg(@Param("bo") AdvisoryBodySearchBo bo);
/** /**
* 获取所有企业列表(咨询机构)数据 * 获取所有企业列表(咨询机构)数据
*/ */
......
...@@ -56,78 +56,130 @@ public class AdvisoryBodyServiceImpl extends ServiceImpl<AdvisoryBodyMapper, Adv ...@@ -56,78 +56,130 @@ public class AdvisoryBodyServiceImpl extends ServiceImpl<AdvisoryBodyMapper, Adv
*/ */
@Override @Override
public TableDataInfo<AdvisoryBodySearchVo> queryAdvisoryBodyList(AdvisoryBodySearchBo advisoryBodySearchBo, PageQuery pageQuery) { public TableDataInfo<AdvisoryBodySearchVo> queryAdvisoryBodyList(AdvisoryBodySearchBo advisoryBodySearchBo, PageQuery pageQuery) {
//先按照分页要求从咨询机构表中查出分页数据
QueryWrapper<AdvisoryBody> wrapper = Wrappers.query();
wrapper.like(StringUtils.isNotBlank(advisoryBodySearchBo.getAdvisoryBodyName()), "advisory_body_name", advisoryBodySearchBo.getAdvisoryBodyName())
.like(StringUtils.isNotBlank(advisoryBodySearchBo.getBusinessScope()), "business_scope", advisoryBodySearchBo.getBusinessScope())
.between("create_time",advisoryBodySearchBo.getMinLastCooperateDate(),advisoryBodySearchBo.getMaxLastCooperateDate());
Page<AdvisoryBodySearchVo> page = baseMapper.selectPageAdvisoryBodyList(pageQuery.build(), wrapper);
Date minLastCooperateDate = advisoryBodySearchBo.getMinLastCooperateDate(); //连表查AdvisoryBody AdvisoryBodyProject
Date maxLastCooperateDate = advisoryBodySearchBo.getMaxLastCooperateDate(); Page<AdvisoryBodySearchVo> page = new Page<>();
Integer count = baseMapper.getAdvisoryBodyAndProjectMsgCount(advisoryBodySearchBo);
if(count.equals(0)){
page.setTotal(count);
return TableDataInfo.build(page);
}
// Integer pageNum = (advisoryBodySearchBo.getPageNum()-1)*advisoryBodySearchBo.getPageSize();
Integer pageIndex = advisoryBodySearchBo.getPageNum() == 0?1:advisoryBodySearchBo.getPageNum(), pageSize = advisoryBodySearchBo.getPageSize();
Integer pageNum = (pageIndex-1)*pageSize;
advisoryBodySearchBo.setPageNum(pageNum);
//根据咨询机构cid查询对应的企业信息 List<AdvisoryBodySearchVo> advisoryBodyAndProjectMsg = baseMapper.getAdvisoryBodyAndProjectMsg(advisoryBodySearchBo);
List<AdvisoryBodySearchVo> advisoryBodySearchVoList = page.getRecords();
Iterator<AdvisoryBodySearchVo> iterator = advisoryBodySearchVoList.iterator(); advisoryBodyAndProjectMsg.stream().forEach(dto ->{
while (iterator.hasNext()) {
AdvisoryBodySearchVo advisoryBodySearchVo = iterator.next();
EnterpriseInfoHeaderBody infoHeaderBody = new EnterpriseInfoHeaderBody(); EnterpriseInfoHeaderBody infoHeaderBody = new EnterpriseInfoHeaderBody();
//有Cid的才去建设库查数据 if (ObjectUtil.isNotNull(dto.getAdvisoryBodyCid())) {
if (ObjectUtil.isNotNull(advisoryBodySearchVo.getAdvisoryBodyCid())) { infoHeaderBody.setCompanyId(Math.toIntExact(dto.getAdvisoryBodyCid()));
infoHeaderBody.setCompanyId(Math.toIntExact(advisoryBodySearchVo.getAdvisoryBodyCid()));
} else {
continue;
} }
Map<String, Object> companyMap = dskOpenApiUtil.requestBody("/api/jsk/enterprise/infoHeader", BeanUtil.beanToMap(infoHeaderBody, false, false)); Map<String, Object> companyMap = dskOpenApiUtil.requestBody("/api/jsk/enterprise/infoHeader", BeanUtil.beanToMap(infoHeaderBody, false, false));
Map companyData = MapUtils.getMap(companyMap, "data", null); Map companyData = MapUtils.getMap(companyMap, "data", null);
//填充查询最近一次合作时间与信息记录人
List<AdvisoryBodyProject> advisoryBodyProjectList = advisoryBodyProjectMapper.selectList(new LambdaQueryWrapper<AdvisoryBodyProject>()
.select(AdvisoryBodyProject::getCreateTime, AdvisoryBodyProject::getCreateBy)
.eq(AdvisoryBodyProject::getAdvisoryBodyCid, advisoryBodySearchVo.getAdvisoryBodyCid())
.orderByDesc(AdvisoryBodyProject::getCreateTime));
Date lastCooperateDate = null;
if (ObjectUtil.isNotNull(advisoryBodyProjectList) && !advisoryBodyProjectList.isEmpty()) {
//暂时取记录生成作为最近一次合作时间
//TODO:AdvisoryBodyProject表中保留了cooperate_time字段,应当取该字段作为最近一次合作时间,但产品并未给存入这个字段的需求
lastCooperateDate = advisoryBodyProjectList.get(0).getCreateTime();
advisoryBodySearchVo.setLastCooperateTime(lastCooperateDate);
advisoryBodySearchVo.setInfoRecorder(advisoryBodyProjectList.get(0).getCreateBy());
}
//筛选最近一次合作时间
if (ObjectUtil.isNotNull(lastCooperateDate)
&& ObjectUtil.isNotNull(minLastCooperateDate)
&& ObjectUtil.isNotNull(maxLastCooperateDate)) {
if (DateUtil.isExpired(minLastCooperateDate, maxLastCooperateDate, lastCooperateDate)) {
iterator.remove();//这里是原逻辑 page的总条数是后面添加的逻辑 有问题就直接去掉这一批逻辑(不知道之前为什么写这个逻辑)
Long count = page.getTotal()-1;
page.setTotal(count);
continue;
}
}
//经营范围 //经营范围
advisoryBodySearchVo.setBusinessStatus(MapUtils.getString(companyData, "businessStatus", "")); dto.setBusinessStatus(MapUtils.getString(companyData, "businessStatus", ""));
//法人 //法人
advisoryBodySearchVo.setCorporatePerson(MapUtils.getString(companyData, "corporatePerson", "")); dto.setCorporatePerson(MapUtils.getString(companyData, "corporatePerson", ""));
//注册资本 //注册资本
advisoryBodySearchVo.setRegCapital(MapUtils.getString(companyData, "regCapital", "")); dto.setRegCapital(MapUtils.getString(companyData, "regCapital", ""));
//拼接地区 //拼接地区
String provinceName = MapUtils.getString(companyData, "provinceName", ""); String provinceName = MapUtils.getString(companyData, "provinceName", "");
String cityName = MapUtils.getString(companyData, "cityName", ""); String cityName = MapUtils.getString(companyData, "cityName", "");
String districtName = MapUtils.getString(companyData, "districtName", ""); String districtName = MapUtils.getString(companyData, "districtName", "");
advisoryBodySearchVo.setRegArea(provinceName + "-" + cityName + "-" + districtName); dto.setRegArea(provinceName + "-" + cityName + "-" + districtName);
//成立日期 //成立日期
advisoryBodySearchVo.setRegisteredDate(MapUtils.getString(companyData, "registeredDate", "")); dto.setRegisteredDate(MapUtils.getString(companyData, "registeredDate", ""));
//经营范围 //经营范围
advisoryBodySearchVo.setBusinessScope(MapUtils.getString(companyData, "businessScope", "")); dto.setBusinessScope(MapUtils.getString(companyData, "businessScope", ""));
//合作项目数量 //合作项目数量
advisoryBodySearchVo.setCooperateProjectCount(advisoryBodyProjectMapper.selectCount(new LambdaQueryWrapper<AdvisoryBodyProject>() dto.setCooperateProjectCount(advisoryBodyProjectMapper.selectCount(new LambdaQueryWrapper<AdvisoryBodyProject>()
.eq(AdvisoryBodyProject::getAdvisoryBodyCid, advisoryBodySearchVo.getAdvisoryBodyCid()))); .eq(AdvisoryBodyProject::getAdvisoryBodyCid, dto.getAdvisoryBodyCid())));
}
});
//
// //先按照分页要求从咨询机构表中查出分页数据
// QueryWrapper<AdvisoryBody> wrapper = Wrappers.query();
// wrapper.like(StringUtils.isNotBlank(advisoryBodySearchBo.getAdvisoryBodyName()), "advisory_body_name", advisoryBodySearchBo.getAdvisoryBodyName())
// .like(StringUtils.isNotBlank(advisoryBodySearchBo.getBusinessScope()), "business_scope", advisoryBodySearchBo.getBusinessScope());
// if(ObjectUtil.isNotNull(advisoryBodySearchBo.getMinLastCooperateDate())
// || ObjectUtil.isNotNull(advisoryBodySearchBo.getMaxLastCooperateDate()) ){
// wrapper.between("create_time",advisoryBodySearchBo.getMinLastCooperateDate(),advisoryBodySearchBo.getMaxLastCooperateDate());
// }
//
// Page<AdvisoryBodySearchVo> page = baseMapper.selectPageAdvisoryBodyList(pageQuery.build(), wrapper);
//
// Date minLastCooperateDate = advisoryBodySearchBo.getMinLastCooperateDate();
// Date maxLastCooperateDate = advisoryBodySearchBo.getMaxLastCooperateDate();
//
// //根据咨询机构cid查询对应的企业信息
// List<AdvisoryBodySearchVo> advisoryBodySearchVoList = page.getRecords();
//
// Iterator<AdvisoryBodySearchVo> iterator = advisoryBodySearchVoList.iterator();
// while (iterator.hasNext()) {
// AdvisoryBodySearchVo advisoryBodySearchVo = iterator.next();
// EnterpriseInfoHeaderBody infoHeaderBody = new EnterpriseInfoHeaderBody();
// //有Cid的才去建设库查数据
// if (ObjectUtil.isNotNull(advisoryBodySearchVo.getAdvisoryBodyCid())) {
// infoHeaderBody.setCompanyId(Math.toIntExact(advisoryBodySearchVo.getAdvisoryBodyCid()));
// } else {
// continue;
// }
// Map<String, Object> companyMap = dskOpenApiUtil.requestBody("/api/jsk/enterprise/infoHeader", BeanUtil.beanToMap(infoHeaderBody, false, false));
// Map companyData = MapUtils.getMap(companyMap, "data", null);
//
// //填充查询最近一次合作时间与信息记录人
// List<AdvisoryBodyProject> advisoryBodyProjectList = advisoryBodyProjectMapper.selectList(new LambdaQueryWrapper<AdvisoryBodyProject>()
// .select(AdvisoryBodyProject::getCreateTime, AdvisoryBodyProject::getCreateBy)
// .eq(AdvisoryBodyProject::getAdvisoryBodyCid, advisoryBodySearchVo.getAdvisoryBodyCid())
// .orderByDesc(AdvisoryBodyProject::getCreateTime));
// Date lastCooperateDate = null;
// if (ObjectUtil.isNotNull(advisoryBodyProjectList) && !advisoryBodyProjectList.isEmpty()) {
// //暂时取记录生成作为最近一次合作时间
// //TODO:AdvisoryBodyProject表中保留了cooperate_time字段,应当取该字段作为最近一次合作时间,但产品并未给存入这个字段的需求
// lastCooperateDate = advisoryBodyProjectList.get(0).getCreateTime();
// advisoryBodySearchVo.setLastCooperateTime(lastCooperateDate);
// advisoryBodySearchVo.setInfoRecorder(advisoryBodyProjectList.get(0).getCreateBy());
// }
//
// //筛选最近一次合作时间
// if (ObjectUtil.isNotNull(lastCooperateDate)
// && ObjectUtil.isNotNull(minLastCooperateDate)
// && ObjectUtil.isNotNull(maxLastCooperateDate)) {
// if (DateUtil.isExpired(minLastCooperateDate, maxLastCooperateDate, lastCooperateDate)) {
// iterator.remove();//这里是原逻辑 page的总条数是后面添加的逻辑 有问题就直接去掉这一批逻辑(不知道之前为什么写这个逻辑)
// Long count = page.getTotal()-1;
// page.setTotal(count);
// continue;
// }
// }
//
// //经营范围
// advisoryBodySearchVo.setBusinessStatus(MapUtils.getString(companyData, "businessStatus", ""));
// //法人
// advisoryBodySearchVo.setCorporatePerson(MapUtils.getString(companyData, "corporatePerson", ""));
// //注册资本
// advisoryBodySearchVo.setRegCapital(MapUtils.getString(companyData, "regCapital", ""));
// //拼接地区
// String provinceName = MapUtils.getString(companyData, "provinceName", "");
// String cityName = MapUtils.getString(companyData, "cityName", "");
// String districtName = MapUtils.getString(companyData, "districtName", "");
// advisoryBodySearchVo.setRegArea(provinceName + "-" + cityName + "-" + districtName);
// //成立日期
// advisoryBodySearchVo.setRegisteredDate(MapUtils.getString(companyData, "registeredDate", ""));
// //经营范围
// advisoryBodySearchVo.setBusinessScope(MapUtils.getString(companyData, "businessScope", ""));
// //合作项目数量
// advisoryBodySearchVo.setCooperateProjectCount(advisoryBodyProjectMapper.selectCount(new LambdaQueryWrapper<AdvisoryBodyProject>()
// .eq(AdvisoryBodyProject::getAdvisoryBodyCid, advisoryBodySearchVo.getAdvisoryBodyCid())));
// }
page.setTotal(count);
page.setRecords(advisoryBodyAndProjectMsg);
page.setSize(pageSize);
page.setCurrent(pageIndex);
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
......
...@@ -48,15 +48,15 @@ public class LaborLeaderCustomerRiskServiceImpl extends ServiceImpl<LaborLeaderC ...@@ -48,15 +48,15 @@ public class LaborLeaderCustomerRiskServiceImpl extends ServiceImpl<LaborLeaderC
LaborLeaderCustomerRisk risk = BeanUtil.toBean(addBo, LaborLeaderCustomerRisk.class); LaborLeaderCustomerRisk risk = BeanUtil.toBean(addBo, LaborLeaderCustomerRisk.class);
risk.setRiskId(IdUtil.getSnowflakeNextId()); risk.setRiskId(IdUtil.getSnowflakeNextId());
//查询供应商cid //查询供应商cid
Map<String, Object> map = opportunityRadarService.enterpriseByName(addBo.getCusomerName()); Map<String, Object> map = opportunityRadarService.enterpriseByName(addBo.getCustomerName());
if (!ObjectUtils.isEmpty(map.get("data"))) { if (!ObjectUtils.isEmpty(map.get("data"))) {
Map<String, Object> data = BeanUtil.beanToMap(map.get("data")); Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
Integer companyId = MapUtil.getInt(data, "jskEid"); Integer companyId = MapUtil.getInt(data, "jskEid");
Assert.notNull(companyId, "挂靠单位不存在或请填写完整单位名称"); Assert.notNull(companyId, "挂靠单位不存在或请填写完整单位名称");
risk.setCustomerCid(companyId); risk.setCustomerCid(companyId);
} }
risk.setLaborCaptainIdCard(addBo.getLaborCaptainIdcard()); risk.setLaborCaptainIdCard(addBo.getLaborCaptainIdCard());
risk.setCustomerName(addBo.getCusomerName()); risk.setCustomerName(addBo.getCustomerName());
return baseMapper.insert(risk); return baseMapper.insert(risk);
} }
......
...@@ -3,6 +3,77 @@ ...@@ -3,6 +3,77 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsk.cscec.mapper.AdvisoryBodyMapper"> <mapper namespace="com.dsk.cscec.mapper.AdvisoryBodyMapper">
<select id="getAdvisoryBodyAndProjectMsgCount" parameterType="object" resultType="int">
SELECT
count(*)
FROM
advisory_body ab
LEFT JOIN advisory_body_project abp ON ab.advisory_body_cid = abp.advisory_body_cid
<where>
<if test='bo.advisoryBodyName != null and bo.advisoryBodyName != ""'>
and ab.advisory_body_name like concat('%',#{bo.advisoryBodyName},'%')
</if>
<if test='bo.businessScope != null and bo.businessScope != ""'>
and ab.business_scope like concat('%',#{bo.businessScope},'%')
</if>
<if test='bo.minLastCooperateDate != null'>
and abp.create_time >= #{bo.minLastCooperateDate }
</if>
<if test='bo.maxLastCooperateDate != null'>
and #{bo.maxLastCooperateDate } >= abp.create_time
</if>
</where>
</select>
<select id="getAdvisoryBodyAndProjectMsg" parameterType="object" resultType="com.dsk.cscec.domain.vo.AdvisoryBodySearchVo">
SELECT
ab.*,
abp.create_by,
abp.create_time lastCooperateTime
FROM
advisory_body ab
LEFT JOIN advisory_body_project abp ON ab.advisory_body_cid = abp.advisory_body_cid
<where>
<if test='bo.advisoryBodyName != null and bo.advisoryBodyName != ""'>
and ab.advisory_body_name like concat('%',#{bo.advisoryBodyName},'%')
</if>
<if test='bo.businessScope != null and bo.businessScope != ""'>
and ab.business_scope like concat('%',#{bo.businessScope},'%')
</if>
<if test='bo.minLastCooperateDate != null'>
and abp.create_time >= #{bo.minLastCooperateDate }
</if>
<if test='bo.maxLastCooperateDate != null'>
and #{bo.maxLastCooperateDate } >= abp.create_time
</if>
</where>
ORDER BY abp.create_time desc
limit #{bo.pageNum},#{bo.pageSize}
</select>
<select id="selectPageAdvisoryBodyList" resultType="com.dsk.cscec.domain.vo.AdvisoryBodySearchVo"> <select id="selectPageAdvisoryBodyList" resultType="com.dsk.cscec.domain.vo.AdvisoryBodySearchVo">
select select
<include refid="allColumn"></include> <include refid="allColumn"></include>
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
from d_customer dc from d_customer dc
left join f_supplier_limited fsl on (fsl.flaowufbid = dc.customer_id left join f_supplier_limited fsl on (fsl.flaowufbid = dc.customer_id
or fsl.fzhuanyefbid = dc.customer_id or fsl.ffgid = dc.customer_id or fsl.fzlid = dc.customer_id) or fsl.fzhuanyefbid = dc.customer_id or fsl.ffgid = dc.customer_id or fsl.fzlid = dc.customer_id)
where dc.recommend_org_id = 'F17305B4EA4444CBAB12892C7B99E475' where (dc.recommend_org_id = 'F17305B4EA4444CBAB12892C7B99E475' OR recommend_org_id IS NULL)
<if test="bo.customerName != null and bo.customerName != '' "> and dc.customer_name like concat('%',#{bo.customerName},'%')</if> <if test="bo.customerName != null and bo.customerName != '' "> and dc.customer_name like concat('%',#{bo.customerName},'%')</if>
<if test="bo.province != null and bo.province.size > 0 and (bo.city == null or bo.city.size == 0) "> <if test="bo.province != null and bo.province.size > 0 and (bo.city == null or bo.city.size == 0) ">
and dc.register_province in and dc.register_province in
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
from d_customer dc from d_customer dc
left join f_supplier_limited fsl on (fsl.flaowufbid = dc.customer_id left join f_supplier_limited fsl on (fsl.flaowufbid = dc.customer_id
or fsl.fzhuanyefbid = dc.customer_id or fsl.ffgid = dc.customer_id or fsl.fzlid = dc.customer_id) or fsl.fzhuanyefbid = dc.customer_id or fsl.ffgid = dc.customer_id or fsl.fzlid = dc.customer_id)
where dc.recommend_org_id = 'F17305B4EA4444CBAB12892C7B99E475' where (dc.recommend_org_id = 'F17305B4EA4444CBAB12892C7B99E475' OR recommend_org_id IS NULL)
<if test="bo.customerName != null and bo.customerName != '' "> and dc.customer_name like concat('%',#{bo.customerName},'%')</if> <if test="bo.customerName != null and bo.customerName != '' "> and dc.customer_name like concat('%',#{bo.customerName},'%')</if>
<if test="bo.province != null and bo.province.size > 0 and (bo.city == null or bo.city.size == 0) "> <if test="bo.province != null and bo.province.size > 0 and (bo.city == null or bo.city.size == 0) ">
and dc.register_province in and dc.register_province in
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment