提交 95e5e094 authored 作者: 李秋林's avatar 李秋林

xxl-job定时回写勤策经销商大区、战区信息

上级 3142a473
...@@ -14,7 +14,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; ...@@ -14,7 +14,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableCustomConfig @EnableCustomConfig
@EnableRyFeignClients @EnableRyFeignClients
@SpringBootApplication @SpringBootApplication
@MapperScan({"com.sfa.job.domain.job.mapper","com.sfa.job.domain.system.mapper","com.sfa.job.domain.order.mapper","com.sfa.job.domain.erp.mapper","com.sfa.job.domain.use.mapper"}) @MapperScan("com.sfa.job.domain.*.mapper")
//@MapperScan({"com.sfa.job.domain.job.mapper","com.sfa.job.domain.system.mapper","com.sfa.job.domain.order.mapper","com.sfa.job.domain.erp.mapper","com.sfa.job.domain.use.mapper"})
public class SfaJobApplication public class SfaJobApplication
{ {
public static void main(String[] args) { public static void main(String[] args) {
......
package com.sfa.job.domain.qince.dao;
import com.sfa.job.pojo.qince.response.QinceDealerDto;
import java.util.List;
/**
* @author : liqiulin
* @date : 2025-04-24 15
* @describe :
*/
public interface IQinceDealerDao {
List<QinceDealerDto> getPushQinceDealers();
}
package com.sfa.job.domain.qince.dao;
import cn.hutool.core.date.DateUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.sfa.common.core.utils.bean.BeanUtils;
import com.sfa.job.domain.qince.entity.QinceDealer;
import com.sfa.job.domain.qince.mapper.QinceDealerMapper;
import com.sfa.job.pojo.qince.response.QinceDealerDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author : liqiulin
* @date : 2025-04-24 15
* @describe :
*/
@DS("promotion")
@Service
public class QinceDealerDaoImpl implements IQinceDealerDao{
@Autowired
private QinceDealerMapper qinceDealerMapper;
@Override
public List<QinceDealerDto> getPushQinceDealers() {
String today = DateUtil.today();
List<QinceDealer> qinceDealers = qinceDealerMapper.pushQinceDealers(today);
return BeanUtils.transitionDtos(qinceDealers, QinceDealerDto.class);
}
}
package com.sfa.job.domain.qince.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 勤策-经销商表
* @TableName qince_dealer
*/
@TableName(value ="qince_dealer")
@Data
public class QinceDealer implements Serializable {
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 所属大区
*/
private String dqOrgQcId;
/**
* 所属大区
*/
private String dqOrgName;
/**
* 所属战区
*/
private String zqOrgQcId;
/**
* 所属战区
*/
private String zqOrgName;
/**
*
*/
private String dealerDeptWaiqin365Id;
/**
*
*/
private String dealerDeptName;
/**
* 经销商编码
*/
private String dealerId;
/**
* 经销商名称
*/
private String dealerName;
/**
* 经销商类型名称
*/
private String dealerType;
/**
* 经销商删除状态。0:删除,1:正常
*/
private String dealerStatus;
/**
* 合作状态。0:终止合作,1:合作中,2:未合作,3:有意向
*/
private String dealerCooperateStatus;
/**
* 勤策中的创建时间
*/
private Date createTime;
/**
* CP系统创建时间
*/
private Date ct;
/**
* CP系统修改时间
*/
private Date mt;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.sfa.job.domain.qince.mapper;
import com.sfa.job.domain.qince.entity.QinceDealer;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author a02200059
* @description 针对表【qince_dealer(勤策-经销商表)】的数据库操作Mapper
* @createDate 2025-04-24 15:30:23
* @Entity com.sfa.job.domain.qince.entity.QinceDealer
*/
@Repository
public interface QinceDealerMapper extends BaseMapper<QinceDealer> {
List<QinceDealer> pushQinceDealers(String today);
}
package com.sfa.job.pojo.qince.response;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 勤策-经销商表
*/
@Data
public class QinceDealerDto implements Serializable {
/**
* 主键id
*/
private Integer id;
/**
* 所属大区
*/
private String dqOrgQcId;
/**
* 所属大区
*/
private String dqOrgName;
/**
* 所属战区
*/
private String zqOrgQcId;
/**
* 所属战区
*/
private String zqOrgName;
/**
*
*/
private String dealerDeptWaiqin365Id;
/**
*
*/
private String dealerDeptName;
/**
* 经销商编码
*/
private String dealerId;
/**
* 经销商名称
*/
private String dealerName;
/**
* 经销商类型名称
*/
private String dealerType;
/**
* 经销商删除状态。0:删除,1:正常
*/
private String dealerStatus;
/**
* 合作状态。0:终止合作,1:合作中,2:未合作,3:有意向
*/
private String dealerCooperateStatus;
/**
* 勤策中的创建时间
*/
private Date createTime;
/**
* CP系统创建时间
*/
private Date ct;
/**
* CP系统修改时间
*/
private Date mt;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.sfa.job.service.qince;
/**
* @author : liqiulin
* @date : 2025-04-24 16
* @describe :
*/
public interface IQinceDealerQueryService {
void updateQinceDealerInfo();
}
package com.sfa.job.service.qince.impl;
import com.alibaba.fastjson.JSONObject;
import com.sfa.job.domain.qince.dao.IQinceDealerDao;
import com.sfa.job.pojo.qince.response.QinceDealerDto;
import com.sfa.job.service.qince.IQinceDealerQueryService;
import com.sfa.job.util.QinCeUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author : liqiulin
* @date : 2025-04-24 16
* @describe :
*/
@Slf4j
@Service
public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
@Autowired
private IQinceDealerDao qinceDealerDao;
@Autowired
private QinCeUtils qinCeUtils;
@Override
public void updateQinceDealerInfo() {
/**
* 查询需要更新的经销商
*/
List<QinceDealerDto> pushQinceDealers = qinceDealerDao.getPushQinceDealers();
/**
* 反写勤策中的自定义字段:大区、战区
*/
for (QinceDealerDto dealerDTO : pushQinceDealers) {
Map<String, Object> ext1 = new HashMap<>();
ext1.put("dealer_ext_key","大区");
ext1.put("dealer_ext_value",dealerDTO.getDqOrgName());
Map<String, Object> ext2 = new HashMap<>();
ext2.put("dealer_ext_key","战区");
ext2.put("dealer_ext_value",dealerDTO.getZqOrgName());
Map<String, Object> params = new HashMap<>();
params.put("dealer_id",dealerDTO.getDealerId());
params.put("exts", Arrays.asList(ext1, ext2));
String url = qinCeUtils.builderUrl(QinCeUtils.MODIFY_DEALER, params);
qinCeUtils.postQC(url, params);
}
log.info("更新勤策经销商战区、大区信息完成,更新量:{}",pushQinceDealers.size());
}
}
package com.sfa.job.util;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.Map;
import java.util.UUID;
/**
* @author : liqiulin
* @date : 2025-04-24 16
* @describe :
*/
@Slf4j
@Component
public class QinCeUtils {
/**
* =================== 勤策API - config ===================
*/
@Value("${qince.open_api}")
private String OPEN_API;
@Value("${qince.open_id}")
private String OPEN_ID;
@Value("${qince.app_key}")
private String APP_KEY;
/**
* =================== 勤策API - path ===================
*/
// 修改经销商
public static final String MODIFY_DEALER = "/api/dealer/v1/modifyDealer/";
public String builderUrl(String sidepath, Map<String, Object> params) {
String msgId = UUID.randomUUID().toString();
Long currentTimeMillis = System.currentTimeMillis();
String digest = getDigest(params, currentTimeMillis);
StringBuilder builder = new StringBuilder().append(OPEN_API).append(sidepath).append(OPEN_ID).append("/").append(currentTimeMillis).append("/").append(digest).append("/").append(msgId);
return builder.toString();
}
public Map<String, Object> modifyDealerParams(){
return null;
}
public JSONObject postQC(String url, Object params) {
String requestBody = HttpUtil.createPost(url).contentType("application/json;charset=utf-8").header("","").body(JSONObject.toJSONString(params)).execute().body();
JSONObject resultJson = JSONObject.parseObject(requestBody);
String returnCode = resultJson.getString("return_code");
if (!"0".equals(returnCode)) {
throw new RuntimeException("OkHttp.post请求error,详情:" + requestBody);
}
return resultJson;
}
private String getDigest(Map<String, Object> params, Long currentTimeMillis) {
String json = "";
if (!CollectionUtils.isEmpty(params)) {
json = JSONObject.toJSONString(params);
}
String digest = DigestUtils.md5Hex(json + "|" + APP_KEY + "|" + currentTimeMillis);
return digest;
}
}
package com.sfa.job.xxljob.qince;
import com.sfa.job.service.qince.IQinceDealerQueryService;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author : liqiulin
* @date : 2025-04-24 17
* @describe :
*/
@Component
@Slf4j
public class QinceCoreTask {
@Autowired
private IQinceDealerQueryService qinceCoreService;
@XxlJob("qince_modify_dealer")
public void qinceCoreTask() {
log.info("回写勤策经销商大区、战区信息 start");
qinceCoreService.updateQinceDealerInfo();
log.info("回写勤策经销商大区、战区信息 end");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sfa.job.domain.qince.mapper.QinceDealerMapper">
<resultMap id="BaseResultMap" type="com.sfa.job.domain.qince.entity.QinceDealer">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="dqOrgQcId" column="dq_org_qc_id" jdbcType="VARCHAR"/>
<result property="dqOrgName" column="dq_org_name" jdbcType="VARCHAR"/>
<result property="zqOrgQcId" column="zq_org_qc_id" jdbcType="VARCHAR"/>
<result property="zqOrgName" column="zq_org_name" jdbcType="VARCHAR"/>
<result property="dealerDeptWaiqin365Id" column="dealer_dept_waiqin365_id" jdbcType="VARCHAR"/>
<result property="dealerDeptName" column="dealer_dept_name" jdbcType="VARCHAR"/>
<result property="dealerId" column="dealer_id" jdbcType="VARCHAR"/>
<result property="dealerName" column="dealer_name" jdbcType="VARCHAR"/>
<result property="dealerType" column="dealer_type" jdbcType="VARCHAR"/>
<result property="dealerStatus" column="dealer_status" jdbcType="CHAR"/>
<result property="dealerCooperateStatus" column="dealer_cooperate_status" jdbcType="CHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="ct" column="ct" jdbcType="TIMESTAMP"/>
<result property="mt" column="mt" jdbcType="TIMESTAMP"/>
</resultMap>
<resultMap id="PushQince" type="com.sfa.job.domain.qince.entity.QinceDealer">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="dqOrgQcId" column="dq_org_qc_id" jdbcType="VARCHAR"/>
<result property="dqOrgName" column="dq_org_name" jdbcType="VARCHAR"/>
<result property="zqOrgQcId" column="zq_org_qc_id" jdbcType="VARCHAR"/>
<result property="zqOrgName" column="zq_org_name" jdbcType="VARCHAR"/>
<result property="dealerId" column="dealer_id" jdbcType="VARCHAR"/>
<result property="dealerName" column="dealer_name" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,dq_org_qc_id,dq_org_name,
zq_org_qc_id,zq_org_name,dealer_dept_waiqin365_id,
dealer_dept_name,dealer_id,dealer_name,
dealer_type,dealer_status,dealer_cooperate_status,
create_time,ct,mt
</sql>
<select id="pushQinceDealers" resultMap="PushQince">
select id,
dq_org_qc_id,
dq_org_name,
zq_org_qc_id,
zq_org_name,
dealer_id,
dealer_name
from qince_dealer
where dealer_cooperate_status = 1
and dealer_status = 1
and dealer_type = '经销商'
and dq_org_qc_id is not null
and zq_org_qc_id is not null
and DATE (mt) = #{today}
</select>
</mapper>
package com.sfa.job.service.qince.impl;
import com.sfa.job.service.qince.IQinceDealerQueryService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import static org.junit.Assert.*;
/**
* @author : liqiulin
* @date : 2025-04-24 16
* @describe :
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class QinceDealerQueryServiceImplTest {
@Autowired
private IQinceDealerQueryService qinceDealerQueryService;
@Test
public void updateQinceDealerInfo() {
qinceDealerQueryService.updateQinceDealerInfo();
}
}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论