差旅报销单

2024年8月20日 14:22:10
This commit is contained in:
xiang2lin 2024-08-20 14:22:51 +08:00
parent 2f93dded99
commit 432abf3943
7 changed files with 84 additions and 42 deletions

View File

@ -17,7 +17,7 @@ public class AttachmentFileDaoImpl extends MybatisGenericDao<AttachmentFileEntit
@DS("#entity.dataSourceCode")
@Override
public Integer saveData(AttachmentFileEntity entity) {
Integer o = super.insert(getSqlIdPrifx() + "AttachmentFileEntity_insert", entity);
Integer o = super.insert("com.hzya.frame.grpU8.nxproof.attachment.entity.AttachmentFileEntity.AttachmentFileEntity_insert", entity);
return o;
}
}

View File

@ -20,21 +20,21 @@ public class OerAnnexDaoImpl extends MybatisGenericDao<OerAnnexEntity, String> i
@DS("#entity.dataSourceCode")
@Override
public Integer deleteAnnex(OerAnnexEntity entity) {
Integer o = super.delete(getSqlIdPrifx() + "OerAnnexEntity_delete", entity);
Integer o = super.delete( "com.hzya.frame.grpU8.nxproof.oerannex.entity.OerAnnexEntity.OerAnnexEntity_delete", entity);
return o;
}
@DS("#entity.dataSourceCode")
@Override
public OerAnnexEntity queryMaxId(OerAnnexEntity entity) {
OerAnnexEntity o = super.query(entity,getSqlIdPrifx() + "OerAnnexEntity_max_id");
OerAnnexEntity o = super.query(entity,"com.hzya.frame.grpU8.nxproof.oerannex.entity.OerAnnexEntity.OerAnnexEntity_max_id");
return o;
}
@DS("#entity.dataSourceCode")
@Override
public Integer saveData(OerAnnexEntity entity) {
Integer o = super.insert(getSqlIdPrifx() + "entity_insert",entity);
Integer o = super.insert("com.hzya.frame.grpU8.nxproof.oerannex.entity.OerAnnexEntity.OerAnnexEntity_insert",entity);
return o;
}
}

View File

@ -270,6 +270,8 @@ GSDM,KJND,mlId
<select id="queryOerDjml" resultType="com.hzya.frame.grpU8.nxproof.oerdjml.entity.OerDjmlEntity" parameterType = "com.hzya.frame.grpU8.nxproof.oerdjml.entity.OerDjmlEntity">
select
mlId,
kjnd,
gsdm,
DJBH
from OER_DJML
<trim prefix="where" prefixOverrides="and">

View File

@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
@ -73,14 +74,14 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
}
}
Map<String, String> headers = entity.getHeaders();
String eventType = headers.get("eventType");
String formmainTableName = headers.get("formmainTableName");
String forsonTableName = headers.get("forsonTableName");
String djlxid = headers.get("djlxid");
String djlx = headers.get("djlx");
String flowcode = headers.get("flowcode");
String fileApiCode = headers.get("file_api_code");
JSONObject bodyObj = JSONObject.parseObject(bodys);
//事件类型
String eventType = bodyObj.getString("eventType");
//summaryId
String summaryId = bodyObj.getString("summaryId");
JSONObject seeyonData = bodyObj.getJSONObject("businessDataStr");
if (null != seeyonData){
/**
@ -94,16 +95,16 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
String res = "";
if (DjlxEnum.TRAVEL.type.equals(djlx)) {
//差旅报销 travel
res = travel(headers, eventType, djlxid, flowcode, fileApiCode, seeyonData, formmainData, forsonData);
res = travel(headers,eventType,summaryId,grpDataSourceCode,formmainData,forsonData);
}else if(DjlxEnum.EXPENSE.type.equals(djlx)){
//费用报销 expense
res = expense(headers, eventType, djlxid, flowcode, fileApiCode, seeyonData, formmainData, forsonData);
res = expense(headers,seeyonData, formmainData, forsonData);
}else if (DjlxEnum.LABOR.type.equals(djlx)){
//劳务费 labor
}
if (StrUtil.isNotEmpty(res)){
entity.setBodys(res);
//return entity;
return entity;
}
}
}catch (Exception ex ){
@ -115,15 +116,16 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
/**
* 费用报销单
* @param headers 请求头
* @param eventType 事件类型
* @param djlxid 单据类型id
* @param flowcode 流程编码
* @param fileApiCode 附件下载apicode
* @param seeyonData 表单对象
* @param formmainData 主表数据
* @param forsonData 子表数据
*/
private String expense(Map<String, String> headers, String eventType, String djlxid, String flowcode, String fileApiCode, JSONObject seeyonData, JSONObject formmainData, JSONArray forsonData) {
private String expense(Map<String, String> headers,JSONObject seeyonData, JSONObject formmainData, JSONArray forsonData) {
String eventType = headers.get("eventType");
String djlxid = headers.get("djlxid");
String flowcode = headers.get("flowcode");
String fileApiCode = headers.get("file_api_code");
OerDjmlEntity djml = new OerDjmlEntity();
djml.setLclb(eventType);
djml.setDjbh(formmainData.getString("field0001"));
@ -136,8 +138,8 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
djml.setZt("2");
djml.setCrerdm("");
djml.setCrermc("");
djml.setCrerdate(timestampConvert(formmainData.getString("start_date")));
djml.setDjdate(timestampConvert(formmainData.getString("field0016")));
djml.setCrerdate(timestampConvert(formmainData.getString("start_date"),"yyyyMMdd"));
djml.setDjdate(timestampConvert(formmainData.getString("field0016"),"yyyyMMdd"));
djml.setJe(formmainData.getString("field0052"));
djml.setJedx(formmainData.getString("field0071"));
djml.setYjje("0.00");
@ -239,17 +241,19 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
* 差旅报销单
* @param headers 请求头
* @param eventType 事件类型
* @param djlxid 单据类型id
* @param flowcode 流程编码
* @param fileApiCode 附件下载apicode
* @param seeyonData 表单对象
* @param summaryId 流程id
* @param dataSourceCode
* @param formmainData 主表数据
* @param forsonData 子表数据
*/
private String travel(Map<String, String> headers, String eventType, String djlxid, String flowcode, String fileApiCode, JSONObject seeyonData, JSONObject formmainData, JSONArray forsonData) {
private String travel(Map<String, String> headers, String eventType,String summaryId, String dataSourceCode,JSONObject formmainData, JSONArray forsonData) {
String djlxid = headers.get("djlxid");
String flowcode = headers.get("flowcode");
String fileApiCode = headers.get("file_api_code");
OerDjmlEntity djml = new OerDjmlEntity();
djml.setLclb(eventType);
djml.setDjbh(formmainData.getString("field0001"));
djml.setDataSourceCode(dataSourceCode);
//流程发起
if (ColEventTypeEnum.ONSTART.getType().equals(eventType)){
JSONObject forjsonData0 = forsonData.getJSONObject(0);
@ -259,8 +263,8 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
djml.setZt("2");
djml.setCrerdm(formmainData.getString("field0107"));
djml.setCrermc(formmainData.getString("field0114"));
djml.setCrerdate(timestampConvert(formmainData.getString("start_date")));
djml.setDjdate((timestampConvert(formmainData.getString("field0002"))));
djml.setCrerdate(timestampConvert(formmainData.getString("start_date"),"yyyyMMdd"));
djml.setDjdate((timestampConvert(formmainData.getString("field0002"),"yyyyMMdd")));
djml.setJe(formmainData.getString("field0033"));
djml.setJedx(formmainData.getString("field0034"));
djml.setYjje("0.00");
@ -295,7 +299,7 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
djml.setSsrq( DateUtil.format(formmainData.getDate("startDate"),"yyyyMMddHHmmssSSS"));
djml.setSsrid(formmainData.getString("field0108"));
djml.setSsr(formmainData.getString("field0115"));
djml.setClf_cclb(forjsonData0.getString("field0098"));
//报销明细
List<OerDjnrEntity> djnrList = new ArrayList<>();
//结算方式
@ -330,8 +334,8 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
djnr.setJflxdm("");
djnr.setJflxmc("");
djnr.setZy(forson.getString("field0030"));
djnr.setClf_startdate(forson.getString("field0016"));
djnr.setClf_enddate(forson.getString("field0017"));
djnr.setClf_startdate(timestampConvert(forson.getString("field0016"),"yyyy-MM-dd"));
djnr.setClf_enddate(timestampConvert(forson.getString("field0017"),"yyyy-MM-dd"));
djnr.setClf_ccdd(forson.getString("field0019"));
djnr.setClf_ccksd(forson.getString("field0018"));
djnr.setClf_djzs(djml.getFjs());
@ -405,20 +409,21 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
djml.setCurshjd("999");
djml.setNextshjd("-1");
//查询协同附件
List<FileInfoDTO> fileInfoList = fileDownload(seeyonData.getString("summaryId"), fileApiCode);
List<FileInfoDTO> fileInfoList = fileDownload(summaryId, fileApiCode);
djml.setFileInfoList(fileInfoList);
}
String djmlStr = JSONObject.toJSONString(djml);
logger.info("差旅报销单报文:{}",djmlStr);
//logger.info("差旅报销单报文:{}",djmlStr);
return djmlStr;
}
/**
* 时间戳转成 yyyyMMdd
* @param timestamp
* 时间戳转成 指定格式
* @param timestamp 时间戳
* @param format 格式
* @return
*/
private String timestampConvert(String timestamp){
private String timestampConvert(String timestamp,String format){
if (StrUtil.isNotEmpty(timestamp) && NumberUtil.isNumber(timestamp)){
try {
DateTime date = DateUtil.date(Long.valueOf(timestamp));
@ -439,15 +444,19 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
*/
private List<FileInfoDTO> fileDownload(String summaryId,String apiCode){
try {
List<CollAttachmentResDTO> colAttachmentList = restUtil.getColAttachments(summaryId, "0", apiCode, "hzya");
List<CollAttachmentResDTO> colAttachmentList = restUtil.getColAttachments(summaryId, "0", apiCode, null);
//下载协同附件
if (CollectionUtils.isNotEmpty(colAttachmentList)){
String token = restUtil.getToken(null, apiCode);
List<FileInfoDTO> fileList = new ArrayList<>();
for (CollAttachmentResDTO att : colAttachmentList) {
FileInfoDTO fileInfoDTO = new FileInfoDTO();
String fileName = URLDecoder.decode(att.getFilename(), "UTF-8");
byte[] bytes = restUtil.downloadFileBytes("hzya", apiCode, att.getFileUrl(), fileName);
byte[] bytes = restUtil.downloadFileBytes(null, apiCode, att.getFileUrl(), fileName,token);
if (!FileUtil.isDirectory(DSK+ File.separator+DateUtil.today())){
FileUtil.mkdir(DSK+ File.separator+DateUtil.today());
}
String filePath = DSK+ File.separator+DateUtil.today()+File.separator+att.getFileUrl()+"."+att.getExtension();
File file = new File(filePath);
// 使用 FileOutputStream 写入字节数组到文件
@ -455,7 +464,7 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
fos.write(bytes);
}
if (null != file){
String zipPath = DSK+File.separator+DateUtil.today()+File.separator+att.getSubReference()+".zip";
String zipPath = DSK+File.separator+DateUtil.today()+File.separator+att.getFileUrl()+".zip";
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipPath), Charset.forName("GBK"));
writeZipFile(file, zos, fileName);
zos.close();
@ -476,6 +485,7 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
fileList.add(fileInfoDTO);
}
}
return fileList;
}
}catch (Exception e){
logger.error("下载附件出错:{}",e);

View File

@ -765,6 +765,8 @@ public class OerDjmlServiceImpl implements IOerDjmlService {
//修改状态
oerDjmlAllEntity.setMlId(oerDjmlAllEntities.get(0).getMlId());
oerDjmlAllEntity.setZt(entity.getZt());
oerDjmlAllEntity.setCurshjd(entity.getCurshjd());
oerDjmlAllEntity.setNextshjd(entity.getNextshjd());
iOerDjmlDao.updateOerDjml(oerDjmlAllEntity);
//释放指标
GbiZbsyrecAllEntity gbiZbsyrecAllEntity = new GbiZbsyrecAllEntity();
@ -844,6 +846,7 @@ public class OerDjmlServiceImpl implements IOerDjmlService {
annexEntity.setDataSourceCode(entity.getDataSourceCode());
annexEntity.setMlid(oerDjmlAllEntities.get(0).getMlId());
annexEntity.setKjnd(oerDjmlAllEntities.get(0).getKjnd());
annexEntity.setGsdm(oerDjmlAllEntities.get(0).getGsdm());
annexEntity.setAnnexName(fileName);
annexEntity.setAnnexSize(Convert.toLong(fileInfo.getFile_size()));
annexEntity.setOnlyid(fileEntity.getaTGuid());

View File

@ -390,7 +390,7 @@ public class SeeYonInterFaceImpl implements ISeeYonInterFace {
object.put("eventType",eventType);
object.put("businessDataStr",seeYonBean.toJSONString());
object.put("affairId","");
object.put("summaryId",interFaceEntity.getSummaryId());
object.put("summaryId",requestData.getString("summaryId"));
object.put("currentActivityId","");
object.put("id",forMainId);
object.put("hzyaExtData",requestData.getJSONObject("hzyaExtData"));

View File

@ -81,7 +81,7 @@ public class RestUtil {
if (StrUtil.isNotEmpty(summaryId) && StrUtil.isNotEmpty(apiCode)){
SysApplicationApiEntity sysApp = getByCode(apiCode);
String token = getToken(loginName,sysApp);
String appUrl = sysApp.getAppUrl();
String appUrl = StrUtil.removeSuffix(sysApp.getAppUrl(),"/");
if (StrUtil.isEmpty(attType)){
attType = "0";
}
@ -95,6 +95,7 @@ public class RestUtil {
}
return null;
}
/**
* 附件下载
* @param loginName oa登录名
@ -107,7 +108,32 @@ public class RestUtil {
if (StrUtil.isNotEmpty(apiCode)){
SysApplicationApiEntity sysApp = getByCode(apiCode);
String token = getToken(loginName,sysApp);
String appUrl = sysApp.getAppUrl();
String appUrl = StrUtil.removeSuffix(sysApp.getAppUrl(),"/");
String url = "/seeyon/rest/attachment/file/@ctp_file_ID@?fileName=@文件名@&token=@token@";
url = url.replaceAll("@ctp_file_ID@",fileId).replaceAll("@文件名@",fileName).replaceAll("@token@",token);
byte[] bytes = HttpUtil.downloadBytes(appUrl + url);
return bytes;
}
return null;
}
/**
* 附件下载
* @param loginName oa登录名
* @param apiCode 接口编码
* @param fileId 附件id
* @param fileName 附件名
* @param token
* @return 附件字节数组
*/
public byte[] downloadFileBytes(String loginName,String apiCode,String fileId,String fileName,String token){
if (StrUtil.isNotEmpty(apiCode)){
SysApplicationApiEntity sysApp = getByCode(apiCode);
if (StrUtil.isEmpty(token)){
token = getToken(loginName,sysApp);
}
String appUrl = StrUtil.removeSuffix(sysApp.getAppUrl(),"/");
String url = "/seeyon/rest/attachment/file/@ctp_file_ID@?fileName=@文件名@&token=@token@";
url = url.replaceAll("@ctp_file_ID@",fileId).replaceAll("@文件名@",fileName).replaceAll("@token@",token);
byte[] bytes = HttpUtil.downloadBytes(appUrl + url);
@ -139,7 +165,7 @@ public class RestUtil {
public String getToken(String login_name,SysApplicationApiEntity sysApp){
if (null != sysApp){
HashMap<String, String> hashMap = new HashMap<>();
String app_url = sysApp.getAppUrl();
String app_url = StrUtil.removeSuffix(sysApp.getAppUrl(), "/");
String url = app_url+"/seeyon/rest/token";
String headerIn = sysApp.getHeaderIn();
JSONArray headers = JSON.parseArray(headerIn);
@ -151,8 +177,9 @@ public class RestUtil {
hashMap.put(parameterName,example);
}
}
if (StrUtil.isNotEmpty(login_name)){
hashMap.put("loginName",login_name);
login_name = hashMap.get("loginName");
if (StrUtil.isEmpty(login_name)){
hashMap.put("loginName","hzya");
}
String result = HttpRequest.post(url).body(JSON.toJSONString(hashMap)).execute().body();
JSONObject jsonObject = JSONObject.parseObject(result);