丽知:委外采购(付款单)->采购付款申请(新)、代理采购(付款单)->采购付款申请(店群专用)调拨单内部交易(付款单)->特殊业务处理(新)。对接钉钉。

This commit is contained in:
zhengyf 2024-10-30 16:26:59 +08:00
parent b6d160cfc6
commit a51094efe8
9 changed files with 689 additions and 101 deletions

View File

@ -0,0 +1,15 @@
package com.hzya.frame.plugin.lets.dingtalk.dao;
import com.hzya.frame.plugin.lets.dingtalk.entity.DingU8cBillEntity;
import com.hzya.frame.basedao.dao.IBaseDao;
/**
* (ding_u8c_bill: table)表数据库访问层
*
* @author makejava
* @since 2024-10-28 15:45:32
*/
public interface IDingU8cBillDao extends IBaseDao<DingU8cBillEntity, String> {
}

View File

@ -0,0 +1,17 @@
package com.hzya.frame.plugin.lets.dingtalk.dao.impl;
import com.hzya.frame.plugin.lets.dingtalk.entity.DingU8cBillEntity;
import com.hzya.frame.plugin.lets.dingtalk.dao.IDingU8cBillDao;
import org.springframework.stereotype.Repository;
import com.hzya.frame.basedao.dao.MybatisGenericDao;
/**
* (DingU8cBill)表数据库访问层
*
* @author makejava
* @since 2024-10-28 15:45:32
*/
@Repository("dingU8cBillDao")
public class DingU8cBillDaoImpl extends MybatisGenericDao<DingU8cBillEntity, String> implements IDingU8cBillDao{
}

View File

@ -0,0 +1,38 @@
package com.hzya.frame.plugin.lets.dingtalk.entity;
import java.util.Date;
import com.hzya.frame.web.entity.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* (DingU8cBill)实体类
*
* @author makejava
* @since 2024-10-28 15:45:32
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DingU8cBillEntity extends BaseEntity {
/** 公司主键 */
private String u8cPkCorp;
/** 公司编码 */
private String u8cCodeCorp;
/** u8c单据类型 */
private String u8cBillType;
/** u8c单据号 */
private String u8cBillCode;
/** u8c单据主键 */
private String u8cBillId;
/** 是否推送成功 */
private String pushStatus;
/** 推送日志 */
private String pushInfo;
/** 钉钉审批实例id */
private String dingTalkProcessId;
}

View File

@ -0,0 +1,229 @@
<?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.hzya.frame.plugin.lets.dingtalk.dao.impl.DingU8cBillDaoImpl">
<resultMap id="get-DingU8cBillEntity-result" type="com.hzya.frame.plugin.lets.dingtalk.entity.DingU8cBillEntity" >
<result property="id" column="id" jdbcType="INTEGER"/>
<result property="u8cPkCorp" column="u8c_pk_corp" jdbcType="VARCHAR"/>
<result property="u8cCodeCorp" column="u8c_code_corp" jdbcType="VARCHAR"/>
<result property="u8cBillType" column="u8c_bill_type" jdbcType="VARCHAR"/>
<result property="u8cBillCode" column="u8c_bill_code" jdbcType="VARCHAR"/>
<result property="u8cBillId" column="u8c_bill_id" jdbcType="VARCHAR"/>
<result property="pushStatus" column="push_status" jdbcType="VARCHAR"/>
<result property="pushInfo" column="push_info" jdbcType="VARCHAR"/>
<result property="dingTalkProcessId" column="ding_talk_process_id" jdbcType="VARCHAR"/>
<result property="modify_time" column="modify_time" jdbcType="TIMESTAMP"/>
<result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
<result property="sts" column="sts" jdbcType="VARCHAR"/>
</resultMap>
<!-- 查询的字段-->
<sql id = "DingU8cBillEntity_Base_Column_List">
id
,u8c_pk_corp
,u8c_code_corp
,u8c_bill_type
,u8c_bill_code
,u8c_bill_id
,push_status
,push_info
,ding_talk_process_id
,modify_time
,create_time
,sts
</sql>
<!-- 查询 采用==查询 -->
<select id="entity_list_base" resultMap="get-DingU8cBillEntity-result" parameterType = "com.hzya.frame.plugin.lets.dingtalk.entity.DingU8cBillEntity">
select
<include refid="DingU8cBillEntity_Base_Column_List" />
from ding_u8c_bill
<trim prefix="where" prefixOverrides="and">
<if test="id != null"> and id = #{id} </if>
<if test="u8cPkCorp != null and u8cPkCorp != ''"> and u8c_pk_corp = #{u8cPkCorp} </if>
<if test="u8cCodeCorp != null and u8cCodeCorp != ''"> and u8c_code_corp = #{u8cCodeCorp} </if>
<if test="u8cBillType != null and u8cBillType != ''"> and u8c_bill_type = #{u8cBillType} </if>
<if test="u8cBillCode != null and u8cBillCode != ''"> and u8c_bill_code = #{u8cBillCode} </if>
<if test="u8cBillId != null and u8cBillId != ''"> and u8c_bill_id = #{u8cBillId} </if>
<if test="pushStatus != null and pushStatus != ''"> and push_status = #{pushStatus} </if>
<if test="pushInfo != null and pushInfo != ''"> and push_info = #{pushInfo} </if>
<if test="dingTalkProcessId != null and dingTalkProcessId != ''"> and ding_talk_process_id = #{dingTalkProcessId} </if>
<if test="modify_time != null"> and modify_time = #{modify_time} </if>
<if test="create_time != null"> and create_time = #{create_time} </if>
<if test="sts != null and sts != ''"> and sts = #{sts} </if>
and sts='Y'
</trim>
</select>
<!-- 查询符合条件的数量 -->
<select id="entity_count" resultType="Integer" parameterType = "com.hzya.frame.plugin.lets.dingtalk.entity.DingU8cBillEntity">
select count(1) from ding_u8c_bill
<trim prefix="where" prefixOverrides="and">
<if test="id != null"> and id = #{id} </if>
<if test="u8cPkCorp != null and u8cPkCorp != ''"> and u8c_pk_corp = #{u8cPkCorp} </if>
<if test="u8cCodeCorp != null and u8cCodeCorp != ''"> and u8c_code_corp = #{u8cCodeCorp} </if>
<if test="u8cBillType != null and u8cBillType != ''"> and u8c_bill_type = #{u8cBillType} </if>
<if test="u8cBillCode != null and u8cBillCode != ''"> and u8c_bill_code = #{u8cBillCode} </if>
<if test="u8cBillId != null and u8cBillId != ''"> and u8c_bill_id = #{u8cBillId} </if>
<if test="pushStatus != null and pushStatus != ''"> and push_status = #{pushStatus} </if>
<if test="pushInfo != null and pushInfo != ''"> and push_info = #{pushInfo} </if>
<if test="dingTalkProcessId != null and dingTalkProcessId != ''"> and ding_talk_process_id = #{dingTalkProcessId} </if>
<if test="modify_time != null"> and modify_time = #{modify_time} </if>
<if test="create_time != null"> and create_time = #{create_time} </if>
<if test="sts != null and sts != ''"> and sts = #{sts} </if>
and sts='Y'
</trim>
</select>
<!-- 分页查询列表 采用like格式 -->
<select id="entity_list_like" resultMap="get-DingU8cBillEntity-result" parameterType = "com.hzya.frame.plugin.lets.dingtalk.entity.DingU8cBillEntity">
select
<include refid="DingU8cBillEntity_Base_Column_List" />
from ding_u8c_bill
<trim prefix="where" prefixOverrides="and">
<if test="id != null"> and id like concat('%',#{id},'%') </if>
<if test="u8cPkCorp != null and u8cPkCorp != ''"> and u8c_pk_corp like concat('%',#{u8cPkCorp},'%') </if>
<if test="u8cCodeCorp != null and u8cCodeCorp != ''"> and u8c_code_corp like concat('%',#{u8cCodeCorp},'%') </if>
<if test="u8cBillType != null and u8cBillType != ''"> and u8c_bill_type like concat('%',#{u8cBillType},'%') </if>
<if test="u8cBillCode != null and u8cBillCode != ''"> and u8c_bill_code like concat('%',#{u8cBillCode},'%') </if>
<if test="u8cBillId != null and u8cBillId != ''"> and u8c_bill_id like concat('%',#{u8cBillId},'%') </if>
<if test="pushStatus != null and pushStatus != ''"> and push_status like concat('%',#{pushStatus},'%') </if>
<if test="pushInfo != null and pushInfo != ''"> and push_info like concat('%',#{pushInfo},'%') </if>
<if test="dingTalkProcessId != null and dingTalkProcessId != ''"> and ding_talk_process_id like concat('%',#{dingTalkProcessId},'%') </if>
<if test="modify_time != null"> and modify_time like concat('%',#{modify_time},'%') </if>
<if test="create_time != null"> and create_time like concat('%',#{create_time},'%') </if>
<if test="sts != null and sts != ''"> and sts like concat('%',#{sts},'%') </if>
and sts='Y'
</trim>
</select>
<!-- 查询列表 字段采用or格式 -->
<select id="DingU8cBillentity_list_or" resultMap="get-DingU8cBillEntity-result" parameterType = "com.hzya.frame.plugin.lets.dingtalk.entity.DingU8cBillEntity">
select
<include refid="DingU8cBillEntity_Base_Column_List" />
from ding_u8c_bill
<trim prefix="where" prefixOverrides="and">
<if test="id != null"> or id = #{id} </if>
<if test="u8cPkCorp != null and u8cPkCorp != ''"> or u8c_pk_corp = #{u8cPkCorp} </if>
<if test="u8cCodeCorp != null and u8cCodeCorp != ''"> or u8c_code_corp = #{u8cCodeCorp} </if>
<if test="u8cBillType != null and u8cBillType != ''"> or u8c_bill_type = #{u8cBillType} </if>
<if test="u8cBillCode != null and u8cBillCode != ''"> or u8c_bill_code = #{u8cBillCode} </if>
<if test="u8cBillId != null and u8cBillId != ''"> or u8c_bill_id = #{u8cBillId} </if>
<if test="pushStatus != null and pushStatus != ''"> or push_status = #{pushStatus} </if>
<if test="pushInfo != null and pushInfo != ''"> or push_info = #{pushInfo} </if>
<if test="dingTalkProcessId != null and dingTalkProcessId != ''"> or ding_talk_process_id = #{dingTalkProcessId} </if>
<if test="modify_time != null"> or modify_time = #{modify_time} </if>
<if test="create_time != null"> or create_time = #{create_time} </if>
<if test="sts != null and sts != ''"> or sts = #{sts} </if>
and sts='Y'
</trim>
</select>
<!--新增所有列-->
<insert id="entity_insert" parameterType = "com.hzya.frame.plugin.lets.dingtalk.entity.DingU8cBillEntity" keyProperty="id" useGeneratedKeys="true">
insert into ding_u8c_bill(
<trim suffix="" suffixOverrides=",">
<if test="id != null"> id , </if>
<if test="u8cPkCorp != null and u8cPkCorp != ''"> u8c_pk_corp , </if>
<if test="u8cCodeCorp != null and u8cCodeCorp != ''"> u8c_code_corp , </if>
<if test="u8cBillType != null and u8cBillType != ''"> u8c_bill_type , </if>
<if test="u8cBillCode != null and u8cBillCode != ''"> u8c_bill_code , </if>
<if test="u8cBillId != null and u8cBillId != ''"> u8c_bill_id , </if>
<if test="pushStatus != null and pushStatus != ''"> push_status , </if>
<if test="pushInfo != null and pushInfo != ''"> push_info , </if>
<if test="dingTalkProcessId != null and dingTalkProcessId != ''"> ding_talk_process_id , </if>
<if test="modify_time != null"> modify_time , </if>
<if test="create_time != null"> create_time , </if>
<if test="sts != null and sts != ''"> sts , </if>
<if test="sts == null ">sts,</if>
</trim>
)values(
<trim suffix="" suffixOverrides=",">
<if test="id != null"> #{id} ,</if>
<if test="u8cPkCorp != null and u8cPkCorp != ''"> #{u8cPkCorp} ,</if>
<if test="u8cCodeCorp != null and u8cCodeCorp != ''"> #{u8cCodeCorp} ,</if>
<if test="u8cBillType != null and u8cBillType != ''"> #{u8cBillType} ,</if>
<if test="u8cBillCode != null and u8cBillCode != ''"> #{u8cBillCode} ,</if>
<if test="u8cBillId != null and u8cBillId != ''"> #{u8cBillId} ,</if>
<if test="pushStatus != null and pushStatus != ''"> #{pushStatus} ,</if>
<if test="pushInfo != null and pushInfo != ''"> #{pushInfo} ,</if>
<if test="dingTalkProcessId != null and dingTalkProcessId != ''"> #{dingTalkProcessId} ,</if>
<if test="modify_time != null"> #{modify_time} ,</if>
<if test="create_time != null"> #{create_time} ,</if>
<if test="sts != null and sts != ''"> #{sts} ,</if>
<if test="sts == null ">'Y',</if>
</trim>
)
</insert>
<!-- 批量新增 -->
<insert id="entityInsertBatch" keyProperty="id" useGeneratedKeys="true">
insert into ding_u8c_bill(u8c_pk_corp, u8c_code_corp, u8c_bill_type, u8c_bill_code, u8c_bill_id, push_status, push_info, ding_talk_process_id, modify_time, create_time, sts, sts)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.u8cPkCorp},#{entity.u8cCodeCorp},#{entity.u8cBillType},#{entity.u8cBillCode},#{entity.u8cBillId},#{entity.pushStatus},#{entity.pushInfo},#{entity.dingTalkProcessId},#{entity.modify_time},#{entity.create_time},#{entity.sts}, 'Y')
</foreach>
</insert>
<!-- 批量新增或者修改-->
<insert id="entityInsertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
insert into ding_u8c_bill(u8c_pk_corp, u8c_code_corp, u8c_bill_type, u8c_bill_code, u8c_bill_id, push_status, push_info, ding_talk_process_id, modify_time, create_time, sts)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.u8cPkCorp},#{entity.u8cCodeCorp},#{entity.u8cBillType},#{entity.u8cBillCode},#{entity.u8cBillId},#{entity.pushStatus},#{entity.pushInfo},#{entity.dingTalkProcessId},#{entity.modify_time},#{entity.create_time},#{entity.sts})
</foreach>
on duplicate key update
u8c_pk_corp = values(u8c_pk_corp),
u8c_code_corp = values(u8c_code_corp),
u8c_bill_type = values(u8c_bill_type),
u8c_bill_code = values(u8c_bill_code),
u8c_bill_id = values(u8c_bill_id),
push_status = values(push_status),
push_info = values(push_info),
ding_talk_process_id = values(ding_talk_process_id),
modify_time = values(modify_time),
create_time = values(create_time),
sts = values(sts)</insert>
<!--通过主键修改方法-->
<update id="entity_update" parameterType = "com.hzya.frame.plugin.lets.dingtalk.entity.DingU8cBillEntity" >
update ding_u8c_bill set
<trim suffix="" suffixOverrides=",">
<if test="u8cPkCorp != null and u8cPkCorp != ''"> u8c_pk_corp = #{u8cPkCorp},</if>
<if test="u8cCodeCorp != null and u8cCodeCorp != ''"> u8c_code_corp = #{u8cCodeCorp},</if>
<if test="u8cBillType != null and u8cBillType != ''"> u8c_bill_type = #{u8cBillType},</if>
<if test="u8cBillCode != null and u8cBillCode != ''"> u8c_bill_code = #{u8cBillCode},</if>
<if test="u8cBillId != null and u8cBillId != ''"> u8c_bill_id = #{u8cBillId},</if>
<if test="pushStatus != null and pushStatus != ''"> push_status = #{pushStatus},</if>
<if test="pushInfo != null and pushInfo != ''"> push_info = #{pushInfo},</if>
<if test="dingTalkProcessId != null and dingTalkProcessId != ''"> ding_talk_process_id = #{dingTalkProcessId},</if>
<if test="modify_time != null"> modify_time = #{modify_time},</if>
<if test="create_time != null"> create_time = #{create_time},</if>
<if test="sts != null and sts != ''"> sts = #{sts},</if>
</trim>
where id = #{id}
</update>
<!-- 逻辑删除 -->
<update id="entity_logicDelete" parameterType = "com.hzya.frame.plugin.lets.dingtalk.entity.DingU8cBillEntity" >
update ding_u8c_bill set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
where id = #{id}
</update>
<!-- 多条件逻辑删除 -->
<update id="entity_logicDelete_Multi_Condition" parameterType = "com.hzya.frame.plugin.lets.dingtalk.entity.DingU8cBillEntity" >
update ding_u8c_bill set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
<trim prefix="where" prefixOverrides="and">
<if test="id != null"> and id = #{id} </if>
<if test="u8cPkCorp != null and u8cPkCorp != ''"> and u8c_pk_corp = #{u8cPkCorp} </if>
<if test="u8cCodeCorp != null and u8cCodeCorp != ''"> and u8c_code_corp = #{u8cCodeCorp} </if>
<if test="u8cBillType != null and u8cBillType != ''"> and u8c_bill_type = #{u8cBillType} </if>
<if test="u8cBillCode != null and u8cBillCode != ''"> and u8c_bill_code = #{u8cBillCode} </if>
<if test="u8cBillId != null and u8cBillId != ''"> and u8c_bill_id = #{u8cBillId} </if>
<if test="pushStatus != null and pushStatus != ''"> and push_status = #{pushStatus} </if>
<if test="pushInfo != null and pushInfo != ''"> and push_info = #{pushInfo} </if>
<if test="dingTalkProcessId != null and dingTalkProcessId != ''"> and ding_talk_process_id = #{dingTalkProcessId} </if>
<if test="sts != null and sts != ''"> and sts = #{sts} </if>
and sts='Y'
</trim>
</update>
<!--通过主键删除-->
<delete id="entity_delete">
delete from ding_u8c_bill where id = #{id}
</delete>
</mapper>

View File

@ -24,27 +24,36 @@ public class PushController extends DefaultController {
@Autowired @Autowired
private PushU8CService pushU8CService; private PushU8CService pushU8CService;
/** 委外采购(付款单)->采购付款申请(新) **/ /** 委外采购(付款单)->采购付款申请(新) **/
@RequestMapping(value = "U8COutSourceBill") @RequestMapping(value = "U8COutSourceBill")
@ResponseBody @ResponseBody
public JsonResultEntity pushU8COutSourceBill(@RequestBody DjFileVO djFileVO){ public JsonResultEntity pushU8COutSourceBill(@RequestBody DjFileVO djFileVO){
String processInstanceId = pushU8CService.outSource(djFileVO); String processInstanceId = pushU8CService.outSource(djFileVO);
if("".equals(processInstanceId)){
return getFailureMessageEntity(null);
}
return getSuccessMessageEntity(processInstanceId); return getSuccessMessageEntity(processInstanceId);
} }
/** 代理采购(付款单)->采购付款申请(店群专用) **/ /** 代理采购(付款单)->采购付款申请(店群专用) **/
@RequestMapping(value = "U8CAgencyBill") @RequestMapping(value = "U8CAgencyBill")
@ResponseBody @ResponseBody
public JsonResultEntity pushU8CAgencyBill(@RequestBody DjFileVO djFileVO){ public JsonResultEntity pushU8CAgencyBill(@RequestBody DjFileVO djFileVO){
System.out.println("com.hzya.frame.plugin.lets.dingtalk.push.pushController.pushU8CAgencyBill"); String processInstanceId = pushU8CService.agency(djFileVO);
return getSuccessMessageEntity("112233445566778899"); if("".equals(processInstanceId)){
return getFailureMessageEntity(null);
}
return getSuccessMessageEntity(processInstanceId);
} }
/** 调拨单内部交易(付款单)->特殊业务处理(新) **/ /** 调拨单内部交易(付款单)->特殊业务处理(新) **/
@RequestMapping(value = "U8CTransferBill") @RequestMapping(value = "U8CTransferBill")
@ResponseBody @ResponseBody
public JsonResultEntity pushU8CTransferBill(@RequestBody DjFileVO djFileVO){ public JsonResultEntity pushU8CTransferBill(@RequestBody DjFileVO djFileVO){
System.out.println("com.hzya.frame.plugin.lets.dingtalk.push.pushController.pushU8CTransferBill"); String processInstanceId = pushU8CService.transfer(djFileVO);
return getSuccessMessageEntity("112233445566778899"); if("".equals(processInstanceId)){
return getFailureMessageEntity(null);
}
return getSuccessMessageEntity(processInstanceId);
} }
} }

View File

@ -6,8 +6,11 @@ import cn.hutool.json.JSONUtil;
import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponseBody; import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponseBody;
import com.aliyun.dingtalkworkflow_1_0.models.StartProcessInstanceRequest; import com.aliyun.dingtalkworkflow_1_0.models.StartProcessInstanceRequest;
import com.aliyun.dingtalkworkflow_1_0.models.StartProcessInstanceResponse; import com.aliyun.dingtalkworkflow_1_0.models.StartProcessInstanceResponse;
import com.dingtalk.api.response.OapiV2DepartmentGetResponse;
import com.dingtalk.api.response.OapiV2UserGetResponse; import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.dingtalk.api.response.OapiV2UserGetbymobileResponse; import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
import com.hzya.frame.plugin.lets.dingtalk.dao.IDingU8cBillDao;
import com.hzya.frame.plugin.lets.dingtalk.entity.DingU8cBillEntity;
import com.hzya.frame.plugin.lets.dingtalk.push.serivce.PushU8CService; import com.hzya.frame.plugin.lets.dingtalk.push.serivce.PushU8CService;
import com.hzya.frame.plugin.lets.dingtalk.utils.DingTalkUtils; import com.hzya.frame.plugin.lets.dingtalk.utils.DingTalkUtils;
import com.hzya.frame.plugin.lets.dingtalk.utils.FileUtil; import com.hzya.frame.plugin.lets.dingtalk.utils.FileUtil;
@ -15,6 +18,7 @@ import com.hzya.frame.plugin.lets.dingtalk.vo.*;
import com.hzya.frame.plugin.lets.plugin.adjust.AdjustInPluginInitializer; import com.hzya.frame.plugin.lets.plugin.adjust.AdjustInPluginInitializer;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -27,6 +31,7 @@ import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Base64; import java.util.Base64;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -65,59 +70,109 @@ public class PushU8CServiceImpl implements PushU8CService {
@Value("${DING.APPROVE_FOLDER_SPACE.PURCHASE_PAYMENT_REQUEST_SHOP}") @Value("${DING.APPROVE_FOLDER_SPACE.PURCHASE_PAYMENT_REQUEST_SHOP}")
private String PURCHASE_PAYMENT_REQUEST_SHOP_FOLDER; private String PURCHASE_PAYMENT_REQUEST_SHOP_FOLDER;
Logger logger = LoggerFactory.getLogger(PushU8CServiceImpl.class); Logger logger = LoggerFactory.getLogger(PushU8CServiceImpl.class);
/** 委外采购(付款单)->采购付款申请(新) */ /**
* 委外采购付款单->采购付款申请
*/
@Override @Override
public String outSource(DjFileVO djFileVO) { public String outSource(DjFileVO djFileVO) {
String instanceId = "";
//校验参数 //校验参数
checkParameter(djFileVO);
try { try {
checkParameter(djFileVO);
//获取钉钉参数 //获取钉钉参数
GetAccessTokenResponseBody tokenBody = DingTalkUtils.getTokenBody(APPKEY, AppSecret); GetAccessTokenResponseBody tokenBody = DingTalkUtils.getTokenBody(APPKEY, AppSecret);
//制单人的钉钉unionid通过手机号获取钉钉的userid在获取unionid 13783530043 //制单人的钉钉unionid通过手机号获取钉钉的userid在获取unionid 13783530043
OapiV2UserGetbymobileResponse userByMobile = DingTalkUtils.getUserByMobile(tokenBody.getAccessToken(), "13783530043"); if (djFileVO.getDjzbVO().getParentvo().getLrr_code() == null || "".equals(djFileVO.getDjzbVO().getParentvo().getLrr_code())) {
Assert.state(false, "录入人手机号为空!!!");
}
OapiV2UserGetbymobileResponse userByMobile = DingTalkUtils.getUserByMobile(tokenBody.getAccessToken(), djFileVO.getDjzbVO().getParentvo().getLrr_code());
String userid = userByMobile.getResult().getUserid(); String userid = userByMobile.getResult().getUserid();
OapiV2UserGetResponse userById = DingTalkUtils.getUserById(tokenBody.getAccessToken(), userid); OapiV2UserGetResponse userById = DingTalkUtils.getUserById(tokenBody.getAccessToken(), userid);
String unionid = userById.getResult().getUnionid(); String unionid = userById.getResult().getUnionid();
//base转文件流-上传钉盘-拿到钉盘信息可能是List集合 //base转文件流-上传钉盘-拿到钉盘信息可能是List集合
List<FileModuleVO> fileModuleVOList = baseTransformFile2uploadDing(djFileVO.getSysFileVOS(), tokenBody.getAccessToken(), unionid, SPACEID, PURCHASE_PAYMENT_REQUEST_NEW_FOLDER); List<FileModuleVO> fileModuleVOList = baseTransformFile2uploadDing(djFileVO.getSysFileVOS(), tokenBody.getAccessToken(), unionid, SPACEID, PURCHASE_PAYMENT_REQUEST_NEW_FOLDER);
System.out.println(fileModuleVOList);
//推送钉钉--发起审批实例 //推送钉钉--发起审批实例
excuteDingTalkOutSource(tokenBody.getAccessToken(),PURCHASE_PAYMENT_REQUEST_NEW,djFileVO.getDjzbVO(),fileModuleVOList); instanceId = excuteDingTalkOutSource(tokenBody.getAccessToken(), userid, PURCHASE_PAYMENT_REQUEST_NEW, djFileVO.getDjzbVO(), fileModuleVOList);
} catch (Exception e) {
logger.error("委外采购(付款单)->采购付款申请(新)报错", e);
}
return instanceId;
}
/**
* 代理采购付款单->采购付款申请店群专用
*/
@Override
public String agency(DjFileVO djFileVO) {
String instanceId = "";
try {
checkParameter(djFileVO);
//获取钉钉参数
GetAccessTokenResponseBody tokenBody = DingTalkUtils.getTokenBody(APPKEY, AppSecret);
//制单人的钉钉unionid通过手机号获取钉钉的userid在获取unionid 13783530043
if (djFileVO.getDjzbVO().getParentvo().getLrr_code() == null || "".equals(djFileVO.getDjzbVO().getParentvo().getLrr_code())) {
Assert.state(false, "录入人手机号为空!!!");
}
//制单人的钉钉unionid通过手机号获取钉钉的userid在获取unionid 13783530043
OapiV2UserGetbymobileResponse userByMobile = DingTalkUtils.getUserByMobile(tokenBody.getAccessToken(), djFileVO.getDjzbVO().getParentvo().getLrr_code());
String userid = userByMobile.getResult().getUserid();
OapiV2UserGetResponse userById = DingTalkUtils.getUserById(tokenBody.getAccessToken(), userid);
String unionid = userById.getResult().getUnionid();
//base转文件流-上传钉盘-拿到钉盘信息可能是List集合
List<FileModuleVO> fileModuleVOList = baseTransformFile2uploadDing(djFileVO.getSysFileVOS(), tokenBody.getAccessToken(), unionid, SPACEID, PURCHASE_PAYMENT_REQUEST_SHOP_FOLDER);
//推送钉钉--发起审批实例
instanceId = excuteDingTalkAgency(tokenBody.getAccessToken(), userid, PURCHASE_PAYMENT_REQUEST_SHOP, djFileVO.getDjzbVO(), fileModuleVOList);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); logger.error("代理采购(付款单)->采购付款申请(店群专用)报错", e);
logger.error("委外采购(付款单)->采购付款申请(新)报错",e);
} }
return "110"; return instanceId;
} }
/** 代理采购(付款单)->采购付款申请(店群专用) */ /**
@Override * 调拨单内部交易付款单->特殊业务处理()
public String agency(DjFileVO djFileVO) { */
checkParameter(djFileVO);
return null;
}
/** 调拨单内部交易(付款单)->特殊业务处理(新) */
@Override @Override
public String transfer(DjFileVO djFileVO) { public String transfer(DjFileVO djFileVO) {
String instanceId = "";
try {
checkParameter(djFileVO); checkParameter(djFileVO);
return null; //获取钉钉参数
GetAccessTokenResponseBody tokenBody = DingTalkUtils.getTokenBody(APPKEY, AppSecret);
//制单人的钉钉unionid通过手机号获取钉钉的userid在获取unionid 13783530043
if (djFileVO.getDjzbVO().getParentvo().getLrr_code() == null || "".equals(djFileVO.getDjzbVO().getParentvo().getLrr_code())) {
Assert.state(false, "录入人手机号为空!!!");
}
//制单人的钉钉unionid通过手机号获取钉钉的userid在获取unionid 13783530043
OapiV2UserGetbymobileResponse userByMobile = DingTalkUtils.getUserByMobile(tokenBody.getAccessToken(), djFileVO.getDjzbVO().getParentvo().getLrr_code());
String userid = userByMobile.getResult().getUserid();
OapiV2UserGetResponse userById = DingTalkUtils.getUserById(tokenBody.getAccessToken(), userid);
String unionid = userById.getResult().getUnionid();
//base转文件流-上传钉盘-拿到钉盘信息可能是List集合
List<FileModuleVO> fileModuleVOList = baseTransformFile2uploadDing(djFileVO.getSysFileVOS(), tokenBody.getAccessToken(), unionid, SPACEID, SPECIAL_SERVICE_PROCESSING_FOLDER);
//推送钉钉--发起审批实例
instanceId = excuteDingTalkTransfer(tokenBody.getAccessToken(), userid, SPECIAL_SERVICE_PROCESSING, djFileVO.getDjzbVO(), fileModuleVOList);
} catch (Exception e) {
logger.error("调拨单内部交易(付款单)->特殊业务处理(新)报错", e);
}
return instanceId;
} }
/** /**
* 检查参数VO不能为空文件不能空 * 检查参数VO不能为空文件不能空
*
* @param djFileVO:djzbVO+sysFileVOS * @param djFileVO:djzbVO+sysFileVOS
*/ */
public void checkParameter(DjFileVO djFileVO) { public void checkParameter(DjFileVO djFileVO) {
@ -130,6 +185,7 @@ public class PushU8CServiceImpl implements PushU8CService {
/** /**
* 文件转换 * 文件转换
* 将base64转为文件流上传钉盘并返回钉钉的 List<FileModuleVO> * 将base64转为文件流上传钉盘并返回钉钉的 List<FileModuleVO>
*
* @Param fileVOS 文件集合 * @Param fileVOS 文件集合
* @Param token token * @Param token token
* @Param unionid unionid * @Param unionid unionid
@ -166,62 +222,66 @@ public class PushU8CServiceImpl implements PushU8CService {
return fileModuleVOList; return fileModuleVOList;
} }
/**\
@Autowired
private IDingU8cBillDao dingU8cBillDao;
/**
* 委外采购付款单->采购付款申请()推送钉钉审批实例 * 委外采购付款单->采购付款申请()推送钉钉审批实例
*
* @param accessToken token * @param accessToken token
* @param userId userId
* @param processCode 钉钉模板Code * @param processCode 钉钉模板Code
* @param djzbVO U8C单据VO * @param djzbVO U8C单据VO
* @param fileModuleVOList 钉钉文件信息用于上传审批实例使用 * @param fileModuleVOList 钉钉文件信息用于上传审批实例使用
*/ */
public void excuteDingTalkOutSource(String accessToken,String processCode,DjzbVO djzbVO,List<FileModuleVO> fileModuleVOList) throws Exception { public String excuteDingTalkOutSource(String accessToken, String userId, String processCode, DjzbVO djzbVO, List<FileModuleVO> fileModuleVOList) throws Exception {
try {
DjzbVO.Arap_djzb parentvo = djzbVO.getParentvo(); DjzbVO.Arap_djzb parentvo = djzbVO.getParentvo();
List<DjzbVO.Arap_djfb> childrens = djzbVO.getChildren(); List<DjzbVO.Arap_djfb> childrens = djzbVO.getChildren();
String instanceId = "";
//公司 try {
//部门 //部门查询
//发起人 Long dingDeptId = queryDingDeptId(parentvo.getDeptid_name(), accessToken, userId);
if (dingDeptId == null) {
Assert.state(false, "根据u8c部门查询钉钉部门失败可能该录入人{},不在钉钉部门:{} 下。", parentvo.getLrr_name(), parentvo.getDeptid_name());
}
//formComponentValues-->表单数据内容控件列表最大列表长度150 //formComponentValues-->表单数据内容控件列表最大列表长度150
List<StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues> form = new ArrayList<>(); List<StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues> form = new ArrayList<>();
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("费用归属公司").setValue("1")); form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("费用归属公司").setValue(parentvo.getDwbm_name()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("费用归属部门(选择至末级部门)").setValue("1")); form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("费用归属部门(选择至末级部门)").setValue(parentvo.getDeptid_name()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("品牌").setValue("1")); form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("品牌").setValue(parentvo.getPinpai()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("费用所属类目").setValue("1")); form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("费用所属类目").setValue(parentvo.getBusitypename()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("付款类型").setValue("1")); form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("付款类型").setValue(parentvo.getPrepay()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("付款比例").setValue("1")); form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("付款比例").setValue(parentvo.getFkbl()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("类目所属(供应链)").setValue("1")); form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("类目所属(供应链)").setValue("供应链类"));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("项目编号").setValue("1")); // form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("项目编号").setValue("1"));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("项目名称").setValue("1")); // form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("项目名称").setValue("1"));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("类型").setValue("1")); // form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("类型").setValue("1"));
//列表 //列表
List<List<DingTableVO>> dingTableVOSMaterialList = new ArrayList<>(); List<List<DingTableVO>> dingTableVOSMaterialList = new ArrayList<>();
for (DjzbVO.Arap_djfb children : childrens) { for (DjzbVO.Arap_djfb children : childrens) {
List<DingTableVO> dingTableVOS = new ArrayList<>(); List<DingTableVO> dingTableVOS = new ArrayList<>();
dingTableVOS.add(new DingTableVO("存货分类", "2")); // dingTableVOS.add(new DingTableVO("存货分类", "存货分类"));
dingTableVOS.add(new DingTableVO("产品名称", "2")); dingTableVOS.add(new DingTableVO("产品名称", children.getCinventoryid_name()));
dingTableVOS.add(new DingTableVO("产品数量", "2")); dingTableVOS.add(new DingTableVO("产品数量", children.getDfshl()));
dingTableVOS.add(new DingTableVO("付款金额(元)", "665")); dingTableVOS.add(new DingTableVO("付款金额(元)", children.getBbye()));
dingTableVOS.add(new DingTableVO("税率", "13")); dingTableVOS.add(new DingTableVO("税率", children.getSl()));
dingTableVOSMaterialList.add(dingTableVOS); dingTableVOSMaterialList.add(dingTableVOS);
} }
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("付款明细").setValue(JSONUtil.toJsonStr(dingTableVOSMaterialList))); form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("付款明细").setValue(JSONUtil.toJsonStr(dingTableVOSMaterialList)));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("开票抬头").setValue("1")); // form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("开票抬头").setValue(parentvo.getDwname()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("开票方").setValue("1")); // form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("开票方").setValue(parentvo.getCustname()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("对方类型").setValue("1")); form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("对方类型").setValue("1"));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("支付方式-银行").setValue("1")); form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("支付方式-银行").setValue(parentvo.getAccountname() + parentvo.getAccount() + parentvo.getBanktypename()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("银行支行名称").setValue("1")); form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("银行支行名称").setValue(parentvo.getBankdocname()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("申请支付日期").setValue("2024-10-27")); form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("申请支付日期").setValue(parentvo.getDjrq()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("备注").setValue("1")); form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("备注").setValue(parentvo.getScomment()));
//附件 //附件
// form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("上传相关附件(业务相关证明、关联原合同审批件)").setValue(JSONUtil.toJsonStr(fileModuleVOList))); form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setComponentType("DDAttachment").setId("DDAttachment_1PDRXW3QT4G00").setName("上传相关附件(业务相关证明、关联原合同审批件)").setValue(JSONUtil.toJsonStr(fileModuleVOList)));
// form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setComponentType("DDAttachment").setId("DDAttachment_1PDRXW3QT4G00").setName("上传相关附件(业务相关证明、关联原合同审批件)").setValue(JSONUtil.toJsonStr(fileModuleVOList)));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setComponentType("DDAttachment").setId("DDAttachment_1PDRXW3QT4G00").setName("上传相关附件").setValue(JSONUtil.toJsonStr(fileModuleVOList)));
/** /**
* 推送钉钉--发起审批实例 * 推送钉钉--发起审批实例
* accessToken--> * accessToken-->
@ -232,7 +292,7 @@ public class PushU8CServiceImpl implements PushU8CService {
* approvers-->不使用审批流模板时直接指定的审批人列表最大列表长度20 * approvers-->不使用审批流模板时直接指定的审批人列表最大列表长度20
* formComponentValues-->表单数据内容控件列表最大列表长度150 * formComponentValues-->表单数据内容控件列表最大列表长度150
*/ */
StartProcessInstanceResponse startProcessInstanceResponse = DingTalkUtils.InitiateApprovalInstance(accessToken, "6715600736721738", processCode, -1L, Long.valueOf(U8C_TEST_AGENTID), null, form); StartProcessInstanceResponse startProcessInstanceResponse = DingTalkUtils.InitiateApprovalInstance(accessToken, userId, processCode, dingDeptId, Long.valueOf(U8C_TEST_AGENTID), null, form);
JSONObject jsonObject = JSONUtil.parseObj(startProcessInstanceResponse); JSONObject jsonObject = JSONUtil.parseObj(startProcessInstanceResponse);
String statusCode = jsonObject.get("statusCode").toString(); String statusCode = jsonObject.get("statusCode").toString();
if (statusCode != null && !statusCode.equals("200")) { if (statusCode != null && !statusCode.equals("200")) {
@ -241,20 +301,183 @@ public class PushU8CServiceImpl implements PushU8CService {
logger.info("推送钉钉-->发起审批实例:委外采购(付款单)->采购付款申请(新)-->执行成功"); logger.info("推送钉钉-->发起审批实例:委外采购(付款单)->采购付款申请(新)-->执行成功");
//审批实例id //审批实例id
String instanceId = JSONUtil.parseObj(jsonObject.get("body")).get("instanceId").toString(); instanceId = JSONUtil.parseObj(jsonObject.get("body")).get("instanceId").toString();
System.out.println(instanceId);
//记录成功记录 //记录成功记录
DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(parentvo.getDwbm(), parentvo.getDwbm_code(), parentvo.getBusitypecode(), parentvo.getDjbh(), parentvo.getVouchid(), "Y", "success", instanceId);
dingU8cBillEntity.setCreate_time(new Date());
try {
dingU8cBillDao.save(dingU8cBillEntity);
} catch (Exception e) {
DingU8cBillEntity dingU8cBillEntity1 = new DingU8cBillEntity();
dingU8cBillEntity1.setU8cPkCorp(parentvo.getDwbm());
dingU8cBillEntity1.setU8cCodeCorp(parentvo.getDwbm_code());
dingU8cBillEntity1.setU8cBillType(parentvo.getBusitypecode());
dingU8cBillEntity1.setU8cBillCode(parentvo.getDjbh());
dingU8cBillEntity1.setU8cBillId(parentvo.getVouchid());
dingU8cBillEntity1.setPushStatus("Y");
dingU8cBillEntity1.setPushInfo(e.getMessage());
dingU8cBillEntity1.setDingTalkProcessId(instanceId);
dingU8cBillEntity1.setCreate_time(new Date());
dingU8cBillDao.save(dingU8cBillEntity1);
}
return instanceId;
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage()); logger.error(e.getMessage());
e.printStackTrace(); //记录失败记录
DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(parentvo.getDwbm(), parentvo.getDwbm_code(), parentvo.getBusitypecode(), parentvo.getDjbh(), parentvo.getVouchid(), "N", e.getMessage(), null);
dingU8cBillEntity.setCreate_time(new Date());
try {
dingU8cBillDao.save(dingU8cBillEntity);
} catch (Exception e1) {
DingU8cBillEntity dingU8cBillEntity1 = new DingU8cBillEntity();
dingU8cBillEntity1.setU8cPkCorp(parentvo.getDwbm());
dingU8cBillEntity1.setU8cCodeCorp(parentvo.getDwbm_code());
dingU8cBillEntity1.setU8cBillType(parentvo.getBusitypecode());
dingU8cBillEntity1.setU8cBillCode(parentvo.getDjbh());
dingU8cBillEntity1.setU8cBillId(parentvo.getVouchid());
dingU8cBillEntity1.setPushStatus("N");
dingU8cBillEntity1.setPushInfo(e.getMessage());
dingU8cBillEntity1.setDingTalkProcessId(null);
dingU8cBillEntity1.setCreate_time(new Date());
dingU8cBillDao.save(dingU8cBillEntity1);
}
}
return null;
} }
/**
* 代理采购付款单->采购付款申请店群专用
*/
public String excuteDingTalkAgency(String accessToken, String userId, String processCode, DjzbVO djzbVO, List<FileModuleVO> fileModuleVOList) throws Exception {
DjzbVO.Arap_djzb parentvo = djzbVO.getParentvo();
List<DjzbVO.Arap_djfb> childrens = djzbVO.getChildren();
String instanceId = "";
try {
//部门查询
Long dingDeptId = queryDingDeptId(parentvo.getDeptid_name(), accessToken, userId);
if (dingDeptId == null) {
Assert.state(false, "根据u8c部门查询钉钉部门失败可能该录入人{},不在钉钉部门:{} 下。", parentvo.getLrr_name(), parentvo.getDeptid_name());
}
//formComponentValues-->表单数据内容控件列表最大列表长度150
List<StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues> form = new ArrayList<>();
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("费用归属公司").setValue(parentvo.getDwbm_name()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("费用归属部门(选择至末级部门)").setValue(parentvo.getDeptid_name()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("项目所属类目").setValue("红人代运营"));//固定值
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("费用所属类目").setValue("运营类"));//固定值
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("总价").setValue(parentvo.getNtaxpricemny()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("实际应支付金额").setValue(parentvo.getBbje()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("归档编号").setValue(parentvo.getGdbh()));
// form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("备注").setValue(parentvo.getScomment()));
//附件
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setComponentType("DDAttachment").setId("DDAttachment_D7JK56572Y00").setName("附件").setValue(JSONUtil.toJsonStr(fileModuleVOList)));
//推送钉钉审批实例
StartProcessInstanceResponse startProcessInstanceResponse = DingTalkUtils.InitiateApprovalInstance(accessToken, userId, processCode, dingDeptId, Long.valueOf(U8C_TEST_AGENTID), null, form);
JSONObject jsonObject = JSONUtil.parseObj(startProcessInstanceResponse);
String statusCode = jsonObject.get("statusCode").toString();
if (statusCode != null && !statusCode.equals("200")) {
Assert.state(false, "代理采购(付款单)->采购付款申请(店群专用):推送钉钉审批实例失败。失败原因:{}", JSONUtil.toJsonStr(jsonObject.get("body")));
}
logger.info("推送钉钉-->发起审批实例:代理采购(付款单)->采购付款申请(店群专用)-->执行成功");
instanceId = JSONUtil.parseObj(jsonObject.get("body")).get("instanceId").toString();
//记录成功记录
DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(parentvo.getDwbm(), parentvo.getDwbm_code(), parentvo.getBusitypecode(), parentvo.getDjbh(), parentvo.getVouchid(), "Y", "success", instanceId);
dingU8cBillEntity.setCreate_time(new Date());
dingU8cBillDao.save(dingU8cBillEntity);
return instanceId;
} catch (Exception e) {
logger.error(e.getMessage());
//记录失败记录
DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(parentvo.getDwbm(), parentvo.getDwbm_code(), parentvo.getBusitypecode(), parentvo.getDjbh(), parentvo.getVouchid(), "N", e.getMessage(), null);
dingU8cBillEntity.setCreate_time(new Date());
dingU8cBillDao.save(dingU8cBillEntity);
}
return instanceId;
} }
/**
* 调拨单内部交易付款单->特殊业务处理()
*/
public String excuteDingTalkTransfer(String accessToken, String userId, String processCode, DjzbVO djzbVO, List<FileModuleVO> fileModuleVOList) throws Exception {
DjzbVO.Arap_djzb parentvo = djzbVO.getParentvo();
List<DjzbVO.Arap_djfb> childrens = djzbVO.getChildren();
String instanceId = "";
try {
//部门查询
Long dingDeptId = queryDingDeptId(parentvo.getDeptid_name(), accessToken, userId);
if (dingDeptId == null) {
Assert.state(false, "根据u8c部门查询钉钉部门失败可能该录入人{},不在钉钉部门:{} 下。", parentvo.getLrr_name(), parentvo.getDeptid_name());
}
//formComponentValues-->表单数据内容控件列表最大列表长度150
List<StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues> form = new ArrayList<>();
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("费用所属公司").setValue(parentvo.getDwbm_name()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("费用所属部门").setValue(parentvo.getDeptid_name()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("项目所属类目").setValue("综合"));//固定值
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("费用所属项目").setValue("内部往来"));//固定值
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("申请事由").setValue(parentvo.getScomment()));
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("申请金额(元)").setValue(parentvo.getBbje()));
// form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setName("备注").setValue(parentvo.getScomment()));
//附件
form.add(new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues().setComponentType("DDAttachment").setId("DDAttachment_1XN8VWYAKBTS0").setName("附件").setValue(JSONUtil.toJsonStr(fileModuleVOList)));
//推送钉钉审批实例
StartProcessInstanceResponse startProcessInstanceResponse = DingTalkUtils.InitiateApprovalInstance(accessToken, userId, processCode, dingDeptId, Long.valueOf(U8C_TEST_AGENTID), null, form);
JSONObject jsonObject = JSONUtil.parseObj(startProcessInstanceResponse);
String statusCode = jsonObject.get("statusCode").toString();
if (statusCode != null && !statusCode.equals("200")) {
Assert.state(false, "调拨单内部交易(付款单)->特殊业务处理(新):推送钉钉审批实例失败。失败原因:{}", JSONUtil.toJsonStr(jsonObject.get("body")));
}
logger.info("推送钉钉-->发起审批实例:调拨单内部交易(付款单)->特殊业务处理(新)-->执行成功");
instanceId = JSONUtil.parseObj(jsonObject.get("body")).get("instanceId").toString();
//记录成功记录
DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(parentvo.getDwbm(), parentvo.getDwbm_code(), parentvo.getBusitypecode(), parentvo.getDjbh(), parentvo.getVouchid(), "Y", "success", instanceId);
dingU8cBillEntity.setCreate_time(new Date());
dingU8cBillDao.save(dingU8cBillEntity);
} catch (Exception e) {
logger.error(e.getMessage());
//记录失败记录
DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(parentvo.getDwbm(), parentvo.getDwbm_code(), parentvo.getBusitypecode(), parentvo.getDjbh(), parentvo.getVouchid(), "N", e.getMessage(), null);
dingU8cBillEntity.setCreate_time(new Date());
dingU8cBillDao.save(dingU8cBillEntity);
}
return instanceId;
}
/**
* 查询钉钉部门
*
* @return 钉钉部门id
* @Param u8cDeptName u8c部门名称
* @Param token
* @Param userId
*/
public Long queryDingDeptId(String u8cDeptName, String token, String userId) {
try {
Assert.notNull(u8cDeptName, "查询钉钉部门u8c部门名称不能为空");
OapiV2UserGetResponse user = DingTalkUtils.getUserById(token, userId);
List<Long> deptIdList = user.getResult().getDeptIdList();
//查询钉钉部门
for (Long deptId : deptIdList) {
OapiV2DepartmentGetResponse dingDept = DingTalkUtils.getDeptByDeptId(token, deptId);
String dingDeptName = dingDept.getResult().getName();
if (u8cDeptName.equals(dingDeptName)) {
return deptId;
}
}
} catch (Exception e) {
logger.error(e.getMessage());
}
return null;
}
} }

View File

@ -0,0 +1,12 @@
package com.hzya.frame.plugin.lets.dingtalk.service;
import com.hzya.frame.plugin.lets.dingtalk.entity.DingU8cBillEntity;
import com.hzya.frame.basedao.service.IBaseService;
/**
* (DingU8cBill)表服务接口
*
* @author makejava
* @since 2024-10-28 15:45:32
*/
public interface IDingU8cBillService extends IBaseService<DingU8cBillEntity, String>{
}

View File

@ -0,0 +1,26 @@
package com.hzya.frame.plugin.lets.dingtalk.service.impl;
import com.hzya.frame.plugin.lets.dingtalk.entity.DingU8cBillEntity;
import com.hzya.frame.plugin.lets.dingtalk.dao.IDingU8cBillDao;
import com.hzya.frame.plugin.lets.dingtalk.service.IDingU8cBillService;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.Resource;
import com.hzya.frame.basedao.service.impl.BaseService;
/**
* (DingU8cBill)表服务实现类
*
* @author makejava
* @since 2024-10-28 15:45:32
*/
@Service(value = "dingU8cBillServiceImpl")
public class DingU8cBillServiceImpl extends BaseService<DingU8cBillEntity, String> implements IDingU8cBillService {
private IDingU8cBillDao dingU8cBillDao;
@Autowired
public void setDingU8cBillDao(IDingU8cBillDao dao) {
this.dingU8cBillDao = dao;
this.dao = dao;
}
}

View File

@ -15,7 +15,30 @@ public class DjzbVO {
@Data @Data
public static class Arap_djzb { public static class Arap_djzb {
private String bbje;//本币金额合计 private String bbje;//本币金额合计实际应支付金额 or 申请金额
private String busitypecode;//单据类型编码
private String busitypename;//单据类型名称费用所属类目
private String deptid_code;//部门编码
private String deptid_name;//部门名称
private String dwbm_code;//公司编码
private String dwbm_name;//公司名称
private String hbbm_code;//客商编码开票方编码
private String hbbm_name;//客商名称开票方名称
private String lrr_code;//录入人编码
private String lrr_name;//录入人名称
private String ntaxpricemny;//总价
private String gdbh;//归档编码
private String pinpai;//品牌
private String fkbl;// 付款比例
private String accountname;//户名
private String account;//账号
private String banktypename;//银行
private String bankdocname;//银行所在地区
private String scomment;//备注银行所在地区
private String prepay;//预收付标志付款类型
private String bzbm;//币种主键 private String bzbm;//币种主键
private String bzbm_code;//币种编码 private String bzbm_code;//币种编码
private String bzbm_name;//币种名称 private String bzbm_name;//币种名称
@ -50,33 +73,23 @@ public class DjzbVO {
private String def8;//自定义项名称8 private String def8;//自定义项名称8
private String def9;//自定义项名称9 private String def9;//自定义项名称9
private String deptid;//部门主键 private String deptid;//部门主键
private String deptid_code;//部门编码
private String deptid_name;//部门名称
private String dfyhzh;//付款银行帐号 private String dfyhzh;//付款银行帐号
private String djbh;//单据编号 private String djbh;//单据编号
private String djdl;//单据大类 private String djdl;//单据大类
private String djkjnd;//会计年度 private String djkjnd;//会计年度
private String djkjqj;//会计期间 private String djkjqj;//会计期间
private String djrq;//单据日期 private String djrq;//单据日期申请支付日期
private String djzt;//单据状态 private String djzt;//单据状态
private String dwbm;//公司主键 private String dwbm;//公司主键
private String dwbm_code;//公司编码
private String dwbm_name;//公司名称
private String dzrq;//对帐日期 private String dzrq;//对帐日期
private String enduser;//最终修改人5.1开始支持 private String enduser;//最终修改人5.1开始支持
private String hbbm;//客商主键 private String hbbm;//客商主键
private String hbbm_code;//客商编码
private String hbbm_name;//客商名称
private String lrr;//录入人主键 private String lrr;//录入人主键
private String lrr_code;//录入人编码
private String lrr_name;//录入人名称
private String paydate;//支付日期5.1及以后版本支持 private String paydate;//支付日期5.1及以后版本支持
private String prepay;//预收付标志
private String qcbz;//是期初 private String qcbz;//是期初
private String qrr;//确认人主键 private String qrr;//确认人主键
private String qrr_code;//确认人编码 private String qrr_code;//确认人编码
private String qrr_name;//确认人名称 private String qrr_name;//确认人名称
private String scomment;//备注
private String shr;//审核人主键 private String shr;//审核人主键
private String shr_code;//审核人编码 private String shr_code;//审核人编码
private String shr_name;//审核人名称 private String shr_name;//审核人名称
@ -137,14 +150,20 @@ public class DjzbVO {
@Data @Data
public static class Arap_djfb { public static class Arap_djfb {
private String bbye;//付款明细-付款金额
private String invcl_code;//付款明细-类目所属编码
private String invcl_name;//付款明细-类目所属名称
private String dfshl;//付款明细-数量
private String cinventoryid_code;//存货编码付款明细-产品编码
private String cinventoryid_name;//存货名称付款明细-产品名称
private String bbhl;//本币汇率 private String bbhl;//本币汇率
private String bfyhzh;//本方银行帐号主键 private String bfyhzh;//本方银行帐号主键
private String bzbm;//币种主键 private String bzbm;//币种主键
private String bzbm_code;//币种编码 private String bzbm_code;//币种编码
private String bzbm_name;//币种名称 private String bzbm_name;//币种名称
private String cinventoryid;//存货主键 private String cinventoryid;//存货主键
private String cinventoryid_code;//存货编码
private String cinventoryid_name;//存货名称
private String contractno;//采购合同号 5.1开始支持 private String contractno;//采购合同号 5.1开始支持
private String ddh;//订单号 5.0sp开始支持 private String ddh;//订单号 5.0sp开始支持
private String def1;//自定义项名称1 private String def1;//自定义项名称1
@ -194,8 +213,8 @@ public class DjzbVO {
private String fkyhzh;//付款银行帐号编码 private String fkyhzh;//付款银行帐号编码
private String fph;//发票号 5.0sp开始支持 private String fph;//发票号 5.0sp开始支持
private String hbbm;//客商主键 private String hbbm;//客商主键
private String hbbm_code;//客商编码 private String hbbm_code;//客商编码开票方编码
private String hbbm_name;//客商名称 private String hbbm_name;//客商名称开票方名称
private String hsdj;//含税单价 private String hsdj;//含税单价
private String jfbbje;//借方本币金额 private String jfbbje;//借方本币金额
private String jfbbsj;//借方本币税金 private String jfbbsj;//借方本币税金