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 个修改的文件
包含
969 行增加
和
194 行删除
+969
-194
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
+182
-182
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
package
com
.
sfa
.
job
.
util
;
//
package com.sfa.job.util;
//
import
cn.hutool.http.HttpUtil
;
//
import cn.hutool.http.HttpUtil;
import
cn.hutool.http.Method
;
//
import cn.hutool.http.Method;
import
com.alibaba.fastjson2.JSONArray
;
//
import com.alibaba.fastjson2.JSONArray;
import
com.alibaba.fastjson2.JSONObject
;
//
import com.alibaba.fastjson2.JSONObject;
import
com.google.gson.JsonParser
;
//
import com.google.gson.JsonParser;
import
com.lark.oapi.Client
;
//
import com.lark.oapi.Client;
import
com.lark.oapi.core.utils.Jsons
;
//
import com.lark.oapi.core.utils.Jsons;
import
com.lark.oapi.service.contact.v3.enums.ChildrenDepartmentDepartmentIdTypeEnum
;
//
import com.lark.oapi.service.contact.v3.enums.ChildrenDepartmentDepartmentIdTypeEnum;
import
com.lark.oapi.service.contact.v3.enums.FindByDepartmentUserDepartmentIdTypeEnum
;
//
import com.lark.oapi.service.contact.v3.enums.FindByDepartmentUserDepartmentIdTypeEnum;
import
com.lark.oapi.service.contact.v3.enums.FindByDepartmentUserUserIdTypeEnum
;
//
import com.lark.oapi.service.contact.v3.enums.FindByDepartmentUserUserIdTypeEnum;
import
com.lark.oapi.service.contact.v3.model.ChildrenDepartmentReq
;
//
import com.lark.oapi.service.contact.v3.model.ChildrenDepartmentReq;
import
com.lark.oapi.service.contact.v3.model.ChildrenDepartmentResp
;
//
import com.lark.oapi.service.contact.v3.model.ChildrenDepartmentResp;
import
com.lark.oapi.service.contact.v3.model.FindByDepartmentUserReq
;
//
import com.lark.oapi.service.contact.v3.model.FindByDepartmentUserReq;
import
com.lark.oapi.service.contact.v3.model.FindByDepartmentUserResp
;
//
import com.lark.oapi.service.contact.v3.model.FindByDepartmentUserResp;
import
lombok.extern.slf4j.Slf4j
;
//
import lombok.extern.slf4j.Slf4j;
import
org.springframework.beans.factory.annotation.Value
;
//
import org.springframework.beans.factory.annotation.Value;
import
org.springframework.stereotype.Component
;
//
import org.springframework.stereotype.Component;
//
import
java.util.HashMap
;
//
import java.util.HashMap;
import
java.util.List
;
//
import java.util.List;
import
java.util.Map
;
//
import java.util.Map;
//
/**
/
//
**
* @author : liqiulin
//
* @author : liqiulin
* @date : 2024-12-06 16
//
* @date : 2024-12-06 16
* @describe :
//
* @describe :
*/
//
*/
@Slf4j
//
@Slf4j
@Component
//
@Component
public
class
FeiShuUtil
{
//
public class FeiShuUtil {
//
@Value
(
"${feishu.luzx.app_id}"
)
//
@Value("${feishu.luzx.app_id}")
private
String
appId
;
//
private String appId;
@Value
(
"${feishu.luzx.app_secret}"
)
//
@Value("${feishu.luzx.app_secret}")
private
String
appSecret
;
//
private String appSecret;
//
@Value
(
"${feishu.bot_1.app_id}"
)
//
@Value("${feishu.bot_1.app_id}")
private
String
botAppId1
;
//
private String botAppId1;
@Value
(
"${feishu.bot_1.app_secret}"
)
//
@Value("${feishu.bot_1.app_secret}")
private
String
botAppSecret1
;
//
private String botAppSecret1;
//
//
private
static
final
String
CONTENT_TYPE
=
"application/json; charset=utf-8"
;
//
private static final String CONTENT_TYPE = "application/json; charset=utf-8";
private
static
final
String
SHEET_URL
=
"https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/"
;
//
private static final String SHEET_URL = "https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/";
private
static
final
String
TENANT_ACCESS_TOKEN_URL
=
"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
;
//
private static final String TENANT_ACCESS_TOKEN_URL = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal";
private
static
final
String
VALUES_APPEND
=
"/values_append"
;
//
private static final String VALUES_APPEND = "/values_append";
private
static
final
String
VALUES_IMAGE
=
"/values_image"
;
//
private static final String VALUES_IMAGE = "/values_image";
private
static
final
String
VALUES_BATCH_GET
=
"/values_batch_get"
;
//
private static final String VALUES_BATCH_GET = "/values_batch_get";
private
static
final
String
VALUES
=
"/values"
;
//
private static final String VALUES = "/values";
private
static
final
String
STYLE
=
"/style"
;
//
private static final String STYLE = "/style";
//
//
/**
//
/**
* 根据部门父编码获取子部门
//
* 根据部门父编码获取子部门
* 公司编码:"0"
//
* 公司编码:"0"
*/
//
*/
public
JSONArray
getDeptByParentId
(
String
parentId
)
{
//
public JSONArray getDeptByParentId(String parentId) {
try
{
//
try {
Client
client
=
getClient
();
//
Client client = getClient();
ChildrenDepartmentReq
req
=
ChildrenDepartmentReq
.
newBuilder
()
//
ChildrenDepartmentReq req = ChildrenDepartmentReq.newBuilder()
.
departmentId
(
parentId
)
//
.departmentId(parentId)
.
departmentIdType
(
ChildrenDepartmentDepartmentIdTypeEnum
.
DEPARTMENT_ID
)
//
.departmentIdType(ChildrenDepartmentDepartmentIdTypeEnum.DEPARTMENT_ID)
.
pageSize
(
50
)
//
.pageSize(50)
.
build
();
//
.build();
ChildrenDepartmentResp
resp
=
client
.
contact
().
department
().
children
(
req
);
//
ChildrenDepartmentResp resp = client.contact().department().children(req);
if
(!
resp
.
success
())
{
//
if (!resp.success()) {
log
.
error
(
String
.
format
(
"code:%s,msg:%s,reqId:%s, resp:%s"
,
//
log.error(String.format("code:%s,msg:%s,reqId:%s, resp:%s",
resp
.
getCode
(),
resp
.
getMsg
(),
resp
.
getRequestId
(),
Jsons
.
createGSON
(
true
,
false
).
toJson
(
JsonParser
.
parseString
(
new
String
(
resp
.
getRawResponse
().
getBody
(),
"UTF-8"
)))));
//
resp.getCode(), resp.getMsg(), resp.getRequestId(), Jsons.createGSON(true, false).toJson(JsonParser.parseString(new String(resp.getRawResponse().getBody(), "UTF-8")))));
return
null
;
//
return null;
}
//
}
JSONArray
items
=
JSONObject
.
parse
(
Jsons
.
DEFAULT
.
toJson
(
resp
.
getData
())).
getJSONArray
(
"items"
);
//
JSONArray items = JSONObject.parse(Jsons.DEFAULT.toJson(resp.getData())).getJSONArray("items");
return
items
;
//
return items;
}
catch
(
Exception
e
)
{
//
} catch (Exception e) {
log
.
error
(
"获取子部门列表失败,停止执行!"
);
//
log.error("获取子部门列表失败,停止执行!");
}
//
}
return
null
;
//
return null;
}
//
}
//
/**
//
/**
* 获取部门用户
//
* 获取部门用户
*/
//
*/
public
JSONArray
getUsersByDeptId
(
String
deptCode
)
{
//
public JSONArray getUsersByDeptId(String deptCode) {
try
{
//
try {
Client
client
=
getClient
();
//
Client client = getClient();
FindByDepartmentUserReq
req
=
FindByDepartmentUserReq
.
newBuilder
()
//
FindByDepartmentUserReq req = FindByDepartmentUserReq.newBuilder()
.
userIdType
(
FindByDepartmentUserUserIdTypeEnum
.
OPEN_ID
)
//
.userIdType(FindByDepartmentUserUserIdTypeEnum.OPEN_ID)
.
departmentIdType
(
FindByDepartmentUserDepartmentIdTypeEnum
.
DEPARTMENT_ID
)
//
.departmentIdType(FindByDepartmentUserDepartmentIdTypeEnum.DEPARTMENT_ID)
.
departmentId
(
deptCode
)
//
.departmentId(deptCode)
.
pageSize
(
50
)
//
.pageSize(50)
.
build
();
//
.build();
FindByDepartmentUserResp
resp
=
client
.
contact
().
user
().
findByDepartment
(
req
);
//
FindByDepartmentUserResp resp = client.contact().user().findByDepartment(req);
if
(!
resp
.
success
())
{
//
if(!resp.success()) {
log
.
warn
(
String
.
format
(
"code:%s,msg:%s,reqId:%s, resp:%s"
,
//
log.warn(String.format("code:%s,msg:%s,reqId:%s, resp:%s",
resp
.
getCode
(),
resp
.
getMsg
(),
resp
.
getRequestId
(),
Jsons
.
createGSON
(
true
,
false
).
toJson
(
JsonParser
.
parseString
(
new
String
(
resp
.
getRawResponse
().
getBody
(),
"UTF-8"
)))));
//
resp.getCode(), resp.getMsg(), resp.getRequestId(), Jsons.createGSON(true, false).toJson(JsonParser.parseString(new String(resp.getRawResponse().getBody(), "UTF-8")))));
return
null
;
//
return null;
}
//
}
JSONArray
items
=
JSONObject
.
parse
(
Jsons
.
DEFAULT
.
toJson
(
resp
.
getData
())).
getJSONArray
(
"items"
);
//
JSONArray items = JSONObject.parse(Jsons.DEFAULT.toJson(resp.getData())).getJSONArray("items");
return
items
;
//
return items;
}
catch
(
Exception
e
)
{
//
} catch (Exception e) {
log
.
error
(
"获取部门用户失败,停止执行!部门id:{}"
,
deptCode
);
//
log.error("获取部门用户失败,停止执行!部门id:{}", deptCode);
}
//
}
return
null
;
//
return null;
}
//
}
//
/**
//
/**
* 获取表格数据
//
* 获取表格数据
*/
//
*/
public
JSONArray
pullSheet
(
String
sheetToken
,
String
autoToken
,
String
ranges
)
{
//
public JSONArray pullSheet(String sheetToken, String autoToken, String ranges) {
try
{
//
try {
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
//
Map<String, Object> params = new HashMap<>();
params
.
put
(
"ranges"
,
ranges
);
//
params.put("ranges", ranges);
String
result
=
HttpUtil
.
createGet
(
SHEET_URL
+
sheetToken
+
VALUES_BATCH_GET
).
form
(
params
).
auth
(
"Bearer "
+
autoToken
).
contentType
(
CONTENT_TYPE
).
execute
().
body
();
//
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
);
//
JSONObject resultJson = JSONObject.parseObject(result);
int
code
=
resultJson
.
getInteger
(
"code"
);
//
int code = resultJson.getInteger("code");
if
(
code
!=
0
)
{
//
if (code != 0) {
throw
new
RuntimeException
(
"获取飞书表格范围数据错误:"
+
resultJson
.
getString
(
"msg"
));
//
throw new RuntimeException("获取飞书表格范围数据错误:"+resultJson.getString("msg"));
}
//
}
return
resultJson
.
getJSONObject
(
"data"
).
getJSONArray
(
"valueRanges"
);
//
return resultJson.getJSONObject("data").getJSONArray("valueRanges");
}
catch
(
Exception
e
)
{
//
}catch (Exception e) {
log
.
error
(
"拉取表格数据失败,停止执行!"
,
e
);
//
log.error("拉取表格数据失败,停止执行!", e);
}
//
}
return
new
JSONArray
();
//
return new JSONArray();
}
//
}
//
private
Client
getClient
()
{
//
private Client getClient() {
return
Client
.
newBuilder
(
appId
,
appSecret
).
build
();
//
return Client.newBuilder(appId, appSecret).build();
}
//
}
//
public
Integer
pushSetToSheet
(
String
range
,
List
<
Object
>
datas
,
String
sheetToken
,
String
autoToken
)
{
//
public Integer pushSetToSheet(String range, List<Object> datas, String sheetToken, String autoToken) {
// 组装参数
//
// 组装参数
Map
<
String
,
Map
<
String
,
Object
>>
bodyMap
=
new
HashMap
<>();
//
Map<String, Map<String, Object>> bodyMap = new HashMap<>();
Map
<
String
,
Object
>
valueRange
=
new
HashMap
<>();
//
Map<String, Object> valueRange = new HashMap<>();
valueRange
.
put
(
"range"
,
range
);
//
valueRange.put("range", range);
valueRange
.
put
(
"values"
,
datas
);
//
valueRange.put("values", datas);
bodyMap
.
put
(
"valueRange"
,
valueRange
);
//
bodyMap.put("valueRange", valueRange);
String
bodyJson
=
JSONObject
.
toJSONString
(
bodyMap
);
//
String bodyJson = JSONObject.toJSONString(bodyMap);
//
// body上传
//
// body上传
String
result
=
HttpUtil
.
createPost
(
SHEET_URL
+
sheetToken
+
VALUES_APPEND
)
//
String result = HttpUtil.createPost(SHEET_URL + sheetToken + VALUES_APPEND)
.
auth
(
"Bearer "
+
autoToken
).
contentType
(
CONTENT_TYPE
)
//
.auth("Bearer " + autoToken).contentType(CONTENT_TYPE)
.
body
(
bodyJson
)
//
.body(bodyJson)
.
execute
().
body
();
//
.execute().body();
//
// 上传结果判断
//
// 上传结果判断
JSONObject
resultJson
=
JSONObject
.
parseObject
(
result
);
//
JSONObject resultJson = JSONObject.parseObject(result);
return
resultJson
.
getInteger
(
"code"
);
//
return resultJson.getInteger("code");
}
//
}
//
//
public
String
getBotToken1
()
{
//
public String getBotToken1() {
Map
<
String
,
Object
>
bodyMap
=
new
HashMap
<>();
//
Map<String, Object> bodyMap = new HashMap<>();
bodyMap
.
put
(
"app_id"
,
botAppId1
);
//
bodyMap.put("app_id", botAppId1);
bodyMap
.
put
(
"app_secret"
,
botAppSecret1
);
//
bodyMap.put("app_secret", botAppSecret1);
String
bodyJson
=
JSONObject
.
toJSONString
(
bodyMap
);
//
String bodyJson = JSONObject.toJSONString(bodyMap);
//
String
result
=
HttpUtil
.
createPost
(
TENANT_ACCESS_TOKEN_URL
)
//
String result = HttpUtil.createPost(TENANT_ACCESS_TOKEN_URL)
.
contentType
(
CONTENT_TYPE
)
//
.contentType(CONTENT_TYPE)
.
body
(
bodyJson
)
//
.body(bodyJson)
.
execute
().
body
();
//
.execute().body();
//
JSONObject
resultJson
=
JSONObject
.
parseObject
(
result
);
//
JSONObject resultJson = JSONObject.parseObject(result);
int
code
=
resultJson
.
getInteger
(
"code"
);
//
int code = resultJson.getInteger("code");
if
(
code
!=
0
)
{
//
if (code != 0) {
throw
new
RuntimeException
(
"获取tenant_access_token错误"
);
//
throw new RuntimeException("获取tenant_access_token错误");
}
//
}
return
resultJson
.
getString
(
"tenant_access_token"
);
//
return resultJson.getString("tenant_access_token");
}
//
}
//
public
void
appendStyle
(
String
sheetToken
,
Map
<
String
,
Object
>
body
,
String
autoToken
)
{
//
public void appendStyle(String sheetToken, Map<String, Object> body,String autoToken) {
// body上传
//
// body上传
String
result
=
HttpUtil
.
createRequest
(
Method
.
PUT
,
SHEET_URL
+
sheetToken
+
STYLE
)
//
String result = HttpUtil.createRequest(Method.PUT,SHEET_URL + sheetToken + STYLE)
.
auth
(
"Bearer "
+
autoToken
).
contentType
(
CONTENT_TYPE
)
//
.auth("Bearer " + autoToken).contentType(CONTENT_TYPE)
.
body
(
JSONObject
.
toJSONString
(
body
))
//
.body(JSONObject.toJSONString(body))
.
execute
().
body
();
//
.execute().body();
}
//
}
//
public
JSONObject
pullSheetOneRange
(
String
sheetToken
,
String
botToken1
,
String
ranges
)
{
//
public JSONObject pullSheetOneRange(String sheetToken, String botToken1, String ranges) {
return
pullSheet
(
sheetToken
,
botToken1
,
ranges
).
getJSONObject
(
0
);
//
return pullSheet(sheetToken, botToken1, ranges).getJSONObject(0);
}
//
}
}
//
}
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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论