Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wangxiaolu-sfa-module-job
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
sfa
wangxiaolu-sfa-module-job
Commits
f59dd1a9
提交
f59dd1a9
authored
6月 06, 2025
作者:
000516
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
暂存代码
上级
164d0932
全部展开
显示空白字符变更
内嵌
并排
正在显示
22 个修改的文件
包含
787 行增加
和
12 行删除
+787
-12
pom.xml
pom.xml
+0
-4
SfaJobApplication.java
src/main/java/com/sfa/job/SfaJobApplication.java
+2
-0
ControllerResponseAdvice.java
...a/com/sfa/job/config/advice/ControllerResponseAdvice.java
+1
-1
Constants.java
src/main/java/com/sfa/job/constants/Constants.java
+2
-0
EventCallbackLuzx.java
...n/java/com/sfa/job/consumer/feishu/EventCallbackLuzx.java
+97
-0
ActivityPlanDaoImpl.java
...com/sfa/job/domain/promotion/dao/ActivityPlanDaoImpl.java
+39
-0
IActivityPlanDao.java
...va/com/sfa/job/domain/promotion/dao/IActivityPlanDao.java
+16
-0
ActivityPlanApproval.java
...sfa/job/domain/promotion/entity/ActivityPlanApproval.java
+82
-0
ActivityPlanInfo.java
...com/sfa/job/domain/promotion/entity/ActivityPlanInfo.java
+198
-0
ActivityPlanApprovalMapper.java
...b/domain/promotion/mapper/ActivityPlanApprovalMapper.java
+24
-0
ActivityPlanInfoMapper.java
...a/job/domain/promotion/mapper/ActivityPlanInfoMapper.java
+22
-0
EventCallBackDto.java
.../java/com/sfa/job/pojo/feishu/event/EventCallBackDto.java
+71
-0
ActivityPlanApprovalDto.java
.../job/pojo/promotion/response/ActivityPlanApprovalDto.java
+73
-0
ErpAxmr005ServiceImpl.java
...a/com/sfa/job/service/erp/impl/ErpAxmr005ServiceImpl.java
+2
-3
EventCallbackServiceImpl.java
.../com/sfa/job/service/feishu/EventCallbackServiceImpl.java
+39
-0
IEventCallbackService.java
...ava/com/sfa/job/service/feishu/IEventCallbackService.java
+12
-0
PullSheetServiceImpl.java
...java/com/sfa/job/service/feishu/PullSheetServiceImpl.java
+1
-3
DeptAndUserServiceImpl.java
...va/com/sfa/job/service/system/DeptAndUserServiceImpl.java
+1
-1
FeiShuUtil.java
src/main/java/com/sfa/job/util/FeiShuUtil.java
+0
-0
bootstrap-dev.yml
src/main/resources/bootstrap-dev.yml
+3
-0
ActivityPlanApprovalMapper.xml
...resources/mapper/promotion/ActivityPlanApprovalMapper.xml
+39
-0
ActivityPlanInfoMapper.xml
...ain/resources/mapper/promotion/ActivityPlanInfoMapper.xml
+63
-0
没有找到文件。
pom.xml
浏览文件 @
f59dd1a9
...
@@ -108,10 +108,6 @@
...
@@ -108,10 +108,6 @@
<scope>
test
</scope>
<scope>
test
</scope>
</dependency>
</dependency>
<dependency>
<groupId>
com.larksuite.oapi
</groupId>
<artifactId>
oapi-sdk
</artifactId>
</dependency>
<dependency>
<dependency>
<groupId>
junit
</groupId>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<artifactId>
junit
</artifactId>
...
...
src/main/java/com/sfa/job/SfaJobApplication.java
浏览文件 @
f59dd1a9
...
@@ -5,12 +5,14 @@ import com.sfa.common.security.annotation.EnableRyFeignClients;
...
@@ -5,12 +5,14 @@ import com.sfa.common.security.annotation.EnableRyFeignClients;
import
org.mybatis.spring.annotation.MapperScan
;
import
org.mybatis.spring.annotation.MapperScan
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.context.annotation.ComponentScan
;
/**
/**
* 定时任务
* 定时任务
*
*
* @author ruoyi
* @author ruoyi
*/
*/
@ComponentScan
(
basePackages
=
{
"com.sfa.common.core.utils.sdk"
,
"com.sfa.job"
})
@EnableCustomConfig
@EnableCustomConfig
@EnableRyFeignClients
@EnableRyFeignClients
@SpringBootApplication
@SpringBootApplication
...
...
src/main/java/com/sfa/job/config/advice/ControllerResponseAdvice.java
浏览文件 @
f59dd1a9
...
@@ -16,7 +16,7 @@ import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
...
@@ -16,7 +16,7 @@ import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
* @date : 2024-10-28 17
* @date : 2024-10-28 17
* @describe :自动封装
* @describe :自动封装
*/
*/
@RestControllerAdvice
@RestControllerAdvice
(
basePackages
=
{
"com.sfa.job.controller"
})
public
class
ControllerResponseAdvice
implements
ResponseBodyAdvice
<
Object
>{
public
class
ControllerResponseAdvice
implements
ResponseBodyAdvice
<
Object
>{
/**
/**
...
...
src/main/java/com/sfa/job/constants/Constants.java
浏览文件 @
f59dd1a9
...
@@ -5,4 +5,6 @@ public class Constants {
...
@@ -5,4 +5,6 @@ public class Constants {
* 采集数据方式
* 采集数据方式
*/
*/
public
static
final
String
SYNC_TYPE_XXL_JOB
=
"xxl-job"
;
public
static
final
String
SYNC_TYPE_XXL_JOB
=
"xxl-job"
;
public
static
final
String
ENCRYPT
=
"encrypt"
;
public
static
final
String
FEISHU_APPROVAL_INSTANCE
=
"approval_instance"
;
}
}
src/main/java/com/sfa/job/consumer/feishu/EventCallbackLuzx.java
0 → 100644
浏览文件 @
f59dd1a9
package
com
.
sfa
.
job
.
consumer
.
feishu
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.sfa.common.core.enums.ECode
;
import
com.sfa.common.core.enums.promotion.PlanStatus
;
import
com.sfa.common.core.exception.ServiceException
;
import
com.sfa.job.constants.Constants
;
import
com.sfa.job.pojo.feishu.event.EventCallBackDto
;
import
com.sfa.job.service.feishu.IEventCallbackService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.crypto.Cipher
;
import
javax.crypto.spec.IvParameterSpec
;
import
javax.crypto.spec.SecretKeySpec
;
import
java.nio.charset.StandardCharsets
;
import
java.security.MessageDigest
;
import
java.util.Base64
;
/**
* @author : liqiulin
* @date : 2025-06-04 13
* @describe : 飞书事件订阅 - 来自应用【王小卤链路中心】
* 订阅方式:https://open.feishu.cn/api-explorer/cli_a7dbe3ec7d9e5013?apiName=subscribe&from=op_doc_tab&project=approval&resource=approval&version=v4
*/
@Slf4j
@RestController
@RequestMapping
(
"/event_callback/fs/luzx"
)
public
class
EventCallbackLuzx
{
@Value
(
"${feishu.luzx.encrypt_key}"
)
private
String
encryptKeyP
;
@Value
(
"${feishu.approval.scfy}"
)
private
String
scfyCode
;
@Autowired
private
IEventCallbackService
eventCallbackService
;
@RequestMapping
(
method
=
RequestMethod
.
POST
)
public
JSONObject
handleEvent
(
@RequestBody
JSONObject
eventObj
)
{
String
encryptKey
=
encryptKeyP
;
String
encrypt
=
eventObj
.
getString
(
Constants
.
ENCRYPT
);
try
{
MessageDigest
digest
=
MessageDigest
.
getInstance
(
"SHA-256"
);
byte
[]
keyBs
=
digest
.
digest
(
encryptKey
.
getBytes
(
StandardCharsets
.
UTF_8
));
String
decrypt
=
decrypt
(
encrypt
,
keyBs
);
JSONObject
req
=
JSONObject
.
parseObject
(
decrypt
);
log
.
info
(
"飞书事件订阅 - 解密数据:{}"
,
req
);
EventCallBackDto
eventCallBackDto
=
JSONObject
.
parseObject
(
decrypt
,
EventCallBackDto
.
class
);
EventCallBackDto
.
Event
event
=
eventCallBackDto
.
getEvent
();
/**
* 订阅审批 - 市场推广费用申请(审批实例CODE:258B4D93-96D4-49E4-B9E1-DA6AB45740B0)
*/
if
(
Constants
.
FEISHU_APPROVAL_INSTANCE
.
equals
(
event
.
getType
())
&&
scfyCode
.
equals
(
event
.
getApprovalCode
())){
if
(!
event
.
getStatus
().
equals
(
PlanStatus
.
PENDING
.
name
())){
eventCallbackService
.
planCP
(
event
);
}
}
return
req
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
throw
new
ServiceException
(
ECode
.
DB_TABLE_UPDATE_ERROR
.
getMsg
(),
ECode
.
DB_TABLE_UPDATE_ERROR
.
getCode
());
}
}
/**
* 解析encrypt_key加密数据
*/
private
String
decrypt
(
String
base64
,
byte
[]
keyBs
)
throws
Exception
{
byte
[]
decode
=
Base64
.
getDecoder
().
decode
(
base64
);
Cipher
cipher
=
Cipher
.
getInstance
(
"AES/CBC/NOPADDING"
);
byte
[]
iv
=
new
byte
[
16
];
System
.
arraycopy
(
decode
,
0
,
iv
,
0
,
16
);
byte
[]
data
=
new
byte
[
decode
.
length
-
16
];
System
.
arraycopy
(
decode
,
16
,
data
,
0
,
data
.
length
);
cipher
.
init
(
Cipher
.
DECRYPT_MODE
,
new
SecretKeySpec
(
keyBs
,
"AES"
),
new
IvParameterSpec
(
iv
));
byte
[]
r
=
cipher
.
doFinal
(
data
);
if
(
r
.
length
>
0
)
{
int
p
=
r
.
length
-
1
;
for
(;
p
>=
0
&&
r
[
p
]
<=
16
;
p
--)
{
}
if
(
p
!=
r
.
length
-
1
)
{
byte
[]
rr
=
new
byte
[
p
+
1
];
System
.
arraycopy
(
r
,
0
,
rr
,
0
,
p
+
1
);
r
=
rr
;
}
}
return
new
String
(
r
,
StandardCharsets
.
UTF_8
);
}
}
src/main/java/com/sfa/job/domain/promotion/dao/ActivityPlanDaoImpl.java
0 → 100644
浏览文件 @
f59dd1a9
package
com
.
sfa
.
job
.
domain
.
promotion
.
dao
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.sfa.common.core.utils.bean.BeanUtils
;
import
com.sfa.job.domain.promotion.entity.ActivityPlanApproval
;
import
com.sfa.job.domain.promotion.mapper.ActivityPlanApprovalMapper
;
import
com.sfa.job.domain.promotion.mapper.ActivityPlanInfoMapper
;
import
com.sfa.job.pojo.promotion.response.ActivityPlanApprovalDto
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* @author : liqiulin
* @date : 2025-06-04 19
* @describe :
*/
@DS
(
"promotion"
)
@Service
public
class
ActivityPlanDaoImpl
implements
IActivityPlanDao
{
@Autowired
private
ActivityPlanApprovalMapper
activityPlanApprovalMapper
;
@Autowired
private
ActivityPlanInfoMapper
activityPlanInfoMapper
;
@Override
public
ActivityPlanApprovalDto
findPlanApproval
(
String
instanceId
)
{
ActivityPlanApproval
planApproval
=
activityPlanApprovalMapper
.
findPlanApproval
(
instanceId
);
return
BeanUtils
.
transitionDto
(
planApproval
,
ActivityPlanApprovalDto
.
class
);
}
@Override
public
void
updateApprovalStatusById
(
Long
id
,
String
status
)
{
activityPlanApprovalMapper
.
updateApprovalStatusById
(
id
,
status
);
}
@Override
public
void
updateActivityPlanStatusByInstanceId
(
String
instanceId
,
Integer
planStatusCode
)
{
activityPlanInfoMapper
.
updateStatusByInstanceId
(
instanceId
,
planStatusCode
);
}
}
src/main/java/com/sfa/job/domain/promotion/dao/IActivityPlanDao.java
0 → 100644
浏览文件 @
f59dd1a9
package
com
.
sfa
.
job
.
domain
.
promotion
.
dao
;
import
com.sfa.job.pojo.promotion.response.ActivityPlanApprovalDto
;
/**
* @author : liqiulin
* @date : 2025-06-04 19
* @describe :
*/
public
interface
IActivityPlanDao
{
ActivityPlanApprovalDto
findPlanApproval
(
String
instanceId
);
void
updateApprovalStatusById
(
Long
id
,
String
status
);
void
updateActivityPlanStatusByInstanceId
(
String
instanceId
,
Integer
planStatusCode
);
}
src/main/java/com/sfa/job/domain/promotion/entity/ActivityPlanApproval.java
0 → 100644
浏览文件 @
f59dd1a9
package
com
.
sfa
.
job
.
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
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
;
/**
* 活动计划表上传记录id
*/
private
Long
planFileId
;
/**
* 姓名
*/
private
String
employeeName
;
/**
* 员工工号
*/
private
String
employeeNo
;
/**
* 计划月份
*/
private
String
planMonth
;
/**
* 飞书审批实例ID
*/
private
String
fsInstanceId
;
/**
* 审批单号
*/
private
String
serialNumber
;
/**
* 审批状态
*/
private
String
approvalStatus
;
/**
* 审批内容
*/
private
String
form
;
/**
* 创建人
*/
private
String
createBy
;
/**
*
*/
private
Date
createTime
;
/**
*
*/
private
Date
modifyTime
;
@TableField
(
exist
=
false
)
private
static
final
long
serialVersionUID
=
1L
;
}
\ No newline at end of file
src/main/java/com/sfa/job/domain/promotion/entity/ActivityPlanInfo.java
0 → 100644
浏览文件 @
f59dd1a9
package
com
.
sfa
.
job
.
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
src/main/java/com/sfa/job/domain/promotion/mapper/ActivityPlanApprovalMapper.java
0 → 100644
浏览文件 @
f59dd1a9
package
com
.
sfa
.
job
.
domain
.
promotion
.
mapper
;
import
com.sfa.job.domain.promotion.entity.ActivityPlanApproval
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.stereotype.Repository
;
/**
* @author a02200059
* @description 针对表【activity_plan_approval】的数据库操作Mapper
* @createDate 2025-06-04 19:01:10
* @Entity com.sfa.job.domain.promotion.entity.ActivityPlanApproval
*/
@Repository
public
interface
ActivityPlanApprovalMapper
extends
BaseMapper
<
ActivityPlanApproval
>
{
ActivityPlanApproval
findPlanApproval
(
String
instanceId
);
void
updateApprovalStatusById
(
@Param
(
"id"
)
Long
id
,
@Param
(
"status"
)
String
status
);
}
src/main/java/com/sfa/job/domain/promotion/mapper/ActivityPlanInfoMapper.java
0 → 100644
浏览文件 @
f59dd1a9
package
com
.
sfa
.
job
.
domain
.
promotion
.
mapper
;
import
com.sfa.job.domain.promotion.entity.ActivityPlanInfo
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.stereotype.Repository
;
/**
* @author a02200059
* @description 针对表【activity_plan_info(活动计划列表)】的数据库操作Mapper
* @createDate 2025-06-04 19:01:10
* @Entity com.sfa.job.domain.promotion.entity.ActivityPlanInfo
*/
@Repository
public
interface
ActivityPlanInfoMapper
extends
BaseMapper
<
ActivityPlanInfo
>
{
void
updateStatusByInstanceId
(
@Param
(
"fsInstanceId"
)
String
instanceId
,
@Param
(
"planStatus"
)
Integer
planStatusCode
);
}
src/main/java/com/sfa/job/pojo/feishu/event/EventCallBackDto.java
0 → 100644
浏览文件 @
f59dd1a9
package
com
.
sfa
.
job
.
pojo
.
feishu
.
event
;
import
com.alibaba.fastjson.annotation.JSONField
;
import
lombok.Data
;
/**
* @author : liqiulin
* @date : 2025-06-04 18
* @describe :
*/
@Data
public
class
EventCallBackDto
{
// 事件的唯一标识。
@JSONField
(
name
=
"uuid"
)
private
String
uuid
;
// 事件 Token,即应用的 Verification Token。
@JSONField
(
name
=
"token"
)
private
String
token
;
// 事件发送时间。包含小数的秒级时间戳。
@JSONField
(
name
=
"ts"
)
private
String
ts
;
// 固定取值 event_callback。
@JSONField
(
name
=
"type"
)
private
String
type
;
@JSONField
(
name
=
"event"
)
private
Event
event
;
@Data
public
class
Event
{
// 应用的 App ID。可调用获取应用信息接口查询应用详细信息。
@JSONField
(
name
=
"app_id"
)
private
String
appId
;
// 审批定义 Code
@JSONField
(
name
=
"approval_code"
)
private
String
approvalCode
;
// 审批实例 Code
@JSONField
(
name
=
"instance_code"
)
private
String
fsInstanceId
;
// 事件发生事件,毫秒级时间戳。
@JSONField
(
name
=
"instance_operate_time"
)
private
String
instanceOperateTime
;
// 事件发生时间,毫秒级时间戳。
@JSONField
(
name
=
"operate_time"
)
private
String
operateTime
;
/**
* 审批实例状态。可能值有:
* PENDING:审批中
* APPROVED:已通过
* REJECTED:已拒绝
* CANCELED:已撤回
* DELETED:已删除
* REVERTED:已撤销
* OVERTIME_CLOSE:超时被关闭
* OVERTIME_RECOVER:超时实例被恢复
*/
@JSONField
(
name
=
"status"
)
private
String
status
;
// 企业唯一标识。
@JSONField
(
name
=
"tenant_key"
)
private
String
tenantKey
;
// 事件类型。固定取值
@JSONField
(
name
=
"type"
)
private
String
type
;
// 如果创建审批实例时传入了 uuid,则此处返回该实例的 uuid。
@JSONField
(
name
=
"uuid"
)
private
String
uuid
;
}
}
src/main/java/com/sfa/job/pojo/promotion/response/ActivityPlanApprovalDto.java
0 → 100644
浏览文件 @
f59dd1a9
package
com
.
sfa
.
job
.
pojo
.
promotion
.
response
;
import
lombok.Data
;
import
java.util.Date
;
/**
* @author : liqiulin
* @date : 2025-06-04 19
* @describe :
*/
@Data
public
class
ActivityPlanApprovalDto
{
/**
* 主键id
*/
private
Long
id
;
/**
* 活动计划表上传记录id
*/
private
Long
planFileId
;
/**
* 姓名
*/
private
String
employeeName
;
/**
* 员工工号
*/
private
String
employeeNo
;
/**
* 计划月份
*/
private
String
planMonth
;
/**
* 飞书审批实例ID
*/
private
String
fsInstanceId
;
/**
* 审批单号
*/
private
String
serialNumber
;
/**
* 审批状态
*/
private
String
approvalStatus
;
/**
* 审批内容
*/
private
String
form
;
/**
* 创建人
*/
private
String
createBy
;
/**
*
*/
private
Date
createTime
;
/**
*
*/
private
Date
modifyTime
;
}
src/main/java/com/sfa/job/service/erp/impl/ErpAxmr005ServiceImpl.java
浏览文件 @
f59dd1a9
package
com
.
sfa
.
job
.
service
.
erp
.
impl
;
package
com
.
sfa
.
job
.
service
.
erp
.
impl
;
import
com.
alibaba.fastjson2.JSONObject
;
import
com.
sfa.common.core.utils.sdk.FeiShuUtil
;
import
com.sfa.job.domain.erp.dao.ErpAxmr005ShippingDetailsDao
;
import
com.sfa.job.domain.erp.dao.ErpAxmr005ShippingDetailsDao
;
import
com.sfa.job.domain.use.dao.IFeishuSheetRecordDao
;
import
com.sfa.job.pojo.response.FeishuSheetRecordDto
;
import
com.sfa.job.pojo.response.FeishuSheetRecordDto
;
import
com.sfa.job.service.erp.ErpAxmr005Service
;
import
com.sfa.job.service.erp.ErpAxmr005Service
;
import
com.sfa.job.util.FeiShuUtil
;
import
com.sfa.job.domain.use.dao.IFeishuSheetRecordDao
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
...
...
src/main/java/com/sfa/job/service/feishu/EventCallbackServiceImpl.java
0 → 100644
浏览文件 @
f59dd1a9
package
com
.
sfa
.
job
.
service
.
feishu
;
import
com.sfa.common.core.enums.promotion.PlanStatus
;
import
com.sfa.job.domain.promotion.dao.IActivityPlanDao
;
import
com.sfa.job.pojo.feishu.event.EventCallBackDto
;
import
com.sfa.job.pojo.promotion.response.ActivityPlanApprovalDto
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* @author : liqiulin
* @date : 2025-06-04 17
* @describe :
*/
@Slf4j
@Service
public
class
EventCallbackServiceImpl
implements
IEventCallbackService
{
@Autowired
private
IActivityPlanDao
activityPlanDao
;
@Override
public
void
planCP
(
EventCallBackDto
.
Event
event
)
{
String
status
=
event
.
getStatus
();
String
instanceId
=
event
.
getFsInstanceId
();
ActivityPlanApprovalDto
planApproval
=
activityPlanDao
.
findPlanApproval
(
instanceId
);
if
(
planApproval
==
null
){
log
.
error
(
"审批实例不存在:{}"
,
event
);
}
activityPlanDao
.
updateApprovalStatusById
(
planApproval
.
getId
(),
status
);
// 校验状态:已通过=已通过;非已通过=审批未通过
PlanStatus
planStatus
=
PlanStatus
.
APPROVED
.
name
().
equals
(
status
)
?
PlanStatus
.
NOT_EXECUTION
:
PlanStatus
.
REJECTED
;
Integer
planStatusCode
=
planStatus
.
getCode
();
activityPlanDao
.
updateActivityPlanStatusByInstanceId
(
instanceId
,
planStatusCode
);
}
}
src/main/java/com/sfa/job/service/feishu/IEventCallbackService.java
0 → 100644
浏览文件 @
f59dd1a9
package
com
.
sfa
.
job
.
service
.
feishu
;
import
com.sfa.job.pojo.feishu.event.EventCallBackDto
;
/**
* @author : liqiulin
* @date : 2025-06-04 17
* @describe :
*/
public
interface
IEventCallbackService
{
void
planCP
(
EventCallBackDto
.
Event
event
);
}
src/main/java/com/sfa/job/service/feishu/PullSheetServiceImpl.java
浏览文件 @
f59dd1a9
...
@@ -2,16 +2,14 @@ package com.sfa.job.service.feishu;
...
@@ -2,16 +2,14 @@ package com.sfa.job.service.feishu;
import
com.alibaba.fastjson2.JSONArray
;
import
com.alibaba.fastjson2.JSONArray
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.sfa.common.core.utils.sdk.FeiShuUtil
;
import
com.sfa.job.domain.feishu.dao.IQinceMarketEmployeeDao
;
import
com.sfa.job.domain.feishu.dao.IQinceMarketEmployeeDao
;
import
com.sfa.job.domain.use.dao.IFeishuSheetRecordDao
;
import
com.sfa.job.domain.use.dao.IFeishuSheetRecordDao
;
import
com.sfa.job.enums.FSRecordEnum
;
import
com.sfa.job.enums.FSRecordEnum
;
import
com.sfa.job.pojo.response.FeishuSheetRecordDto
;
import
com.sfa.job.pojo.response.FeishuSheetRecordDto
;
import
com.sfa.job.util.FeiShuUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.util.stream.DoubleStream
;
/**
/**
* @author : liqiulin
* @author : liqiulin
* @date : 2025-05-09 16
* @date : 2025-05-09 16
...
...
src/main/java/com/sfa/job/service/system/DeptAndUserServiceImpl.java
浏览文件 @
f59dd1a9
...
@@ -2,10 +2,10 @@ package com.sfa.job.service.system;
...
@@ -2,10 +2,10 @@ package com.sfa.job.service.system;
import
com.alibaba.fastjson2.JSONArray
;
import
com.alibaba.fastjson2.JSONArray
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.sfa.common.core.utils.sdk.FeiShuUtil
;
import
com.sfa.job.domain.system.dao.ISysDeptDao
;
import
com.sfa.job.domain.system.dao.ISysDeptDao
;
import
com.sfa.job.domain.system.dao.ISysUserDao
;
import
com.sfa.job.domain.system.dao.ISysUserDao
;
import
com.sfa.job.domain.system.entity.SysDept
;
import
com.sfa.job.domain.system.entity.SysDept
;
import
com.sfa.job.util.FeiShuUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
...
...
src/main/java/com/sfa/job/util/FeiShuUtil.java
浏览文件 @
f59dd1a9
差异被折叠。
点击展开。
src/main/resources/bootstrap-dev.yml
浏览文件 @
f59dd1a9
...
@@ -13,3 +13,5 @@ spring:
...
@@ -13,3 +13,5 @@ spring:
file-extension
:
yaml
file-extension
:
yaml
group
:
sfa
group
:
sfa
namespace
:
9fb64726-e415-43e4-9e79-9be8d2666671
namespace
:
9fb64726-e415-43e4-9e79-9be8d2666671
shared-configs
:
-
data-id
:
wangxiaolu-sfa-shared.yaml
\ No newline at end of file
src/main/resources/mapper/promotion/ActivityPlanApprovalMapper.xml
0 → 100644
浏览文件 @
f59dd1a9
<?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.promotion.mapper.ActivityPlanApprovalMapper"
>
<resultMap
id=
"BaseResultMap"
type=
"com.sfa.job.domain.promotion.entity.ActivityPlanApproval"
>
<id
property=
"id"
column=
"id"
jdbcType=
"BIGINT"
/>
<result
property=
"planFileId"
column=
"plan_file_id"
jdbcType=
"BIGINT"
/>
<result
property=
"employeeName"
column=
"employee_name"
jdbcType=
"VARCHAR"
/>
<result
property=
"employeeNo"
column=
"employee_no"
jdbcType=
"VARCHAR"
/>
<result
property=
"planMonth"
column=
"plan_month"
jdbcType=
"VARCHAR"
/>
<result
property=
"fsInstanceId"
column=
"fs_instance_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"serialNumber"
column=
"serial_number"
jdbcType=
"VARCHAR"
/>
<result
property=
"approvalStatus"
column=
"approval_status"
jdbcType=
"VARCHAR"
/>
<result
property=
"form"
column=
"form"
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,plan_file_id,employee_name,
employee_no,plan_month,fs_instance_id,
serial_number,approval_status,form,
create_by,create_time,modify_time
</sql>
<select
id=
"findPlanApproval"
resultMap=
"BaseResultMap"
>
select *
from activity_plan_approval where fs_instance_id = #{instanceId};
</select>
<update
id=
"updateApprovalStatusById"
>
update activity_plan_approval
set approval_status = #{status}
where id = #{id}
</update>
</mapper>
src/main/resources/mapper/promotion/ActivityPlanInfoMapper.xml
0 → 100644
浏览文件 @
f59dd1a9
<?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.promotion.mapper.ActivityPlanInfoMapper"
>
<resultMap
id=
"BaseResultMap"
type=
"com.sfa.job.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,
instance_code,serial_number,approval_emp_name,
create_time,modify_time,is_delete,
create_by,modify_by
</sql>
<update
id=
"updateStatusByInstanceId"
>
update activity_plan_info set plan_status = #{planStatus} where fs_instance_id = #{fsInstanceId}
</update>
</mapper>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论