提交 164d0932 authored 作者: 000516's avatar 000516

回写勤策有效门店的城市经理、省区经理、大区总监、战区、大区,数据来源于经销商客户经理所在的逻辑架构、经销商详

上级 a8834c87
......@@ -15,7 +15,6 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableRyFeignClients
@SpringBootApplication
@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 static void main(String[] args) {
......
package com.sfa.job.domain.feishu.dao;
import com.alibaba.fastjson2.JSONArray;
import com.sfa.job.pojo.feishu.response.QinceMarketEmployeeDto;
import java.util.List;
/**
* @author : liqiulin
* @date : 2025-05-20 16
* @describe :
*/
public interface IQinceMarketEmployeeDao {
void insert(JSONArray jsonArray);
List<QinceMarketEmployeeDto> selectByMd(String dateStr);
}
package com.sfa.job.domain.feishu.dao;
import com.alibaba.fastjson2.JSONArray;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.sfa.common.core.utils.bean.BeanUtils;
import com.sfa.job.domain.feishu.entity.QinceMarketEmployee;
import com.sfa.job.domain.feishu.mapper.QinceMarketEmployeeMapper;
import com.sfa.job.pojo.feishu.response.QinceMarketEmployeeDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* @author : liqiulin
* @date : 2025-05-20 16
* @describe :
*/
@DS("promotion")
@Service
public class QinceMarketEmployeeDaoImpl implements IQinceMarketEmployeeDao{
@Autowired
QinceMarketEmployeeMapper qinceMarketEmployeeMapper;
@Override
public void insert(JSONArray jsonArray) {
// jsonArray = 大区总监工号 大区总监姓名 省区经理工号 省区经理姓名 城市经理工号 城市经理姓名
String dqEmpNo = jsonArray.getString(0);
String dqEmpName = jsonArray.getString(1);
String zqEmpNo = jsonArray.getString(2);
String zqEmpName = jsonArray.getString(3);
String csEmpNo = jsonArray.getString(4);
String csEmpName = jsonArray.getString(5);
List<QinceMarketEmployee> dos = new ArrayList<>();
if (!Objects.isNull(dqEmpNo)) {
QinceMarketEmployee dqDo = new QinceMarketEmployee().setEmpNo(dqEmpNo).setEmpName(dqEmpName)
.setDqEmpNo(dqEmpNo).setDqEmpName(dqEmpName);
dos.add(dqDo);
}
if (!Objects.isNull(zqEmpNo)){
QinceMarketEmployee zqDo = new QinceMarketEmployee().setEmpNo(zqEmpNo).setEmpName(zqEmpName)
.setZqEmpNo(zqEmpNo).setZqEmpName(zqEmpName).setDqEmpNo(dqEmpNo).setDqEmpName(dqEmpName);
dos.add(zqDo);
}
if (!Objects.isNull(csEmpNo)) {
QinceMarketEmployee csDo = new QinceMarketEmployee().setEmpNo(csEmpNo).setEmpName(csEmpName)
.setCsEmpNo(csEmpNo).setCsEmpName(csEmpName).setZqEmpNo(zqEmpNo).setZqEmpName(zqEmpName).setDqEmpNo(dqEmpNo).setDqEmpName(dqEmpName);
dos.add(csDo);
}
if (CollectionUtils.isEmpty(dos)){
return;
}
qinceMarketEmployeeMapper.batchInsert(dos);
}
@Override
public List<QinceMarketEmployeeDto> selectByMd(String dateStr) {
List<QinceMarketEmployee> dos = qinceMarketEmployeeMapper.selectByMd(dateStr);
return BeanUtils.transitionDtos(dos, QinceMarketEmployeeDto.class);
}
}
package com.sfa.job.domain.feishu.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;
import lombok.experimental.Accessors;
/**
* 勤策-区域销售人员架构表,来源:https://wangxiaolu.feishu.cn/sheets/I076slXhlhY2RdtDetEc17ornYd?sheet=49e4ba
* @TableName qince_market_employee
*/
@Accessors(chain = true)
@TableName(value ="qince_market_employee")
@Data
public class QinceMarketEmployee implements Serializable {
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 大区总监
*/
private String dqEmpNo;
/**
* 大区总监
*/
private String dqEmpName;
/**
* 战区负责人
*/
private String zqEmpNo;
/**
* 战区负责人
*/
private String zqEmpName;
/**
* 城市经理
*/
private String csEmpNo;
/**
* 城市经理
*/
private String csEmpName;
/**
* 员工
*/
private String empNo;
/**
* 员工
*/
private String empName;
/**
* CP系统修改时间
*/
private Date modifyTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.sfa.job.domain.feishu.mapper;
import com.sfa.job.domain.feishu.entity.QinceMarketEmployee;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author a02200059
* @description 针对表【qince_market_employee(勤策-区域销售人员架构表,来源:https://wangxiaolu.feishu.cn/sheets/I076slXhlhY2RdtDetEc17ornYd?sheet=49e4ba)】的数据库操作Mapper
* @createDate 2025-05-20 16:10:09
* @Entity com.sfa.job.domain.feishu.entity.QinceMarketEmployee
*/
@Repository
public interface QinceMarketEmployeeMapper extends BaseMapper<QinceMarketEmployee> {
void batchInsert(@Param("dos") List<QinceMarketEmployee> dos);
List<QinceMarketEmployee> selectByMd(String dateStr);
}
......@@ -15,4 +15,6 @@ public interface IQinceDealerDao {
List<QinceDealerDto> getPushQinceDealers();
List<QinceDealerDto> findModifyList(String dateStr);
List<QinceDealerDto> findListByManagerCode(String empNo);
}
......@@ -35,4 +35,10 @@ public class QinceDealerDaoImpl implements IQinceDealerDao{
List<QinceDealer> qinceDealers = qinceDealerMapper.findModifyList(dateStr);
return BeanUtils.transitionDtos(qinceDealers, QinceDealerDto.class);
}
@Override
public List<QinceDealerDto> findListByManagerCode(String empNo) {
List<QinceDealer> qinceDealers = qinceDealerMapper.findListByManagerCode(empNo);
return BeanUtils.transitionDtos(qinceDealers, QinceDealerDto.class);
}
}
......@@ -20,6 +20,8 @@ public interface QinceDealerMapper extends BaseMapper<QinceDealer> {
List<QinceDealer> pushQinceDealers(String today);
List<QinceDealer> findModifyList(String dateStr);
List<QinceDealer> findListByManagerCode(String empNo);
}
......
package com.sfa.job.pojo.feishu.response;
import lombok.Data;
import lombok.experimental.Accessors;
@Accessors(chain = true)
@Data
public class QinceMarketEmployeeDto{
/**
* 大区总监
*/
private String dqEmpNo;
/**
* 大区总监
*/
private String dqEmpName;
/**
* 战区负责人
*/
private String zqEmpNo;
/**
* 战区负责人
*/
private String zqEmpName;
/**
* 城市经理
*/
private String csEmpNo;
/**
* 城市经理
*/
private String csEmpName;
/**
* 员工
*/
private String empNo;
/**
* 员工
*/
private String empName;
}
\ No newline at end of file
......@@ -46,7 +46,6 @@ public class ErpAxmr005ServiceImpl implements ErpAxmr005Service {
for (int i = 0; i < zhanquDataset.size(); i+=batchSize) {
// 计算当前批次的结束位置
int end = Math.min(i + batchSize, zhanquDataset.size());
System.out.println(end);
List<Object> batch = zhanquDataset.subList(i, end);
feiShuUtil.pushSetToSheet(range,batch,recordDto.getSheetToken(),tenantAccessToken);
}
......
......@@ -2,6 +2,7 @@ package com.sfa.job.service.feishu;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.sfa.job.domain.feishu.dao.IQinceMarketEmployeeDao;
import com.sfa.job.domain.use.dao.IFeishuSheetRecordDao;
import com.sfa.job.enums.FSRecordEnum;
import com.sfa.job.pojo.response.FeishuSheetRecordDto;
......@@ -22,24 +23,22 @@ public class PullSheetServiceImpl implements IPullSheetService{
@Autowired
private IFeishuSheetRecordDao feishushetRecordDao;
@Autowired
private IQinceMarketEmployeeDao qinceMarketEmployeeDao;
@Autowired
private FeiShuUtil feiShuUtil;
/**
* 拉取表格 - 勤策门店的城市经理、省区经理、大区总监
* https://wangxiaolu.feishu.cn/sheets/I076slXhlhY2RdtDetEc17ornYd?sheet=49e4ba
*/
@Override
public void qinceSotreManage() {
FeishuSheetRecordDto recordDto = feishushetRecordDao.selectOne(FSRecordEnum.XS_USER_RELATION.getType());
JSONObject jsonObject = feiShuUtil.pullSheetOneRange(recordDto.getSheetToken(), feiShuUtil.getBotToken1(), recordDto.getRanges());
JSONArray values = jsonObject.getJSONArray("values");
// 创建逻辑构架人员关系表
// 创建逻辑构架人员关系对象
// 遍历values数组,获取每个对象的values数组
values.forEach(item -> {
JSONArray jsonArray = (JSONArray) item;
});
for (int i = 0; i < values.size(); i++) {
JSONArray jsonArray = values.getJSONArray(i);
qinceMarketEmployeeDao.insert(jsonArray);
}
}
}
......@@ -4,8 +4,10 @@ import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.sfa.job.domain.feishu.dao.IQinceMarketEmployeeDao;
import com.sfa.job.domain.qince.dao.IQinceClienteleStoreDao;
import com.sfa.job.domain.qince.dao.IQinceDealerDao;
import com.sfa.job.pojo.feishu.response.QinceMarketEmployeeDto;
import com.sfa.job.pojo.qince.response.QinceClienteleStoreDto;
import com.sfa.job.pojo.qince.response.QinceDealerDto;
import com.sfa.job.service.qince.IQinceDealerQueryService;
......@@ -31,6 +33,8 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
@Autowired
private IQinceClienteleStoreDao qinceClienteleStoreDao;
@Autowired
private IQinceMarketEmployeeDao qinceMarketEmployeeDao;
@Autowired
private QinCeUtils qinCeUtils;
@Override
......@@ -81,7 +85,6 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
Map<String, Object> params = qinCeUtils.queryCusVisitRecordParams(queryDate);
String url = qinCeUtils.builderUrl(QinCeUtils.QUERY_CUS_VISIT_RECORD, params);
JSONArray recordsJson = qinCeUtils.postArray(url, params);
System.out.println(recordsJson);
} catch (Exception e) {
log.error("查询城市经理客户拜访失败:{}", e.getMessage());
}
......@@ -90,37 +93,43 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
@Override
public void updateQinceStore() {
// 第一步:查询有变动的人员信息:营销中心-逻辑组织架构表
// 第二步:根据每个人员信息,查询出所负责的经销商
// 第三步:根据每家经销商,查询出归属的有效门店
// 第四步:更新每家门店信息:大区、战区取经销商的;城市经理、战区经理、大区总监取人员架构表的
String dateStr = DateUtil.today();
List<QinceDealerDto> dealers = qinceDealerDao.findModifyList(dateStr);
List<QinceMarketEmployeeDto> empDtos = qinceMarketEmployeeDao.selectByMd(dateStr);
for (QinceMarketEmployeeDto empDto : empDtos) {
List<QinceDealerDto> dealers = qinceDealerDao.findListByManagerCode(empDto.getEmpNo());
for (QinceDealerDto dealer : dealers) {
List<QinceClienteleStoreDto> storeDtoList = qinceClienteleStoreDao.findListByDealerId(dealer.getDealerId());
// 查询客户经理的上级、上上级
String managerCode = dealer.getDealerManagerCode();
QinceClienteleStoreDto storeInfo = new QinceClienteleStoreDto(dealer.getDealerManager(),"","");
pushQinceStoreInfo(storeDtoList,storeInfo);
break;
pushQinceStoreInfo(storeDtoList, dealer,empDto);
}
}
}
private void pushQinceStoreInfo(List<QinceClienteleStoreDto> storeDtoList,QinceClienteleStoreDto storeInfo) {
private void pushQinceStoreInfo(List<QinceClienteleStoreDto> storeDtoList,QinceDealerDto dealer,QinceMarketEmployeeDto empDto) {
for (QinceClienteleStoreDto storeDto : storeDtoList) {
try {
System.out.println(storeDto.getQcId() + " ---- " + storeDto.getStoreName());
Map<String, Object> params = new HashMap<>();
try {
params.put("store_waiqin_id", storeDto.getQcId());
params.put("store_name", storeDto.getStoreName());
List<Map<String, String>> exts = new ArrayList<>();
exts.add(Maps.of("store_ext_key", "城市经理", "store_ext_value", storeInfo.getManagerName()));
exts.add(Maps.of("store_ext_key", "战区经理", "store_ext_value", ""));
exts.add(Maps.of("store_ext_key", "大区总监", "store_ext_value", ""));
exts.add(Maps.of("store_ext_key", "城市经理", "store_ext_value", empDto.getCsEmpName()));
exts.add(Maps.of("store_ext_key", "战区经理", "store_ext_value", empDto.getZqEmpName()));
exts.add(Maps.of("store_ext_key", "大区总监", "store_ext_value", empDto.getDqEmpName()));
exts.add(Maps.of("store_ext_key", "大区", "store_ext_value", dealer.getDqOrgName()));
exts.add(Maps.of("store_ext_key", "战区", "store_ext_value", dealer.getZqOrgName()));
params.put("exts", exts);
// String url = qinCeUtils.builderUrl(QinCeUtils.MODIFY_STORE, params);
// JSONObject jsonObject = qinCeUtils.postQC(url, params);
}catch (Exception e) {
log.error("更新勤策门店失败:{}", e.getMessage());
String url = qinCeUtils.builderUrl(QinCeUtils.MODIFY_STORE, params);
qinCeUtils.postQC(url, params);
} catch (Exception e) {
log.error("勤策门店更新失败:{}\n{}", JSONObject.toJSONString(params), e.getMessage());
}
break;
}
}
}
......@@ -113,7 +113,6 @@ public class FeiShuUtil {
params.put("ranges", ranges);
String result = HttpUtil.createGet(SHEET_URL + sheetToken + VALUES_BATCH_GET).form(params).auth("Bearer " + autoToken).contentType(CONTENT_TYPE).execute().body();
JSONObject resultJson = JSONObject.parseObject(result);
System.out.println(resultJson);
int code = resultJson.getInteger("code");
if (code != 0) {
throw new RuntimeException("获取飞书表格范围数据错误:"+resultJson.getString("msg"));
......
......@@ -65,7 +65,6 @@ public class QinCeUtils {
JSONObject resultJson = JSONObject.parseObject(requestBody);
String returnCode = resultJson.getString("return_code");
if (!"0".equals(returnCode)) {
log.error("请求错误,返回结果:{}", requestBody);
throw new RuntimeException("OkHttp.post请求error,详情:" + requestBody);
}
return resultJson;
......
......@@ -15,9 +15,14 @@ public class PullSheet {
@Autowired
private IPullSheetService pullSheetService;
@XxlJob("PullSheetSotreManage")
/**
* 拉取表格 - 勤策门店的城市经理、省区经理、大区总监
* https://wangxiaolu.feishu.cn/sheets/I076slXhlhY2RdtDetEc17ornYd?sheet=49e4ba
*/
@XxlJob("pull_sheet_store_manage")
public void qinceSotreManage(){
pullSheetService.qinceSotreManage();
}
}
......@@ -19,19 +19,23 @@ public class QinceCoreTask {
@XxlJob("qince_modify_dealer")
public void qinceCoreTask() {
log.info("回写勤策经销商大区、战区信息 start");
log.info("回写勤策-经销商大区、战区信息 start");
qinceCoreService.updateQinceDealerInfo();
log.info("回写勤策经销商大区、战区信息 end");
log.info("回写勤策-经销商大区、战区信息 end");
}
@XxlJob("qince_modify_store")
public void qinceCoreStore(){
log.info("回写勤策门店城市经理、战区经理、大区总监 start");
log.info("回写勤策-门店城市经理、战区经理、大区总监 start");
qinceCoreService.updateQinceStore();
log.info("回写勤策门店城市经理、战区经理、大区总监 end");
log.info("回写勤策-门店城市经理、战区经理、大区总监 end");
}
@XxlJob("qince_cus_visit_record")
/**
* 暂停开发
*/
// @XxlJob("qince_cus_visit_record")
public void queryCusVisitRecord() {
log.info("查询勤策客户拜访记录 start");
qinceCoreService.queryCusVisitRecord();
......
<?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.feishu.mapper.QinceMarketEmployeeMapper">
<resultMap id="BaseResultMap" type="com.sfa.job.domain.feishu.entity.QinceMarketEmployee">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="dqEmpNo" column="dq_emp_no" jdbcType="VARCHAR"/>
<result property="dqEmpName" column="dq_emp_name" jdbcType="VARCHAR"/>
<result property="zqEmpNo" column="zq_emp_no" jdbcType="VARCHAR"/>
<result property="zqEmpName" column="zq_emp_name" jdbcType="VARCHAR"/>
<result property="csEmpNo" column="cs_emp_no" jdbcType="VARCHAR"/>
<result property="csEmpName" column="cs_emp_name" jdbcType="VARCHAR"/>
<result property="empNo" column="emp_no" jdbcType="VARCHAR"/>
<result property="empName" column="emp_name" jdbcType="VARCHAR"/>
<result property="modifyTime" column="modify_time" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id,dq_emp_no,dq_emp_name,
zq_emp_no,zq_emp_name,cs_emp_no,
cs_emp_name,emp_no,emp_name,
modify_time
</sql>
<insert id="batchInsert" parameterType="java.util.List">
insert into qince_market_employee (emp_no, emp_name, dq_emp_no, dq_emp_name, zq_emp_no, zq_emp_name, cs_emp_no,
cs_emp_name) values
<foreach collection="dos" item="item" separator=",">
(#{item.empNo},#{item.empName},#{item.dqEmpNo},#{item.dqEmpName},#{item.zqEmpNo},#{item.zqEmpName},#{item.csEmpNo},#{item.csEmpName})
</foreach>
on duplicate key update emp_name = values(emp_name),dq_emp_no = values(dq_emp_no),dq_emp_name =
values(dq_emp_name),zq_emp_no = values(zq_emp_no),zq_emp_name = values(zq_emp_name),cs_emp_no = values(cs_emp_no),cs_emp_name =
values(cs_emp_name)
</insert>
<select id="selectByMd" resultMap="BaseResultMap">
select dq_emp_no,dq_emp_name,
zq_emp_no,zq_emp_name,cs_emp_no,
cs_emp_name,emp_no,emp_name
from qince_market_employee where DATE(modify_time) = #{dateStr}
</select>
</mapper>
......@@ -33,11 +33,10 @@
</resultMap>
<resultMap id="PushQince_2" type="com.sfa.job.domain.qince.entity.QinceDealer">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="dqOrgName" column="dq_org_name" 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"/>
<result property="dealerManagerCode" column="dealer_manager_code" jdbcType="VARCHAR"/>
<result property="dealerManager" column="dealer_manager" jdbcType="VARCHAR"/>
</resultMap>
......@@ -77,4 +76,12 @@
and dealer_id = '000324'
</select>
<select id="findListByManagerCode" resultMap="PushQince">
select dq_org_name, zq_org_name, dealer_id, dealer_name
from qince_dealer
where dealer_type = '经销商'
and dealer_cooperate_status = '1'
and dealer_status = '1'
and dealer_manager_code = #{empNo}
</select>
</mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论