提交 0f26f385 authored 作者: 000516's avatar 000516

暂存代码

上级 3805a22e
package com.sfa.operation;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import com.sfa.common.security.annotation.EnableCustomConfig;
import com.sfa.common.security.annotation.EnableRyFeignClients;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import java.util.Properties;
@ComponentScan(basePackages = {"com.sfa.common.core.utils.sdk","com.sfa.operation"})
@EnableCustomConfig
@EnableRyFeignClients
@MapperScan("com.sfa.operation.domain.mapper")
@MapperScan("com.sfa.operation.domain.*.mapper")
@SpringBootApplication
public class WangxiaoluSfaModuleOperationApplication {
public static void main(String[] args) {
SpringApplication.run(WangxiaoluSfaModuleOperationApplication.class, args);
final String proNacosIp = System.getenv("PRO_NACOS_IP");
final String proNacosPort = System.getenv("PRO_NACOS_PORT");
final String proNacosNameSpace = System.getenv("PRO_NACOS_NS");
final String serviceIp = System.getenv("SERVICE_IP");
final String servicePort = System.getenv("SERVICE_PORT");
// todo qa\live没问题之后删除打印信息
System.out.println("打印环境变量");
System.out.println("proNacosIp:"+proNacosIp);
System.out.println("proNacosPort:"+proNacosPort);
System.out.println("proNacosNameSpace:"+proNacosNameSpace);
System.out.println("serviceIp:"+serviceIp);
System.out.println("servicePort:"+servicePort);
try {
// 创建Nacos客户端配置(需要注册的地址,命名空间ID)
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, proNacosIp+":"+proNacosPort);
properties.put(PropertyKeyConst.NAMESPACE, proNacosNameSpace);
// 创建NamingService实例
NamingService namingService = NacosFactory.createNamingService(properties);
// 注册服务到以上配置的nacos中
Instance instance1 = new Instance();
instance1.setIp(serviceIp);
instance1.setPort(Integer.parseInt(servicePort));
namingService.registerInstance("wangxiaolu-sfa-operation","promotion", instance1);
} catch (NacosException e) {
e.printStackTrace();
}
}
}
......@@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.sfa.common.core.domain.R;
import com.sfa.common.core.web.domain.AjaxResult;
import org.springframework.core.MethodParameter;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
......@@ -25,11 +26,15 @@ public class ControllerResponseAdvice implements ResponseBodyAdvice<Object>{
*/
@Override
public boolean supports(MethodParameter methodParameter, Class converterType) {
if (methodParameter.getParameterType().isAssignableFrom(AjaxResult.class)) {
return false;
}
return !methodParameter.getParameterType().isAssignableFrom(R.class);
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
response.getHeaders().add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
// String类型不能直接包装
if (methodParameter.getGenericParameterType().equals(String.class)) {
ObjectMapper objectMapper = new ObjectMapper();
......
package com.sfa.operation.controller.core;
package com.sfa.operation.controller.kq.core;
import com.sfa.common.security.utils.SecurityUtils;
import com.sfa.operation.pojo.request.KqMxVo;
import com.sfa.operation.pojo.response.SfaKqMxDto;
import com.sfa.operation.service.IKqMxCoreService;
import com.sfa.operation.pojo.kq.request.KqMxVo;
import com.sfa.operation.pojo.kq.response.SfaKqMxDto;
import com.sfa.operation.service.kq.IKqMxCoreService;
import com.sfa.system.api.model.LoginUser;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -18,7 +18,7 @@ import java.util.Date;
/**
* @author : liqiulin
* @date : 2024-11-04 17
* @describe :
* @describe : 考勤明细
*/
@RestController
@RequestMapping("/kqmx/core")
......
package com.sfa.operation.controller.query;
package com.sfa.operation.controller.kq.query;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.sfa.common.core.utils.DateUtils;
import com.sfa.common.security.utils.SecurityUtils;
import com.sfa.operation.service.IKqMxQueryService;
import com.sfa.operation.service.kq.IKqMxQueryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
......
package com.sfa.operation.controller.promotion.cpcore;
import com.sfa.operation.service.promotion.ICpPlanQueryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDate;
import java.util.List;
/**
* @author : liqiulin
* @date : 2025-05-27 18
* @describe : CP计划核心操作接口
*/
@RequestMapping("/cpplan")
@RestController
public class CpPlanQueryController {
@Autowired
private ICpPlanQueryService cpPlanQueryService;
/**
* 审批当月数据
*/
@PostMapping("/approval")
public List<String> createApproval(){
LocalDate now = LocalDate.now();
int year = now.getYear();
int monthValue = now.getMonthValue();
return cpPlanQueryService.createApproval(year,monthValue);
}
}
package com.sfa.operation.domain.dao;
package com.sfa.operation.domain.kq.dao;
import com.sfa.operation.pojo.response.SfaKqMxDto;
import com.sfa.operation.pojo.kq.response.SfaKqMxDto;
import java.util.Date;
import java.util.List;
......
package com.sfa.operation.domain.dao.impl;
package com.sfa.operation.domain.kq.dao.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sfa.common.core.enums.ECode;
import com.sfa.common.core.exception.WXLSQLException;
import com.sfa.operation.domain.dao.ISfaKqmxDao;
import com.sfa.operation.domain.entity.SfaKqmx;
import com.sfa.operation.domain.mapper.SfaKqmxMapper;
import com.sfa.operation.pojo.response.SfaKqMxDto;
import com.sfa.operation.domain.kq.dao.ISfaKqmxDao;
import com.sfa.operation.domain.kq.entity.SfaKqmx;
import com.sfa.operation.domain.kq.mapper.SfaKqmxMapper;
import com.sfa.operation.pojo.kq.response.SfaKqMxDto;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......
package com.sfa.operation.domain.entity;
package com.sfa.operation.domain.kq.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
......
package com.sfa.operation.domain.mapper;
import com.sfa.operation.domain.entity.SfaKqmx;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
/**
* @author a02200059
* @description 针对表【sfa_kqmx(sfa考勤明细表)】的数据库操作Mapper
* @createDate 2024-11-04 15:50:25
* @Entity com.sfa.operation.domain.entity.SfaKqmx
*/
@Mapper
@Repository
public interface SfaKqmxMapper extends BaseMapper<SfaKqmx> {
void insertOne(SfaKqmx kqDo);
}
package com.sfa.operation.domain.kq.mapper;
import com.sfa.operation.domain.kq.entity.SfaKqmx;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* @author a02200059
* @description 针对表【sfa_kqmx(sfa考勤明细表)】的数据库操作Mapper
* @createDate 2024-11-04 15:50:25
* @Entity com.sfa.operation.domain.entity.SfaKqmx
*/
@Mapper
@Repository
public interface SfaKqmxMapper extends BaseMapper<SfaKqmx> {
void insertOne(SfaKqmx kqDo);
}
package com.sfa.operation.domain.promotion.dao;
import com.sfa.operation.pojo.promotion.request.ActivityPlanApprovalDto;
/**
* @author : liqiulin
* @date : 2025-06-03 18
* @describe :
*/
public interface IActivityPlanApprovalDao {
void save(ActivityPlanApprovalDto approvalDto);
}
package com.sfa.operation.domain.promotion.dao;
import com.sfa.operation.domain.promotion.wq.ActivityPlanWq;
import com.sfa.operation.pojo.promotion.request.ActivityPlanApprovalDto;
import com.sfa.operation.pojo.promotion.request.ActivityPlanInfoDto;
import java.util.List;
/**
* @author : liqiulin
* @date : 2025-05-29 11
* @describe :
*/
public interface IActivityPlanInfoDao {
List<ActivityPlanInfoDto> findList(ActivityPlanWq qw);
void updatePlanStatus(ActivityPlanApprovalDto approvalDto);
}
package com.sfa.operation.domain.promotion.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.sfa.operation.domain.promotion.dao.IActivityPlanApprovalDao;
import com.sfa.operation.domain.promotion.entity.ActivityPlanApproval;
import com.sfa.operation.domain.promotion.mapper.ActivityPlanApprovalMapper;
import com.sfa.operation.pojo.promotion.request.ActivityPlanApprovalDto;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author : liqiulin
* @date : 2025-06-03 18
* @describe :
*/
@DS("promotion")
@Service
public class ActivityPlanApprovalDaoImpl implements IActivityPlanApprovalDao {
@Autowired
private ActivityPlanApprovalMapper activityPlanApprovalMapper;
@Override
public void save(ActivityPlanApprovalDto approvalDto) {
ActivityPlanApproval approvalDo = new ActivityPlanApproval();
BeanUtils.copyProperties(approvalDto, approvalDo);
activityPlanApprovalMapper.insert(approvalDo);
}
}
package com.sfa.operation.domain.promotion.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sfa.common.core.utils.bean.BeanUtils;
import com.sfa.operation.domain.promotion.dao.IActivityPlanInfoDao;
import com.sfa.operation.domain.promotion.entity.ActivityPlanInfo;
import com.sfa.operation.domain.promotion.mapper.ActivityPlanInfoMapper;
import com.sfa.operation.domain.promotion.wq.ActivityPlanWq;
import com.sfa.operation.pojo.promotion.request.ActivityPlanApprovalDto;
import com.sfa.operation.pojo.promotion.request.ActivityPlanInfoDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @author : liqiulin
* @date : 2025-05-29 11
* @describe :
*/
@DS("promotion")
@Service
public class ActivityPlanInfoDaoImpl implements IActivityPlanInfoDao {
@Autowired
private ActivityPlanInfoMapper activityPlanInfoMapper;
@Override
public List<ActivityPlanInfoDto> findList(ActivityPlanWq qw) {
LambdaQueryWrapper<ActivityPlanInfo> lqw = new LambdaQueryWrapper<>();
lqw.eq(ActivityPlanInfo::getPlanStatus,qw.getPlanStatus())
.eq(ActivityPlanInfo::getYear,qw.getYear())
.eq(ActivityPlanInfo::getMonth,qw.getMonth());
List<ActivityPlanInfo> activityPlanInfos = activityPlanInfoMapper.selectList(lqw);
return BeanUtils.transitionDtos(activityPlanInfos,ActivityPlanInfoDto.class);
}
@Override
public void updatePlanStatus(ActivityPlanApprovalDto approvalDto) {
ActivityPlanInfo activityPlanInfo = new ActivityPlanInfo();
activityPlanInfo.setFsInstanceId(approvalDto.getFsInstanceId());
activityPlanInfo.setSerialNumber(approvalDto.getSerialNumber());
activityPlanInfo.setPlanStatus(approvalDto.getApprovalStatus().getCode());
LambdaQueryWrapper<ActivityPlanInfo> lqw = new LambdaQueryWrapper<>();
lqw.in(ActivityPlanInfo::getId,approvalDto.getPlanInfoIdList());
activityPlanInfoMapper.update(activityPlanInfo, lqw);
}
}
package com.sfa.operation.domain.promotion.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 com.sfa.common.core.enums.promotion.PlanStatus;
import lombok.Data;
/**
*
* @TableName activity_plan_approval
*/
@TableName(value ="activity_plan_approval")
@Data
public class ActivityPlanApproval implements Serializable {
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 姓名
*/
private String employeeName;
/**
* 员工工号
*/
private String employeeNo;
private String planMonth;
/**
* 飞书审批实例ID
*/
private String fsInstanceId;
private String serialNumber;
/**
* 审批状态
*/
private PlanStatus approvalStatus;
/**
* 审批内容
*/
private String form;
private String planInfoIds;
/**
* 创建人
*/
private String createBy;
/**
*
*/
private Date createTime;
/**
*
*/
private Date modifyTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.sfa.operation.domain.promotion.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.math.BigDecimal;
import java.util.Date;
import lombok.Data;
/**
* 活动计划列表
* @TableName activity_plan_info
*/
@TableName(value ="activity_plan_info")
@Data
public class ActivityPlanInfo implements Serializable {
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 活动计划表上传记录id
*/
private Long planFileId;
/**
* promotion_manage_employee表id
*/
private Integer employeeId;
/**
* 姓名
*/
private String employeeName;
/**
* 员工工号
*/
private String employeeNo;
/**
* 年份
*/
private Integer year;
/**
* 月份
*/
private Integer month;
/**
* 日期
*/
private Date date;
/**
* 系统名称
*/
private String lineName;
/**
* 门店名称
*/
private String storeName;
/**
* 门店编码
*/
private String storeCode;
/**
* 战区-勤策ID
*/
private String orgQcId;
/**
* 战区名称
*/
private String orgName;
/**
* 活动模式id
*/
private Integer patternId;
/**
* 活动模式
*/
private String pattern;
/**
* 经销商编码
*/
private String dealerId;
/**
* 经销商名称
*/
private String dealerName;
/**
* 是否双T门店
*/
private String bothT;
/**
* 门店所属行政区域-省份名称,如:北京市、江苏省
*/
private String province;
/**
* 门店所属行政区域-城市名称,如:南京市
*/
private String city;
/**
* 门店所属行政区域-区县名称,如:鼓楼区
*/
private String area;
/**
* 门店所在地址
*/
private String addr;
/**
* 上班时间
*/
private Date clockInTime;
/**
* 下班时间
*/
private Date clockOutTime;
/**
* 工资
*/
private BigDecimal salary;
/**
* 杂费
*/
private BigDecimal incidentals;
/**
* 是否执行:1:执行;0:未执行;2:审批中;3:审批拒绝;4:未审批;
*/
private Integer planStatus;
/**
* 飞书审批实例Code
*/
private String fsInstanceId;
/**
* 飞书审批单编号
*/
private String serialNumber;
/**
* 审批人
*/
private String approvalEmpName;
/**
*
*/
private Date createTime;
/**
*
*/
private Date modifyTime;
/**
* 1:有效;0:删除;
*/
private Integer isDelete;
/**
* 创建人
*/
private String createBy;
/**
* 修改人
*/
private String modifyBy;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.sfa.operation.domain.promotion.mapper;
import com.sfa.operation.domain.promotion.entity.ActivityPlanApproval;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
/**
* @author a02200059
* @description 针对表【activity_plan_approval】的数据库操作Mapper
* @createDate 2025-06-03 18:07:32
* @Entity com.sfa.operation.domain.promotion.entity.ActivityPlanApproval
*/
@Repository
public interface ActivityPlanApprovalMapper extends BaseMapper<ActivityPlanApproval> {
}
package com.sfa.operation.domain.promotion.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.operation.domain.promotion.entity.ActivityPlanInfo;
import org.springframework.stereotype.Repository;
/**
* @author a02200059
* @description 针对表【activity_plan_info(活动计划列表)】的数据库操作Mapper
* @createDate 2025-05-29 11:03:20
* @Entity com.sfa.operation.domain.promotion.entity.ActivityPlanInfo
*/
@Repository
public interface ActivityPlanInfoMapper extends BaseMapper<ActivityPlanInfo> {
}
package com.sfa.operation.domain.promotion.wq;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* @author : liqiulin
* @date : 2025-05-29 11
* @describe : 关于活动计划的查询参数
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain = true)
public class ActivityPlanWq {
private Long planFileId;
/**
* 是否执行:1:执行;0:未执行;2:审批中;3:审批拒绝;4:待审批;
*/
private Integer planStatus;
private int year;
private int month;
}
package com.sfa.operation.pojo.request;
package com.sfa.operation.pojo.kq.request;
import lombok.AllArgsConstructor;
import lombok.Data;
......
package com.sfa.operation.pojo.response;
package com.sfa.operation.pojo.kq.response;
import lombok.AllArgsConstructor;
import lombok.Data;
......
package com.sfa.operation.pojo.promotion.request;
import com.alibaba.fastjson.annotation.JSONField;
import com.sfa.common.core.enums.promotion.PlanStatus;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
import java.util.List;
@Accessors(chain = true)
@Data
public class ActivityPlanApprovalDto {
/**
* 主键id
*/
private Long id;
/**
* 姓名
*/
private String employeeName;
/**
* 员工工号
*/
private String employeeNo;
private String planMonth;
/**
* 飞书审批实例ID
*/
@JSONField(name = "instance_code")
private String fsInstanceId;
@JSONField(name = "serial_number")
private String serialNumber;
/**
* 审批状态
*/
private PlanStatus approvalStatus;
/**
* 审批内容
*/
@JSONField(name = "form")
private String form;
private String planInfoIds;
private List<Long> planInfoIdList;;
/**
* 创建人
*/
private String createBy;
/**
*
*/
private Date createTime;
/**
*
*/
private Date modifyTime;
}
\ No newline at end of file
package com.sfa.operation.pojo.promotion.request;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author : liqiulin
* @date : 2025-05-29 13
* @describe :
*/
@Data
public class ActivityPlanInfoDto {
/**
* 主键id
*/
private Long id;
/**
* 活动计划表上传记录id
*/
private Long planFileId;
/**
* promotion_manage_employee表id
*/
private Integer employeeId;
/**
* 姓名
*/
private String employeeName;
/**
* 员工工号
*/
private String employeeNo;
/**
* 年份
*/
private Integer year;
/**
* 月份
*/
private Integer month;
/**
* 日期
*/
private Date date;
/**
* 系统名称
*/
private String lineName;
/**
* 门店名称
*/
private String storeName;
/**
* 门店编码
*/
private String storeCode;
/**
* 战区-勤策ID
*/
private String orgQcId;
/**
* 战区名称
*/
private String orgName;
/**
* 活动模式id
*/
private Integer patternId;
/**
* 活动模式
*/
private String pattern;
/**
* 经销商编码
*/
private String dealerId;
/**
* 经销商名称
*/
private String dealerName;
/**
* 是否双T门店
*/
private String bothT;
/**
* 门店所属行政区域-省份名称,如:北京市、江苏省
*/
private String province;
/**
* 门店所属行政区域-城市名称,如:南京市
*/
private String city;
/**
* 门店所属行政区域-区县名称,如:鼓楼区
*/
private String area;
/**
* 门店所在地址
*/
private String addr;
/**
* 上班时间
*/
private Date clockInTime;
/**
* 下班时间
*/
private Date clockOutTime;
/**
* 工资
*/
private BigDecimal salary;
/**
* 杂费
*/
private BigDecimal incidentals;
/**
* 是否执行:1:执行;0:未执行;2:审批中;3:审批拒绝;4:未审批;
*/
private Integer planStatus;
/**
* 飞书审批实例Code
*/
private String instanceCode;
/**
* 飞书审批单编号
*/
private String serialNumber;
/**
* 审批人
*/
private String approvalEmpName;
/**
*
*/
private Date createTime;
/**
*
*/
private Date modifyTime;
/**
* 1:有效;0:删除;
*/
private Integer isDelete;
/**
* 创建人
*/
private String createBy;
/**
* 修改人
*/
private String modifyBy;
}
package com.sfa.operation.service;
package com.sfa.operation.service.kq;
import com.sfa.operation.pojo.response.SfaKqMxDto;
import com.sfa.operation.pojo.kq.response.SfaKqMxDto;
/**
* @author : liqiulin
......
package com.sfa.operation.service;
package com.sfa.operation.service.kq;
import java.util.Date;
import java.util.Map;
......
package com.sfa.operation.service.impl;
package com.sfa.operation.service.kq.impl;
import com.sfa.common.core.constant.SecurityConstants;
import com.sfa.common.core.domain.R;
import com.sfa.operation.domain.dao.ISfaKqmxDao;
import com.sfa.operation.pojo.response.SfaKqMxDto;
import com.sfa.operation.service.IKqMxCoreService;
import com.sfa.operation.domain.kq.dao.ISfaKqmxDao;
import com.sfa.operation.pojo.kq.response.SfaKqMxDto;
import com.sfa.operation.service.kq.IKqMxCoreService;
import com.sfa.system.api.RemoteSiteService;
import com.sfa.system.api.pojo.response.SiteDto;
import org.springframework.beans.factory.annotation.Autowired;
......
package com.sfa.operation.service.impl;
package com.sfa.operation.service.kq.impl;
import cn.hutool.core.date.DateUtil;
import com.sfa.common.core.constant.SecurityConstants;
import com.sfa.common.core.utils.DateUtils;
import com.sfa.common.security.utils.SecurityUtils;
import com.sfa.operation.domain.dao.ISfaKqmxDao;
import com.sfa.operation.domain.kq.dao.ISfaKqmxDao;
import com.sfa.operation.enums.KqEnum;
import com.sfa.operation.pojo.response.SfaKqMxDto;
import com.sfa.operation.service.IKqMxQueryService;
import com.sfa.operation.pojo.kq.response.SfaKqMxDto;
import com.sfa.operation.service.kq.IKqMxQueryService;
import com.sfa.system.api.RemoteKqRuleService;
import com.sfa.system.api.pojo.response.MdmKqRuleDto;
import org.apache.commons.collections4.MapUtils;
......
package com.sfa.operation.service.promotion;
import java.util.List;
/**
* @author : liqiulin
* @date : 2025-05-29 10
* @describe :
*/
public interface ICpPlanQueryService {
List<String> createApproval(int year,int month);
}
package com.sfa.operation.service.promotion.impl;
import com.alibaba.fastjson2.JSONObject;
import com.sfa.common.core.constant.SecurityConstants;
import com.sfa.common.core.domain.R;
import com.sfa.common.core.enums.ECode;
import com.sfa.common.core.enums.promotion.PlanStatus;
import com.sfa.common.core.exception.CheckedException;
import com.sfa.common.core.utils.DateUtils;
import com.sfa.common.core.utils.sdk.FeiShuUtil;
import com.sfa.operation.domain.promotion.dao.IActivityPlanApprovalDao;
import com.sfa.operation.domain.promotion.dao.IActivityPlanInfoDao;
import com.sfa.operation.domain.promotion.wq.ActivityPlanWq;
import com.sfa.operation.pojo.promotion.request.ActivityPlanApprovalDto;
import com.sfa.operation.pojo.promotion.request.ActivityPlanInfoDto;
import com.sfa.operation.service.promotion.ICpPlanQueryService;
import com.sfa.system.api.RemoteUserService;
import com.sfa.system.api.domain.SysUser;
import com.sfa.system.api.model.LoginUser;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
* @author : liqiulin
* @date : 2025-05-29 10
* @describe :
*/
@Service
public class CpPlanQueryServiceImpl implements ICpPlanQueryService {
@Value("${feishu.approval.scfy}")
private String scfyCode;
@Autowired
private IActivityPlanInfoDao activityPlanInfoDao;
@Autowired
private IActivityPlanApprovalDao activityPlanApprovalDao;
@Autowired
private RemoteUserService remoteUserService;
@Autowired
private FeiShuUtil feiShuUtil;
@Override
public List<String> createApproval(int year,int month) {
// 计划文件ID下未审批数据
ActivityPlanWq qw = new ActivityPlanWq();
qw.setYear(year).setMonth(month).setPlanStatus(PlanStatus.WAIT.getCode());
List<ActivityPlanInfoDto> infos = activityPlanInfoDao.findList(qw);
if (CollectionUtils.isEmpty(infos)){
throw new CheckedException(ECode.DATA_NULL_ERROR);
}
/**
* 分员工处理
*/
Map<String, List<ActivityPlanInfoDto>> planGroupByEmp = infos.stream().collect(Collectors.groupingBy(ActivityPlanInfoDto::getEmployeeNo));
for (Map.Entry<String, List<ActivityPlanInfoDto>> entry : planGroupByEmp.entrySet()) {
String empNo = entry.getKey();
List<ActivityPlanInfoDto> plans = entry.getValue();
ActivityPlanApprovalDto approvalDto = createFsApproval(empNo, plans);
// 修改activity_approval_info表中,涉及到id的状态
activityPlanInfoDao.updatePlanStatus(approvalDto);
}
return null;
}
private ActivityPlanApprovalDto createFsApproval(String empNo,List<ActivityPlanInfoDto> plans){
R<LoginUser> userR = remoteUserService.getUserInfo(empNo, SecurityConstants.INNER);
SysUser userInfo = userR.getData().getSysUser();
List<Long> planIds = plans.stream().map(plan -> plan.getId()).collect(Collectors.toList());
Map<String, List<ActivityPlanInfoDto>> planGroupByDealer = plans.stream().collect(Collectors.groupingBy(ActivityPlanInfoDto::getDealerName));
List<List> values = new ArrayList();
for (Map.Entry<String, List<ActivityPlanInfoDto>> entry : planGroupByDealer.entrySet()) {
String dealerName = entry.getKey();
List<ActivityPlanInfoDto> plans2 = entry.getValue();
Set<String> lineName = new HashSet<>();
Set<String> stores = new HashSet<>();
AtomicReference<BigDecimal> salaryTotal = new AtomicReference<>(BigDecimal.ZERO);
AtomicReference<BigDecimal> incidentalsTotal = new AtomicReference<>(BigDecimal.ZERO);
plans2.forEach(plan -> {
lineName.add(plan.getLineName());
stores.add(plan.getStoreName());
salaryTotal.set(salaryTotal.get().add(plan.getSalary()));
incidentalsTotal.set(incidentalsTotal.get().add(plan.getIncidentals()));
});
// 组装from表单value值
List<Map> fromValues = new ArrayList();
// 经销商
Map<String,Object> value1 = new HashMap<>();
value1.put("id","widget17482494846610001");
value1.put("type","input");
value1.put("value",dealerName);
// 系统名称
Map<String,Object> value2 = new HashMap<>();
value2.put("id","widget17482495216610001");
value2.put("type","textarea");
value2.put("value", StringUtils.join(lineName,"\n"));
// 门店数
Map<String,Object> value3 = new HashMap<>();
value3.put("id","widget17482483392700001");
value3.put("type","number");
value3.put("value", stores.size());
// 场次数
Map<String,Object> value4 = new HashMap<>();
value4.put("id","widget17482483806210001");
value4.put("type","number");
value4.put("value", plans2.size());
// 合计工资
Map<String,Object> value5 = new HashMap<>();
value5.put("id","widget17482484113200001");
value5.put("type","amount");
value5.put("value", salaryTotal.get());
// 合计杂费
Map<String,Object> value6 = new HashMap<>();
value6.put("id","widget17482484117210001");
value6.put("type","amount");
value6.put("value", incidentalsTotal.get());
fromValues.add(value1);
fromValues.add(value2);
fromValues.add(value3);
fromValues.add(value4);
fromValues.add(value5);
fromValues.add(value6);
values.add(fromValues);
}
String ar = pushFrom(values, userInfo);
ActivityPlanApprovalDto approvalDto = JSONObject.parseObject(ar, ActivityPlanApprovalDto.class);
approvalDto.setPlanInfoIds(JSONObject.toJSONString(planIds))
.setPlanMonth(DateUtils.parseDateToStr(DateUtils.YYYY_MM, new Date()))
.setEmployeeName(userInfo.getNickName())
.setEmployeeNo(userInfo.getUserName())
.setApprovalStatus(PlanStatus.PENDING)
.setCreateBy(userInfo.getNickName())
.setPlanInfoIdList(planIds);
activityPlanApprovalDao.save(approvalDto);
return approvalDto;
}
/**
* 市场推广费用申请(审批实例CODE:258B4D93-96D4-49E4-B9E1-DA6AB45740B0)
*/
private String pushFrom(List<List> fromValues,SysUser userInfo) {
// 提交人
Map<String,Object> fromMap1 = new HashMap<>();
fromMap1.put("id","widget17491191360290001");
fromMap1.put("type","input");
fromMap1.put("value",userInfo.getNickName()+"("+userInfo.getUserName()+")");
// CP活动月份
Map<String,Object> fromMap2 = new HashMap<>();
fromMap2.put("id","widget17491191565410001");
fromMap2.put("type","input");
fromMap2.put("value",DateUtils.parseDateToStr(DateUtils.YYYY_MM, DateUtils.toDate(LocalDate.now().plusMonths(1))));
// form表单值(明细表)
Map<String,Object> fromMap3 = new HashMap<>();
fromMap3.put("id","widget17482491805280001");
fromMap3.put("type","fieldList");
fromMap3.put("value",fromValues);
// 审批实例
Map<String,Object> approval = new HashMap<>();
approval.put("form",Arrays.asList(fromMap1,fromMap2,fromMap3));
approval.put("approval_code",scfyCode);
//todo approval.put("user_id",userInfo.getFsUserId());
approval.put("user_id","ge59e787");
approval.put("allow_resubmit",false);
approval.put("allow_submit_again",false);
// 使用王小卤链路中心应用提交审批
String approvalCode = feiShuUtil.createApproval(approval);
// 根据code查询审批详情
return feiShuUtil.getApprovalInfo(approvalCode);
}
}
......@@ -4,6 +4,8 @@ spring:
cloud:
nacos:
# username:
# password:
discovery:
server-addr: 192.168.100.38:8848
group: sfa
......@@ -13,3 +15,5 @@ spring:
file-extension: yaml
group: sfa
namespace: 9fb64726-e415-43e4-9e79-9be8d2666671
shared-configs:
- data-id: wangxiaolu-sfa-shared.yaml
......@@ -2,9 +2,9 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sfa.operation.domain.mapper.SfaKqmxMapper">
<mapper namespace="com.sfa.operation.domain.kq.mapper.SfaKqmxMapper">
<resultMap id="BaseResultMap" type="com.sfa.operation.domain.entity.SfaKqmx">
<resultMap id="BaseResultMap" type="com.sfa.operation.domain.kq.entity.SfaKqmx">
<id property="kqmxId" column="kqmx_id" jdbcType="BIGINT"/>
<result property="kqUserid" column="kq_userid" jdbcType="BIGINT"/>
<result property="ruleId" column="rule_id" jdbcType="BIGINT"/>
......@@ -46,7 +46,7 @@
update_user_id,update_time,remark
</sql>
<insert id="insertOne" parameterType="com.sfa.operation.domain.entity.SfaKqmx">
<insert id="insertOne" parameterType="com.sfa.operation.domain.kq.entity.SfaKqmx">
INSERT INTO sfa_kqmx (kq_userid, rule_id, rule_name, kq_time, kq_local, kq_lon, kq_lat, kq_address,
kq_province_num, kq_provinc, kq_city_num, kq_city, kq_county_num, kq_county, kq_picurl,
kq_type, create_date, create_by, create_user_id)
......
<?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.operation.domain.promotion.mapper.ActivityPlanApprovalMapper">
<resultMap id="BaseResultMap" type="com.sfa.operation.domain.promotion.entity.ActivityPlanApproval">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="employeeId" column="employee_id" jdbcType="INTEGER"/>
<result property="employeeName" column="employee_name" jdbcType="VARCHAR"/>
<result property="employeeNo" column="employee_no" jdbcType="VARCHAR"/>
<result property="fsInstanceId" column="fs_instance_id" jdbcType="VARCHAR"/>
<result property="approvalStatus" column="approval_status" jdbcType="VARCHAR"/>
<result property="form" column="form" jdbcType="VARCHAR"/>
<result property="planInfoIds" column="plan_info_ids" jdbcType="VARCHAR"/>
<result property="createBy" column="create_by" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="modifyTime" column="modify_time" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id,employee_id,
employee_name,employee_no,fs_instance_id,
approval_status,form,create_by,
create_time,modify_time
</sql>
</mapper>
<?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.operation.domain.promotion.mapper.ActivityPlanInfoMapper">
<resultMap id="BaseResultMap" type="com.sfa.operation.domain.promotion.entity.ActivityPlanInfo">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="planFileId" column="plan_file_id" jdbcType="BIGINT"/>
<result property="employeeId" column="employee_id" jdbcType="INTEGER"/>
<result property="employeeName" column="employee_name" jdbcType="VARCHAR"/>
<result property="employeeNo" column="employee_no" jdbcType="VARCHAR"/>
<result property="year" column="year" jdbcType="INTEGER"/>
<result property="month" column="month" jdbcType="INTEGER"/>
<result property="date" column="date" jdbcType="DATE"/>
<result property="lineName" column="line_name" jdbcType="VARCHAR"/>
<result property="storeName" column="store_name" jdbcType="VARCHAR"/>
<result property="storeCode" column="store_code" jdbcType="VARCHAR"/>
<result property="orgQcId" column="org_qc_id" jdbcType="VARCHAR"/>
<result property="orgName" column="org_name" jdbcType="VARCHAR"/>
<result property="patternId" column="pattern_id" jdbcType="INTEGER"/>
<result property="pattern" column="pattern" jdbcType="VARCHAR"/>
<result property="dealerId" column="dealer_id" jdbcType="VARCHAR"/>
<result property="dealerName" column="dealer_name" jdbcType="VARCHAR"/>
<result property="bothT" column="both_t" jdbcType="VARCHAR"/>
<result property="province" column="province" jdbcType="VARCHAR"/>
<result property="city" column="city" jdbcType="VARCHAR"/>
<result property="area" column="area" jdbcType="VARCHAR"/>
<result property="addr" column="addr" jdbcType="VARCHAR"/>
<result property="clockInTime" column="clock_in_time" jdbcType="TIMESTAMP"/>
<result property="clockOutTime" column="clock_out_time" jdbcType="TIMESTAMP"/>
<result property="salary" column="salary" jdbcType="DECIMAL"/>
<result property="incidentals" column="incidentals" jdbcType="DECIMAL"/>
<result property="planStatus" column="plan_status" jdbcType="INTEGER"/>
<result property="fsInstanceId" column="fs_instance_id" jdbcType="VARCHAR"/>
<result property="serialNumber" column="serial_number" jdbcType="VARCHAR"/>
<result property="approvalEmpName" column="approval_emp_name" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="modifyTime" column="modify_time" jdbcType="TIMESTAMP"/>
<result property="isDelete" column="is_delete" jdbcType="INTEGER"/>
<result property="createBy" column="create_by" jdbcType="VARCHAR"/>
<result property="modifyBy" column="modify_by" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,plan_file_id,employee_id,
employee_name,employee_no,year,
month,date,line_name,
store_name,store_code,org_qc_id,
org_name,pattern_id,pattern,
dealer_id,dealer_name,both_t,
province,city,area,
addr,clock_in_time,clock_out_time,
salary,incidentals,plan_status,
fs_instance_id,serial_number,approval_emp_name,
create_time,modify_time,is_delete,
create_by,modify_by
</sql>
</mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论