图片分页
This commit is contained in:
6
pom.xml
6
pom.xml
@ -85,6 +85,12 @@
|
|||||||
<version>0.4.20</version>
|
<version>0.4.20</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
221
src/main/java/com/example/sso/controller/FddFileHeTong.java
Normal file
221
src/main/java/com/example/sso/controller/FddFileHeTong.java
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
package com.example.sso.controller;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.example.sso.dao.FddFileId;
|
||||||
|
import com.example.sso.test.J;
|
||||||
|
import com.example.sso.util.FDaDaUtil;
|
||||||
|
import lombok.extern.log4j.Log4j;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.scheduling.annotation.Async;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@Slf4j
|
||||||
|
@Async
|
||||||
|
public class FddFileHeTong {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
|
||||||
|
String flowDepartment = "银建";
|
||||||
|
|
||||||
|
|
||||||
|
//创建签署任务
|
||||||
|
JSONObject initiator = new JSONObject();
|
||||||
|
JSONObject openid = new JSONObject();
|
||||||
|
openid.put("idType", "corp");
|
||||||
|
openid.put("openId", "625776ecae6742cb8eb710beedef9b4c");
|
||||||
|
initiator.put("initiator", openid);
|
||||||
|
|
||||||
|
initiator.put("signTaskSubject", "汽车租赁合同" + "$" + "flowName" + "$" + "flowContractno");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
initiator.put("businessId", "a09900c24614bd4c1de10c55712a3e0e");
|
||||||
|
//参与方数组
|
||||||
|
JSONArray jsonArray = new JSONArray();
|
||||||
|
JSONObject ownerId = new JSONObject(); // docid
|
||||||
|
ownerId.put("ownerId", openid);
|
||||||
|
ownerId.put("signTemplateId", "1767841802943145947");
|
||||||
|
String ownerIdJSONString = ownerId.toJSONString();
|
||||||
|
String doc = FDaDaUtil.doc(ownerIdJSONString);
|
||||||
|
|
||||||
|
//actor个人对象
|
||||||
|
JSONObject actor = new JSONObject();
|
||||||
|
//actor详细信息个人
|
||||||
|
JSONObject actorlist = new JSONObject();
|
||||||
|
actorlist.put("actorId", "参与方2");
|
||||||
|
actorlist.put("actorType", "person");
|
||||||
|
|
||||||
|
actorlist.put("actorName", "李嘉卓");
|
||||||
|
|
||||||
|
JSONArray permissions = new JSONArray();
|
||||||
|
permissions.add("sign");
|
||||||
|
|
||||||
|
actorlist.put("identNameForMatch", "李嘉卓");
|
||||||
|
|
||||||
|
actorlist.put("certType", "id_card");
|
||||||
|
|
||||||
|
// actorlist.put("certNoForMatch", "130283199705306053");
|
||||||
|
|
||||||
|
|
||||||
|
actorlist.put("notifyAddress", "15232585208");
|
||||||
|
|
||||||
|
JSONArray notifyType = new JSONArray();
|
||||||
|
notifyType.add("start");
|
||||||
|
notifyType.add("finish");
|
||||||
|
actorlist.put("notifyType", notifyType);
|
||||||
|
actorlist.put("permissions", permissions);
|
||||||
|
|
||||||
|
JSONArray signFieldsgeren = new JSONArray();
|
||||||
|
JSONObject jsonObject55 = new JSONObject();
|
||||||
|
jsonObject55.put("fieldDocId",doc);
|
||||||
|
jsonObject55.put("fieldId","4100411846");
|
||||||
|
signFieldsgeren.add(jsonObject55);
|
||||||
|
|
||||||
|
|
||||||
|
actor.put("actor", actorlist);
|
||||||
|
actor.put("signFields",signFieldsgeren);
|
||||||
|
|
||||||
|
|
||||||
|
//企业方对象
|
||||||
|
JSONObject actors = new JSONObject();
|
||||||
|
//actor详细信息企业
|
||||||
|
JSONObject actorlists = new JSONObject();
|
||||||
|
actorlists.put("actorId", "参与方1");
|
||||||
|
actorlists.put("actorType", "corp");
|
||||||
|
|
||||||
|
actorlists.put("actorName", "flowPaname");
|
||||||
|
|
||||||
|
/*JSONArray permissionss = new JSONArray();
|
||||||
|
permissionss.add("sign");
|
||||||
|
actorlists.put("permissions",permissionss);*/
|
||||||
|
if (!flowDepartment.equals("银建新能源")) {
|
||||||
|
actorlists.put("actorOpenId", "625776ecae6742cb8eb710beedef9b4c");
|
||||||
|
String entryids = FDaDaUtil.entryids("北京银建实业股份有限公司");
|
||||||
|
actorlists.put("actorEntityId", entryids);
|
||||||
|
} else if (flowDepartment.equals("银建新能源")) {
|
||||||
|
actorlists.put("actorOpenId", "a0c12949a1c54ff9bfa45dbe957fbc5d");
|
||||||
|
}
|
||||||
|
/*actorlists.put("notifyAddress", "13520145209");*/
|
||||||
|
JSONArray notifyTypes = new JSONArray();
|
||||||
|
notifyTypes.add("start");
|
||||||
|
notifyTypes.add("finish");
|
||||||
|
actorlists.put("notifyType", notifyTypes);
|
||||||
|
JSONArray objects = new JSONArray();
|
||||||
|
objects.add("sign");
|
||||||
|
actorlists.put("permissions", objects);
|
||||||
|
JSONArray SignField = new JSONArray();
|
||||||
|
JSONObject jsonObject2 = new JSONObject();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
jsonObject2.put("fieldDocId", doc);
|
||||||
|
|
||||||
|
|
||||||
|
if (flowDepartment.equals("银建")) {
|
||||||
|
jsonObject2.put("sealId", 1705990704393128941l);
|
||||||
|
|
||||||
|
jsonObject2.put("fieldId", "8342392107");
|
||||||
|
|
||||||
|
} else if (flowDepartment.equals("金建")) {
|
||||||
|
jsonObject2.put("sealId", 1705991374867130717l);
|
||||||
|
jsonObject2.put("fieldId", "8342392107");
|
||||||
|
|
||||||
|
} else if (flowDepartment.equals("金银建")) {
|
||||||
|
jsonObject2.put("sealId", 1705991362754131529l);
|
||||||
|
jsonObject2.put("fieldId", "8342392107");;
|
||||||
|
|
||||||
|
} else if (flowDepartment.equals("华建")) {
|
||||||
|
jsonObject2.put("sealId", 1705991079845184562l);
|
||||||
|
jsonObject2.put("fieldId", "8342392107");
|
||||||
|
|
||||||
|
} else if (flowDepartment.equals("银建新能源")) {
|
||||||
|
jsonObject2.put("sealId", 1706510414541115296l);
|
||||||
|
jsonObject2.put("fieldId", "8342392107");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SignField.add(jsonObject2);
|
||||||
|
|
||||||
|
JSONObject signConfigInfo = new JSONObject();
|
||||||
|
JSONObject signConfigInfos = new JSONObject();
|
||||||
|
signConfigInfos.put("requestVerifyFree", true);
|
||||||
|
signConfigInfo.put("signConfigInfo", signConfigInfo);
|
||||||
|
|
||||||
|
|
||||||
|
actors.put("actor", actorlists);
|
||||||
|
actors.put("signFields", SignField);
|
||||||
|
actors.put("signConfigInfo", signConfigInfos);
|
||||||
|
|
||||||
|
|
||||||
|
jsonArray.add(actor);
|
||||||
|
jsonArray.add(actors);
|
||||||
|
|
||||||
|
|
||||||
|
JSONArray docs = new JSONArray();
|
||||||
|
|
||||||
|
JSONObject qy = new JSONObject();
|
||||||
|
qy.put("docId",doc);
|
||||||
|
qy.put("docName","文件文档");
|
||||||
|
String id = FddFileId.id("");
|
||||||
|
qy.put("docFileId",id);
|
||||||
|
JSONArray docFields = new JSONArray();
|
||||||
|
|
||||||
|
JSONObject yiye = new JSONObject();
|
||||||
|
yiye.put("fieldId","8342392107");
|
||||||
|
yiye.put("fieldName","签章");
|
||||||
|
JSONObject position = new JSONObject();
|
||||||
|
position.put("positionMode","keyword");
|
||||||
|
position.put("positionKeyword","盖章");
|
||||||
|
yiye.put("position",position);
|
||||||
|
yiye.put("moveable","false");
|
||||||
|
yiye.put("fieldType","corp_seal");
|
||||||
|
|
||||||
|
docFields.add(yiye);
|
||||||
|
|
||||||
|
|
||||||
|
JSONObject yiyes = new JSONObject();
|
||||||
|
yiyes.put("fieldId","4100411846");
|
||||||
|
yiyes.put("fieldName","签字");
|
||||||
|
JSONObject positions = new JSONObject();
|
||||||
|
positions.put("positionMode","keyword");
|
||||||
|
positions.put("positionKeyword","签字");
|
||||||
|
yiyes.put("position",positions);
|
||||||
|
yiyes.put("moveable","false");
|
||||||
|
yiyes.put("fieldType","person_sign");
|
||||||
|
|
||||||
|
docFields.add(yiyes);
|
||||||
|
|
||||||
|
qy.put("docFields",docFields);
|
||||||
|
|
||||||
|
docs.add(qy);
|
||||||
|
initiator.put("docs", docs);
|
||||||
|
|
||||||
|
|
||||||
|
initiator.put("actors", jsonArray);
|
||||||
|
String jsonString = initiator.toJSONString();
|
||||||
|
log.info("我是参数 " + jsonString);
|
||||||
|
|
||||||
|
String fdd = FDaDaUtil.fdds(jsonString);
|
||||||
|
log.info("车损明细文件生成:" + fdd);
|
||||||
|
JSONObject jsonObject = JSON.parseObject(fdd);
|
||||||
|
//任务id
|
||||||
|
String signTaskId = jsonObject.getJSONObject("data").getString("signTaskId");
|
||||||
|
String signTaskIds = String.valueOf(jsonObject.getJSONObject("data"));
|
||||||
|
System.out.println("signTaskId____________________" + signTaskId);
|
||||||
|
System.out.println("signTaskIds========================" + signTaskIds);
|
||||||
|
String signtask = FDaDaUtil.signtask(signTaskIds);
|
||||||
|
log.info("车损明细文件生成完成" + signtask);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
446
src/main/java/com/example/sso/controller/TuTest.java
Normal file
446
src/main/java/com/example/sso/controller/TuTest.java
Normal file
@ -0,0 +1,446 @@
|
|||||||
|
package com.example.sso.controller;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.example.sso.dao.FddFileId;
|
||||||
|
import com.example.sso.dao.Photo;
|
||||||
|
import com.example.sso.dao.ThumbnailCompressor;
|
||||||
|
import com.example.sso.util.APIUtils;
|
||||||
|
import com.example.sso.util.FDaDaUtil;
|
||||||
|
import com.example.sso.util.TimeUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.scheduling.annotation.Async;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
@Async
|
||||||
|
@RestController
|
||||||
|
@Slf4j
|
||||||
|
public class TuTest {
|
||||||
|
|
||||||
|
@PostMapping("/tz1")
|
||||||
|
public void yuezu(@RequestBody JSONObject data) throws Exception {
|
||||||
|
|
||||||
|
log.info("退租数据" + data.toJSONString());
|
||||||
|
|
||||||
|
JSONObject object = data.getJSONObject("data");
|
||||||
|
String id = object.getString("_id");
|
||||||
|
String car = object.getString("car");
|
||||||
|
String sj = object.getString("sj");
|
||||||
|
String timss = TimeUtil.timss(sj);
|
||||||
|
Integer gl = object.getInteger("gl");
|
||||||
|
Integer dl = object.getInteger("dl");
|
||||||
|
JSONArray mx = object.getJSONArray("mx");
|
||||||
|
JSONArray yz = object.getJSONArray("yz");
|
||||||
|
JSONArray cj = object.getJSONArray("cj");
|
||||||
|
|
||||||
|
String jsyss = object.getString("jsyss");
|
||||||
|
String name = object.getString("name");
|
||||||
|
String phone = object.getString("phone");
|
||||||
|
String id1 = object.getString("id1");
|
||||||
|
String a = object.getString("a");
|
||||||
|
|
||||||
|
String zq = object.getString("zq");
|
||||||
|
String zh = object.getString("zh");
|
||||||
|
String yq = object.getString("yq");
|
||||||
|
String yh = object.getString("yh");
|
||||||
|
String fs = object.getString("fs");
|
||||||
|
|
||||||
|
|
||||||
|
String ww = object.getString("ww");
|
||||||
|
|
||||||
|
String wws = "姓名/联营方公司: " + ww;
|
||||||
|
String cars = "车牌号码:" + car;
|
||||||
|
String gls = "车辆公里数(KM): " + gl.toString();
|
||||||
|
String dls = "车辆剩余电量(KM): " + dl.toString();
|
||||||
|
String sjs = "验车时间:" + timss;
|
||||||
|
Photo.startPDF("/home/java/dpapp8090/pdf/" + id + ".pdf");
|
||||||
|
Photo.TextAlignment(" 交车定损单");
|
||||||
|
Photo.appendTextSection(" 驾驶员信息");
|
||||||
|
Photo.appendTextSection(" " +wws);
|
||||||
|
Photo.appendTextSection(" 车辆信息");
|
||||||
|
|
||||||
|
Photo.appendTextSection(" " +cars);
|
||||||
|
Photo.appendTextSection(" " +gls);
|
||||||
|
Photo.appendTextSection(" "+dls);
|
||||||
|
Photo.appendTextSection(" "+sjs);
|
||||||
|
|
||||||
|
Photo.appendTextSection(" 车辆整体照片");
|
||||||
|
|
||||||
|
|
||||||
|
for (Object yzs : yz) {
|
||||||
|
JSONObject jsonObject = (JSONObject) yzs;
|
||||||
|
String url = jsonObject.getString("url");
|
||||||
|
String hkfile = APIUtils.hkfile(url);
|
||||||
|
ThumbnailCompressor.compressWithThumbnailator(hkfile, hkfile);
|
||||||
|
Photo.appendImageSection(hkfile);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Photo.appendTextSection(" 车架号照片");
|
||||||
|
|
||||||
|
for (Object yzs : cj) {
|
||||||
|
JSONObject jsonObject = (JSONObject) yzs;
|
||||||
|
String url = jsonObject.getString("url");
|
||||||
|
String hkfile = APIUtils.hkfile(url);
|
||||||
|
ThumbnailCompressor.compressWithThumbnailator(hkfile, hkfile);
|
||||||
|
Photo.appendImageSection(hkfile);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for (Object o : mx) {
|
||||||
|
|
||||||
|
JSONObject test = (JSONObject) o;
|
||||||
|
String xiang = test.getString("xiang");
|
||||||
|
|
||||||
|
String xiangs = "验车受损项:" + xiang;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Photo.appendTextSection(" " +xiangs);
|
||||||
|
|
||||||
|
JSONArray tp = test.getJSONArray("tp");
|
||||||
|
if (tp != null && tp.size() != 0) {
|
||||||
|
for (Object o1 : tp) {
|
||||||
|
JSONObject tests = (JSONObject) o1;
|
||||||
|
String url = tests.getString("url");
|
||||||
|
String hkfile = APIUtils.hkfile(url);
|
||||||
|
ThumbnailCompressor.compressWithThumbnailator(hkfile, hkfile);
|
||||||
|
Photo.appendTextSection(" 车损详情图片:");
|
||||||
|
Photo.appendImageSection(hkfile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Photo.appendTextSections(" 签字");
|
||||||
|
Photo.appendTextSections1("驾驶员/联营负责人签名:");
|
||||||
|
Photo.appendTextSectionss(" 盖章");
|
||||||
|
Photo.appendTextSectionss1("定损单位落章:");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Photo.closePDF();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//创建签署任务
|
||||||
|
JSONObject initiator = new JSONObject();
|
||||||
|
JSONObject openid = new JSONObject();
|
||||||
|
openid.put("idType", "corp");
|
||||||
|
openid.put("openId", "625776ecae6742cb8eb710beedef9b4c");
|
||||||
|
initiator.put("initiator", openid);
|
||||||
|
|
||||||
|
initiator.put("signTaskSubject", "交车定损单");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
initiator.put("businessId", "a09900c24614bd4c1de10c55712a3e0e");
|
||||||
|
//参与方数组
|
||||||
|
JSONArray jsonArray = new JSONArray();
|
||||||
|
JSONObject ownerId = new JSONObject(); // docid
|
||||||
|
ownerId.put("ownerId", openid);
|
||||||
|
ownerId.put("signTemplateId", "1767841802943145947");
|
||||||
|
String ownerIdJSONString = ownerId.toJSONString();
|
||||||
|
String doc = FDaDaUtil.doc(ownerIdJSONString);
|
||||||
|
|
||||||
|
//actor个人对象
|
||||||
|
JSONObject actor = new JSONObject();
|
||||||
|
//actor详细信息个人
|
||||||
|
JSONObject actorlist = new JSONObject();
|
||||||
|
actorlist.put("actorId", "参与方2");
|
||||||
|
actorlist.put("actorType", "person");
|
||||||
|
|
||||||
|
actorlist.put("actorName", name);
|
||||||
|
|
||||||
|
JSONArray permissions = new JSONArray();
|
||||||
|
permissions.add("sign");
|
||||||
|
|
||||||
|
actorlist.put("identNameForMatch", name);
|
||||||
|
|
||||||
|
actorlist.put("certType", "id_card");
|
||||||
|
|
||||||
|
actorlist.put("certNoForMatch", id1);
|
||||||
|
|
||||||
|
|
||||||
|
actorlist.put("notifyAddress", phone);
|
||||||
|
|
||||||
|
JSONArray notifyType = new JSONArray();
|
||||||
|
notifyType.add("start");
|
||||||
|
notifyType.add("finish");
|
||||||
|
actorlist.put("notifyType", notifyType);
|
||||||
|
actorlist.put("permissions", permissions);
|
||||||
|
|
||||||
|
JSONArray signFieldsgeren = new JSONArray();
|
||||||
|
JSONObject jsonObject55 = new JSONObject();
|
||||||
|
jsonObject55.put("fieldDocId",doc);
|
||||||
|
jsonObject55.put("fieldName","签字");
|
||||||
|
signFieldsgeren.add(jsonObject55);
|
||||||
|
|
||||||
|
|
||||||
|
actor.put("actor", actorlist);
|
||||||
|
actor.put("signFields",signFieldsgeren);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
jsonArray.add(actor);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
JSONArray docs = new JSONArray();
|
||||||
|
|
||||||
|
JSONObject qy = new JSONObject();
|
||||||
|
qy.put("docId",doc);
|
||||||
|
qy.put("docName","文件文档");
|
||||||
|
String ided = FddFileId.id("/home/java/dpapp8090/pdf/" + id + ".pdf");
|
||||||
|
qy.put("docFileId",ided);
|
||||||
|
JSONArray docFields = new JSONArray();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
JSONObject yiyes = new JSONObject();
|
||||||
|
yiyes.put("fieldId","4100411846");
|
||||||
|
yiyes.put("fieldName","签字");
|
||||||
|
JSONObject positions = new JSONObject();
|
||||||
|
positions.put("positionMode","keyword");
|
||||||
|
positions.put("positionKeyword","签字");
|
||||||
|
yiyes.put("position",positions);
|
||||||
|
yiyes.put("moveable","false");
|
||||||
|
yiyes.put("fieldType","person_sign");
|
||||||
|
|
||||||
|
docFields.add(yiyes);
|
||||||
|
|
||||||
|
qy.put("docFields",docFields);
|
||||||
|
|
||||||
|
docs.add(qy);
|
||||||
|
initiator.put("docs", docs);
|
||||||
|
|
||||||
|
|
||||||
|
initiator.put("actors", jsonArray);
|
||||||
|
String jsonString = initiator.toJSONString();
|
||||||
|
log.info("我是参数 " + jsonString);
|
||||||
|
|
||||||
|
String fdd = FDaDaUtil.fdds(jsonString);
|
||||||
|
log.info("车损明细文件生成:" + fdd);
|
||||||
|
JSONObject jsonObject = JSON.parseObject(fdd);
|
||||||
|
//任务id
|
||||||
|
String signTaskId = jsonObject.getJSONObject("data").getString("signTaskId");
|
||||||
|
String signTaskIds = String.valueOf(jsonObject.getJSONObject("data"));
|
||||||
|
System.out.println("signTaskId____________________" + signTaskId);
|
||||||
|
System.out.println("signTaskIds========================" + signTaskIds);
|
||||||
|
String signtask = FDaDaUtil.signtask(signTaskIds);
|
||||||
|
log.info("车损明细文件生成完成" + signtask);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (true){
|
||||||
|
Photo.startPDF("/home/java/dpapp8090/pdf/" + id + "a" + ".pdf");
|
||||||
|
Photo.TextAlignment(" 交车验收单");
|
||||||
|
Photo.appendTextSection(" 车号: " + car + " " + "所属分司: " + fs);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Photo.appendTextSection("驾驶员信息");
|
||||||
|
// Photo.appendTextSection("\n");
|
||||||
|
// Photo.appendTextSection(wws);
|
||||||
|
// Photo.appendTextSection("\n");
|
||||||
|
// Photo.appendTextSection("\n");
|
||||||
|
// Photo.appendTextSection("\n");
|
||||||
|
// Photo.appendTextSection("车辆信息");
|
||||||
|
// Photo.appendTextSection("\n");
|
||||||
|
// Photo.appendTextSection(cars);
|
||||||
|
// Photo.appendTextSection(gls);
|
||||||
|
// Photo.appendTextSection(dls);
|
||||||
|
// Photo.appendTextSection(sjs);
|
||||||
|
// Photo.appendTextSection("\n");
|
||||||
|
// Photo.appendTextSection("\n");
|
||||||
|
// Photo.appendTextSection("\n");
|
||||||
|
// Photo.appendTextSection("车辆整体照片");
|
||||||
|
|
||||||
|
|
||||||
|
for (Object yzs : mx) {
|
||||||
|
JSONObject jsonObject12 = (JSONObject) yzs;
|
||||||
|
String xiang = jsonObject12.getString("xiang");
|
||||||
|
Double jine = jsonObject12.getDouble("jine");
|
||||||
|
String bz = jsonObject12.getString("bz");
|
||||||
|
Photo.appendTextSection(" 项目: " +xiang + " " + " 金额: " + jine + " 备注: " + bz );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Photo.appendTextSection(" 备注: ");
|
||||||
|
|
||||||
|
Photo.appendTextSection(" 左前轮: " + zq);
|
||||||
|
|
||||||
|
Photo.appendTextSection(" 左后轮: " + zh);
|
||||||
|
|
||||||
|
Photo.appendTextSection(" 右前轮: " + yq);
|
||||||
|
|
||||||
|
Photo.appendTextSection(" 右后轮: " + yh);
|
||||||
|
|
||||||
|
Photo.appendTextSection(" 行驶里程(KM): " + gl);
|
||||||
|
|
||||||
|
Photo.appendTextSection(" 剩余电量(KM):" + dl);
|
||||||
|
|
||||||
|
|
||||||
|
Photo.appendTextSections(" 签字");
|
||||||
|
Photo.appendTextSections1("驾驶员/联营负责人签名:");
|
||||||
|
Photo.appendTextSectionss(" 盖章");
|
||||||
|
Photo.appendTextSectionss1("定损单位落章:");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Photo.closePDF();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//创建签署任务
|
||||||
|
JSONObject initiator12 = new JSONObject();
|
||||||
|
JSONObject openid12 = new JSONObject();
|
||||||
|
openid12.put("idType", "corp");
|
||||||
|
openid12.put("openId", "625776ecae6742cb8eb710beedef9b4c");
|
||||||
|
initiator12.put("initiator", openid12);
|
||||||
|
|
||||||
|
initiator12.put("signTaskSubject", "交车验收单");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
initiator12.put("businessId", "a09900c24614bd4c1de10c55712a3e0e");
|
||||||
|
//参与方数组
|
||||||
|
JSONArray jsonArray12 = new JSONArray();
|
||||||
|
JSONObject ownerId12 = new JSONObject(); // docid
|
||||||
|
ownerId12.put("ownerId", openid12);
|
||||||
|
ownerId12.put("signTemplateId", "1767841802943145947");
|
||||||
|
String ownerIdJSONString12 = ownerId12.toJSONString();
|
||||||
|
String doc12 = FDaDaUtil.doc(ownerIdJSONString12);
|
||||||
|
|
||||||
|
//actor个人对象
|
||||||
|
JSONObject actor12 = new JSONObject();
|
||||||
|
//actor详细信息个人
|
||||||
|
JSONObject actorlist12 = new JSONObject();
|
||||||
|
actorlist12.put("actorId", "参与方2");
|
||||||
|
actorlist12.put("actorType", "person");
|
||||||
|
|
||||||
|
actorlist12.put("actorName", name);
|
||||||
|
|
||||||
|
JSONArray permissions12 = new JSONArray();
|
||||||
|
permissions12.add("sign");
|
||||||
|
|
||||||
|
actorlist12.put("identNameForMatch", name);
|
||||||
|
|
||||||
|
actorlist12.put("certType", "id_card");
|
||||||
|
|
||||||
|
actorlist12.put("certNoForMatch", id1);
|
||||||
|
|
||||||
|
|
||||||
|
actorlist12.put("notifyAddress", phone);
|
||||||
|
|
||||||
|
JSONArray notifyType12 = new JSONArray();
|
||||||
|
notifyType12.add("start");
|
||||||
|
notifyType12.add("finish");
|
||||||
|
actorlist12.put("notifyType", notifyType12);
|
||||||
|
actorlist12.put("permissions", permissions12);
|
||||||
|
|
||||||
|
JSONArray signFieldsgeren12 = new JSONArray();
|
||||||
|
JSONObject jsonObject5512 = new JSONObject();
|
||||||
|
jsonObject5512.put("fieldDocId",doc12);
|
||||||
|
jsonObject5512.put("fieldName","签字");
|
||||||
|
signFieldsgeren12.add(jsonObject5512);
|
||||||
|
|
||||||
|
|
||||||
|
actor12.put("actor", actorlist12);
|
||||||
|
actor12.put("signFields",signFieldsgeren12);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
jsonArray12.add(actor12);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
JSONArray docs12 = new JSONArray();
|
||||||
|
|
||||||
|
JSONObject qy12 = new JSONObject();
|
||||||
|
qy12.put("docId",doc12);
|
||||||
|
qy12.put("docName","文件文档");
|
||||||
|
String ided12 = FddFileId.id("/home/java/dpapp8090/pdf/" + id + "a"+ ".pdf");
|
||||||
|
qy12.put("docFileId",ided12);
|
||||||
|
JSONArray docFields12 = new JSONArray();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
JSONObject yiyes12 = new JSONObject();
|
||||||
|
yiyes12.put("fieldId","4100411846");
|
||||||
|
yiyes12.put("fieldName","签字");
|
||||||
|
JSONObject positions12 = new JSONObject();
|
||||||
|
positions12.put("positionMode","keyword");
|
||||||
|
positions12.put("positionKeyword","签字");
|
||||||
|
yiyes12.put("position",positions12);
|
||||||
|
yiyes12.put("moveable","false");
|
||||||
|
yiyes12.put("fieldType","person_sign");
|
||||||
|
|
||||||
|
docFields12.add(yiyes12);
|
||||||
|
|
||||||
|
qy12.put("docFields",docFields12);
|
||||||
|
|
||||||
|
docs12.add(qy12);
|
||||||
|
initiator12.put("docs", docs12);
|
||||||
|
|
||||||
|
|
||||||
|
initiator12.put("actors", jsonArray12);
|
||||||
|
String jsonString12 = initiator12.toJSONString();
|
||||||
|
log.info("我是参数a " + jsonString12);
|
||||||
|
|
||||||
|
String fdd12 = FDaDaUtil.fdds(jsonString12);
|
||||||
|
log.info("车损明细文件生成a:" + fdd12);
|
||||||
|
JSONObject jsonObject12 = JSON.parseObject(fdd12);
|
||||||
|
//任务id
|
||||||
|
String signTaskId12 = jsonObject12.getJSONObject("data").getString("signTaskId");
|
||||||
|
String signTaskIds12 = String.valueOf(jsonObject12.getJSONObject("data"));
|
||||||
|
System.out.println("signTaskId____________________" + signTaskId12);
|
||||||
|
System.out.println("signTaskIds========================" + signTaskIds12);
|
||||||
|
String signtask12 = FDaDaUtil.signtask(signTaskIds12);
|
||||||
|
log.info("车损明细文件生成完成a" + signtask12);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,11 +1,14 @@
|
|||||||
package com.example.sso.controller;
|
package com.example.sso.controller;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.example.sso.dao.FddFileId;
|
||||||
import com.example.sso.dao.Photo;
|
import com.example.sso.dao.Photo;
|
||||||
import com.example.sso.dao.ThumbnailCompressor;
|
import com.example.sso.dao.ThumbnailCompressor;
|
||||||
import com.example.sso.test.O;
|
import com.example.sso.test.O;
|
||||||
import com.example.sso.util.APIUtils;
|
import com.example.sso.util.APIUtils;
|
||||||
|
import com.example.sso.util.FDaDaUtil;
|
||||||
import com.example.sso.util.TimeUtil;
|
import com.example.sso.util.TimeUtil;
|
||||||
import com.example.sso.util.TimeUtils;
|
import com.example.sso.util.TimeUtils;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -22,7 +25,7 @@ import java.io.IOException;
|
|||||||
public class TuiZuController {
|
public class TuiZuController {
|
||||||
|
|
||||||
@PostMapping("/tz")
|
@PostMapping("/tz")
|
||||||
public void yuezu(@RequestBody JSONObject data) throws IOException {
|
public void yuezu(@RequestBody JSONObject data) throws Exception {
|
||||||
|
|
||||||
log.info("退租数据" + data.toJSONString());
|
log.info("退租数据" + data.toJSONString());
|
||||||
|
|
||||||
@ -37,6 +40,19 @@ public class TuiZuController {
|
|||||||
JSONArray yz = object.getJSONArray("yz");
|
JSONArray yz = object.getJSONArray("yz");
|
||||||
JSONArray cj = object.getJSONArray("cj");
|
JSONArray cj = object.getJSONArray("cj");
|
||||||
|
|
||||||
|
String jsyss = object.getString("jsyss");
|
||||||
|
String name = object.getString("name");
|
||||||
|
String phone = object.getString("phone");
|
||||||
|
String id1 = object.getString("id1");
|
||||||
|
String a = object.getString("a");
|
||||||
|
|
||||||
|
String zq = object.getString("zq");
|
||||||
|
String zh = object.getString("zh");
|
||||||
|
String yq = object.getString("yq");
|
||||||
|
String yh = object.getString("yh");
|
||||||
|
String fs = object.getString("fs");
|
||||||
|
|
||||||
|
|
||||||
String ww = object.getString("ww");
|
String ww = object.getString("ww");
|
||||||
|
|
||||||
String wws = "姓名/联营方公司: " + ww;
|
String wws = "姓名/联营方公司: " + ww;
|
||||||
@ -45,24 +61,17 @@ public class TuiZuController {
|
|||||||
String dls = "车辆剩余电量(KM): " + dl.toString();
|
String dls = "车辆剩余电量(KM): " + dl.toString();
|
||||||
String sjs = "验车时间:" + timss;
|
String sjs = "验车时间:" + timss;
|
||||||
Photo.startPDF("/home/java/dpapp8090/pdf/" + id + ".pdf");
|
Photo.startPDF("/home/java/dpapp8090/pdf/" + id + ".pdf");
|
||||||
Photo.TextAlignment("交车定损单");
|
Photo.TextAlignment(" 交车定损单");
|
||||||
Photo.appendTextSection("\n");
|
Photo.appendTextSection(" 驾驶员信息");
|
||||||
Photo.appendTextSection("驾驶员信息");
|
Photo.appendTextSection(" " +wws);
|
||||||
Photo.appendTextSection("\n");
|
Photo.appendTextSection(" 车辆信息");
|
||||||
Photo.appendTextSection(wws);
|
|
||||||
Photo.appendTextSection("\n");
|
Photo.appendTextSection(" " +cars);
|
||||||
Photo.appendTextSection("\n");
|
Photo.appendTextSection(" " +gls);
|
||||||
Photo.appendTextSection("\n");
|
Photo.appendTextSection(" "+dls);
|
||||||
Photo.appendTextSection("车辆信息");
|
Photo.appendTextSection(" "+sjs);
|
||||||
Photo.appendTextSection("\n");
|
|
||||||
Photo.appendTextSection(cars);
|
Photo.appendTextSection(" 车辆整体照片");
|
||||||
Photo.appendTextSection(gls);
|
|
||||||
Photo.appendTextSection(dls);
|
|
||||||
Photo.appendTextSection(sjs);
|
|
||||||
Photo.appendTextSection("\n");
|
|
||||||
Photo.appendTextSection("\n");
|
|
||||||
Photo.appendTextSection("\n");
|
|
||||||
Photo.appendTextSection("车辆整体照片");
|
|
||||||
|
|
||||||
|
|
||||||
for (Object yzs : yz) {
|
for (Object yzs : yz) {
|
||||||
@ -74,7 +83,7 @@ public class TuiZuController {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Photo.appendTextSection("车架号照片");
|
Photo.appendTextSection(" 车架号照片");
|
||||||
|
|
||||||
for (Object yzs : cj) {
|
for (Object yzs : cj) {
|
||||||
JSONObject jsonObject = (JSONObject) yzs;
|
JSONObject jsonObject = (JSONObject) yzs;
|
||||||
@ -85,9 +94,7 @@ public class TuiZuController {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Photo.appendTextSection("\n");
|
|
||||||
Photo.appendTextSection("\n");
|
|
||||||
Photo.appendTextSection("\n");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -100,7 +107,7 @@ public class TuiZuController {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
Photo.appendTextSection(xiangs);
|
Photo.appendTextSection(" " +xiangs);
|
||||||
|
|
||||||
JSONArray tp = test.getJSONArray("tp");
|
JSONArray tp = test.getJSONArray("tp");
|
||||||
if (tp != null && tp.size() != 0) {
|
if (tp != null && tp.size() != 0) {
|
||||||
@ -109,23 +116,504 @@ public class TuiZuController {
|
|||||||
String url = tests.getString("url");
|
String url = tests.getString("url");
|
||||||
String hkfile = APIUtils.hkfile(url);
|
String hkfile = APIUtils.hkfile(url);
|
||||||
ThumbnailCompressor.compressWithThumbnailator(hkfile, hkfile);
|
ThumbnailCompressor.compressWithThumbnailator(hkfile, hkfile);
|
||||||
Photo.appendTextSection("车损详情图片:");
|
Photo.appendTextSection(" 车损详情图片:");
|
||||||
Photo.appendTextSection("\n");
|
|
||||||
Photo.appendImageSection(hkfile);
|
Photo.appendImageSection(hkfile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Photo.appendTextSection("\n");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Photo.appendTextSections(" 签字");
|
||||||
|
Photo.appendTextSections1("驾驶员/联营负责人签名:");
|
||||||
|
Photo.appendTextSectionss(" 盖章");
|
||||||
|
Photo.appendTextSectionss1("定损单位落章:");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Photo.closePDF();
|
Photo.closePDF();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//创建签署任务
|
||||||
|
JSONObject initiator = new JSONObject();
|
||||||
|
JSONObject openid = new JSONObject();
|
||||||
|
openid.put("idType", "corp");
|
||||||
|
openid.put("openId", "625776ecae6742cb8eb710beedef9b4c");
|
||||||
|
initiator.put("initiator", openid);
|
||||||
|
|
||||||
|
initiator.put("signTaskSubject", "交车定损单");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
initiator.put("businessId", "a09900c24614bd4c1de10c55712a3e0e");
|
||||||
|
//参与方数组
|
||||||
|
JSONArray jsonArray = new JSONArray();
|
||||||
|
JSONObject ownerId = new JSONObject(); // docid
|
||||||
|
ownerId.put("ownerId", openid);
|
||||||
|
ownerId.put("signTemplateId", "1767841802943145947");
|
||||||
|
String ownerIdJSONString = ownerId.toJSONString();
|
||||||
|
String doc = FDaDaUtil.doc(ownerIdJSONString);
|
||||||
|
|
||||||
|
//actor个人对象
|
||||||
|
JSONObject actor = new JSONObject();
|
||||||
|
//actor详细信息个人
|
||||||
|
JSONObject actorlist = new JSONObject();
|
||||||
|
actorlist.put("actorId", "参与方2");
|
||||||
|
actorlist.put("actorType", "person");
|
||||||
|
|
||||||
|
actorlist.put("actorName", name);
|
||||||
|
|
||||||
|
JSONArray permissions = new JSONArray();
|
||||||
|
permissions.add("sign");
|
||||||
|
|
||||||
|
actorlist.put("identNameForMatch", name);
|
||||||
|
|
||||||
|
actorlist.put("certType", "id_card");
|
||||||
|
|
||||||
|
actorlist.put("certNoForMatch", id1);
|
||||||
|
|
||||||
|
|
||||||
|
actorlist.put("notifyAddress", phone);
|
||||||
|
|
||||||
|
JSONArray notifyType = new JSONArray();
|
||||||
|
notifyType.add("start");
|
||||||
|
notifyType.add("finish");
|
||||||
|
actorlist.put("notifyType", notifyType);
|
||||||
|
actorlist.put("permissions", permissions);
|
||||||
|
|
||||||
|
JSONArray signFieldsgeren = new JSONArray();
|
||||||
|
JSONObject jsonObject55 = new JSONObject();
|
||||||
|
jsonObject55.put("fieldDocId",doc);
|
||||||
|
jsonObject55.put("fieldName","签字");
|
||||||
|
signFieldsgeren.add(jsonObject55);
|
||||||
|
|
||||||
|
|
||||||
|
actor.put("actor", actorlist);
|
||||||
|
actor.put("signFields",signFieldsgeren);
|
||||||
|
|
||||||
|
|
||||||
|
//企业方对象
|
||||||
|
JSONObject actors = new JSONObject();
|
||||||
|
//actor详细信息企业
|
||||||
|
JSONObject actorlists = new JSONObject();
|
||||||
|
actorlists.put("actorId", "参与方1");
|
||||||
|
actorlists.put("actorType", "corp");
|
||||||
|
|
||||||
|
actorlists.put("actorName", a);
|
||||||
|
|
||||||
|
/*JSONArray permissionss = new JSONArray();
|
||||||
|
permissionss.add("sign");
|
||||||
|
actorlists.put("permissions",permissionss);*/
|
||||||
|
if (!jsyss.equals("银建新能源")) {
|
||||||
|
actorlists.put("actorOpenId", "625776ecae6742cb8eb710beedef9b4c");
|
||||||
|
String entryids = FDaDaUtil.entryids(a);
|
||||||
|
actorlists.put("actorEntityId", entryids);
|
||||||
|
} else if (jsyss.equals("银建新能源")) {
|
||||||
|
actorlists.put("actorOpenId", "a0c12949a1c54ff9bfa45dbe957fbc5d");
|
||||||
|
}
|
||||||
|
/*actorlists.put("notifyAddress", "13520145209");*/
|
||||||
|
JSONArray notifyTypes = new JSONArray();
|
||||||
|
notifyTypes.add("start");
|
||||||
|
notifyTypes.add("finish");
|
||||||
|
actorlists.put("notifyType", notifyTypes);
|
||||||
|
JSONArray objects = new JSONArray();
|
||||||
|
objects.add("sign");
|
||||||
|
actorlists.put("permissions", objects);
|
||||||
|
JSONArray SignField = new JSONArray();
|
||||||
|
JSONObject jsonObject2 = new JSONObject();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
jsonObject2.put("fieldDocId", doc);
|
||||||
|
|
||||||
|
|
||||||
|
if (jsyss.equals("银建")) {
|
||||||
|
jsonObject2.put("sealId", 1705990704393128941l);
|
||||||
|
|
||||||
|
jsonObject2.put("fieldName", "签章");
|
||||||
|
|
||||||
|
} else if (jsyss.equals("金建")) {
|
||||||
|
jsonObject2.put("sealId", 1705991374867130717l);
|
||||||
|
jsonObject2.put("fieldName", "签章");
|
||||||
|
|
||||||
|
} else if (jsyss.equals("金银建")) {
|
||||||
|
jsonObject2.put("sealId", 1705991362754131529l);
|
||||||
|
jsonObject2.put("fieldName", "签章");;
|
||||||
|
|
||||||
|
} else if (jsyss.equals("华建")) {
|
||||||
|
jsonObject2.put("sealId", 1705991079845184562l);
|
||||||
|
jsonObject2.put("fieldName", "签章");
|
||||||
|
|
||||||
|
} else if (jsyss.equals("银建新能源")) {
|
||||||
|
jsonObject2.put("sealId", 1706510414541115296l);
|
||||||
|
jsonObject2.put("fieldName", "签章");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SignField.add(jsonObject2);
|
||||||
|
|
||||||
|
JSONObject signConfigInfo = new JSONObject();
|
||||||
|
JSONObject signConfigInfos = new JSONObject();
|
||||||
|
signConfigInfos.put("requestVerifyFree", true);
|
||||||
|
signConfigInfo.put("signConfigInfo", signConfigInfo);
|
||||||
|
|
||||||
|
|
||||||
|
actors.put("actor", actorlists);
|
||||||
|
actors.put("signFields", SignField);
|
||||||
|
actors.put("signConfigInfo", signConfigInfos);
|
||||||
|
|
||||||
|
|
||||||
|
jsonArray.add(actor);
|
||||||
|
jsonArray.add(actors);
|
||||||
|
|
||||||
|
|
||||||
|
JSONArray docs = new JSONArray();
|
||||||
|
|
||||||
|
JSONObject qy = new JSONObject();
|
||||||
|
qy.put("docId",doc);
|
||||||
|
qy.put("docName","文件文档");
|
||||||
|
String ided = FddFileId.id("/home/java/dpapp8090/pdf/" + id + ".pdf");
|
||||||
|
qy.put("docFileId",ided);
|
||||||
|
JSONArray docFields = new JSONArray();
|
||||||
|
|
||||||
|
JSONObject yiye = new JSONObject();
|
||||||
|
yiye.put("fieldId","8342392107");
|
||||||
|
yiye.put("fieldName","签章");
|
||||||
|
JSONObject position = new JSONObject();
|
||||||
|
position.put("positionMode","keyword");
|
||||||
|
position.put("positionKeyword","盖章");
|
||||||
|
yiye.put("position",position);
|
||||||
|
yiye.put("moveable","false");
|
||||||
|
yiye.put("fieldType","corp_seal");
|
||||||
|
|
||||||
|
docFields.add(yiye);
|
||||||
|
|
||||||
|
|
||||||
|
JSONObject yiyes = new JSONObject();
|
||||||
|
yiyes.put("fieldId","4100411846");
|
||||||
|
yiyes.put("fieldName","签字");
|
||||||
|
JSONObject positions = new JSONObject();
|
||||||
|
positions.put("positionMode","keyword");
|
||||||
|
positions.put("positionKeyword","签字");
|
||||||
|
yiyes.put("position",positions);
|
||||||
|
yiyes.put("moveable","false");
|
||||||
|
yiyes.put("fieldType","person_sign");
|
||||||
|
|
||||||
|
docFields.add(yiyes);
|
||||||
|
|
||||||
|
qy.put("docFields",docFields);
|
||||||
|
|
||||||
|
docs.add(qy);
|
||||||
|
initiator.put("docs", docs);
|
||||||
|
|
||||||
|
|
||||||
|
initiator.put("actors", jsonArray);
|
||||||
|
String jsonString = initiator.toJSONString();
|
||||||
|
log.info("我是参数 " + jsonString);
|
||||||
|
|
||||||
|
String fdd = FDaDaUtil.fdds(jsonString);
|
||||||
|
log.info("车损明细文件生成:" + fdd);
|
||||||
|
JSONObject jsonObject = JSON.parseObject(fdd);
|
||||||
|
//任务id
|
||||||
|
String signTaskId = jsonObject.getJSONObject("data").getString("signTaskId");
|
||||||
|
String signTaskIds = String.valueOf(jsonObject.getJSONObject("data"));
|
||||||
|
System.out.println("signTaskId____________________" + signTaskId);
|
||||||
|
System.out.println("signTaskIds========================" + signTaskIds);
|
||||||
|
String signtask = FDaDaUtil.signtask(signTaskIds);
|
||||||
|
log.info("车损明细文件生成完成" + signtask);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (true){
|
||||||
|
Photo.startPDF("/home/java/dpapp8090/pdf/" + id + "a" + ".pdf");
|
||||||
|
Photo.TextAlignment(" 交车验收单");
|
||||||
|
Photo.appendTextSection(" 车号: " + car + " " + "所属分司: " + fs);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Photo.appendTextSection("驾驶员信息");
|
||||||
|
// Photo.appendTextSection("\n");
|
||||||
|
// Photo.appendTextSection(wws);
|
||||||
|
// Photo.appendTextSection("\n");
|
||||||
|
// Photo.appendTextSection("\n");
|
||||||
|
// Photo.appendTextSection("\n");
|
||||||
|
// Photo.appendTextSection("车辆信息");
|
||||||
|
// Photo.appendTextSection("\n");
|
||||||
|
// Photo.appendTextSection(cars);
|
||||||
|
// Photo.appendTextSection(gls);
|
||||||
|
// Photo.appendTextSection(dls);
|
||||||
|
// Photo.appendTextSection(sjs);
|
||||||
|
// Photo.appendTextSection("\n");
|
||||||
|
// Photo.appendTextSection("\n");
|
||||||
|
// Photo.appendTextSection("\n");
|
||||||
|
// Photo.appendTextSection("车辆整体照片");
|
||||||
|
|
||||||
|
|
||||||
|
for (Object yzs : mx) {
|
||||||
|
JSONObject jsonObject12 = (JSONObject) yzs;
|
||||||
|
String xiang = jsonObject12.getString("xiang");
|
||||||
|
Double jine = jsonObject12.getDouble("jine");
|
||||||
|
String bz = jsonObject12.getString("bz");
|
||||||
|
Photo.appendTextSection(" 项目: " +xiang + " " + " 金额: " + jine + " 备注: " + bz );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Photo.appendTextSection(" 备注: ");
|
||||||
|
|
||||||
|
Photo.appendTextSection(" 左前轮: " + zq);
|
||||||
|
|
||||||
|
Photo.appendTextSection(" 左后轮: " + zh);
|
||||||
|
|
||||||
|
Photo.appendTextSection(" 右前轮: " + yq);
|
||||||
|
|
||||||
|
Photo.appendTextSection(" 右后轮: " + yh);
|
||||||
|
|
||||||
|
Photo.appendTextSection(" 行驶里程(KM): " + gl);
|
||||||
|
|
||||||
|
Photo.appendTextSection(" 剩余电量(KM):" + dl);
|
||||||
|
|
||||||
|
|
||||||
|
Photo.appendTextSections(" 签字");
|
||||||
|
Photo.appendTextSections1("驾驶员/联营负责人签名:");
|
||||||
|
Photo.appendTextSectionss(" 盖章");
|
||||||
|
Photo.appendTextSectionss1("定损单位落章:");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Photo.closePDF();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//创建签署任务
|
||||||
|
JSONObject initiator12 = new JSONObject();
|
||||||
|
JSONObject openid12 = new JSONObject();
|
||||||
|
openid12.put("idType", "corp");
|
||||||
|
openid12.put("openId", "625776ecae6742cb8eb710beedef9b4c");
|
||||||
|
initiator12.put("initiator", openid12);
|
||||||
|
|
||||||
|
initiator12.put("signTaskSubject", "交车验收单");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
initiator12.put("businessId", "a09900c24614bd4c1de10c55712a3e0e");
|
||||||
|
//参与方数组
|
||||||
|
JSONArray jsonArray12 = new JSONArray();
|
||||||
|
JSONObject ownerId12 = new JSONObject(); // docid
|
||||||
|
ownerId12.put("ownerId", openid12);
|
||||||
|
ownerId12.put("signTemplateId", "1767841802943145947");
|
||||||
|
String ownerIdJSONString12 = ownerId12.toJSONString();
|
||||||
|
String doc12 = FDaDaUtil.doc(ownerIdJSONString12);
|
||||||
|
|
||||||
|
//actor个人对象
|
||||||
|
JSONObject actor12 = new JSONObject();
|
||||||
|
//actor详细信息个人
|
||||||
|
JSONObject actorlist12 = new JSONObject();
|
||||||
|
actorlist12.put("actorId", "参与方2");
|
||||||
|
actorlist12.put("actorType", "person");
|
||||||
|
|
||||||
|
actorlist12.put("actorName", name);
|
||||||
|
|
||||||
|
JSONArray permissions12 = new JSONArray();
|
||||||
|
permissions12.add("sign");
|
||||||
|
|
||||||
|
actorlist12.put("identNameForMatch", name);
|
||||||
|
|
||||||
|
actorlist12.put("certType", "id_card");
|
||||||
|
|
||||||
|
actorlist12.put("certNoForMatch", id1);
|
||||||
|
|
||||||
|
|
||||||
|
actorlist12.put("notifyAddress", phone);
|
||||||
|
|
||||||
|
JSONArray notifyType12 = new JSONArray();
|
||||||
|
notifyType12.add("start");
|
||||||
|
notifyType12.add("finish");
|
||||||
|
actorlist12.put("notifyType", notifyType12);
|
||||||
|
actorlist12.put("permissions", permissions12);
|
||||||
|
|
||||||
|
JSONArray signFieldsgeren12 = new JSONArray();
|
||||||
|
JSONObject jsonObject5512 = new JSONObject();
|
||||||
|
jsonObject5512.put("fieldDocId",doc12);
|
||||||
|
jsonObject5512.put("fieldName","签字");
|
||||||
|
signFieldsgeren12.add(jsonObject5512);
|
||||||
|
|
||||||
|
|
||||||
|
actor12.put("actor", actorlist12);
|
||||||
|
actor12.put("signFields",signFieldsgeren12);
|
||||||
|
|
||||||
|
|
||||||
|
//企业方对象
|
||||||
|
JSONObject actors12 = new JSONObject();
|
||||||
|
//actor详细信息企业
|
||||||
|
JSONObject actorlists12 = new JSONObject();
|
||||||
|
actorlists12.put("actorId", "参与方1");
|
||||||
|
actorlists12.put("actorType", "corp");
|
||||||
|
|
||||||
|
actorlists12.put("actorName", a);
|
||||||
|
|
||||||
|
/*JSONArray permissionss = new JSONArray();
|
||||||
|
permissionss.add("sign");
|
||||||
|
actorlists.put("permissions",permissionss);*/
|
||||||
|
if (!jsyss.equals("银建新能源")) {
|
||||||
|
actorlists12.put("actorOpenId", "625776ecae6742cb8eb710beedef9b4c");
|
||||||
|
String entryids = FDaDaUtil.entryids(a);
|
||||||
|
actorlists12.put("actorEntityId", entryids);
|
||||||
|
} else if (jsyss.equals("银建新能源")) {
|
||||||
|
actorlists12.put("actorOpenId", "a0c12949a1c54ff9bfa45dbe957fbc5d");
|
||||||
|
}
|
||||||
|
/*actorlists.put("notifyAddress", "13520145209");*/
|
||||||
|
JSONArray notifyTypes12 = new JSONArray();
|
||||||
|
notifyTypes12.add("start");
|
||||||
|
notifyTypes12.add("finish");
|
||||||
|
actorlists12.put("notifyType", notifyTypes12);
|
||||||
|
JSONArray objects12 = new JSONArray();
|
||||||
|
objects12.add("sign");
|
||||||
|
actorlists12.put("permissions", objects12);
|
||||||
|
JSONArray SignField12 = new JSONArray();
|
||||||
|
JSONObject jsonObject212 = new JSONObject();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
jsonObject212.put("fieldDocId", doc12);
|
||||||
|
|
||||||
|
|
||||||
|
if (jsyss.equals("银建")) {
|
||||||
|
jsonObject212.put("sealId", 1705990704393128941l);
|
||||||
|
|
||||||
|
jsonObject212.put("fieldName", "签章");
|
||||||
|
|
||||||
|
} else if (jsyss.equals("金建")) {
|
||||||
|
jsonObject212.put("sealId", 1705991374867130717l);
|
||||||
|
jsonObject212.put("fieldName", "签章");
|
||||||
|
|
||||||
|
} else if (jsyss.equals("金银建")) {
|
||||||
|
jsonObject212.put("sealId", 1705991362754131529l);
|
||||||
|
jsonObject212.put("fieldName", "签章");;
|
||||||
|
|
||||||
|
} else if (jsyss.equals("华建")) {
|
||||||
|
jsonObject212.put("sealId", 1705991079845184562l);
|
||||||
|
jsonObject212.put("fieldName", "签章");
|
||||||
|
|
||||||
|
} else if (jsyss.equals("银建新能源")) {
|
||||||
|
jsonObject212.put("sealId", 1706510414541115296l);
|
||||||
|
jsonObject212.put("fieldName", "签章");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SignField12.add(jsonObject212);
|
||||||
|
|
||||||
|
JSONObject signConfigInfo12 = new JSONObject();
|
||||||
|
JSONObject signConfigInfos12 = new JSONObject();
|
||||||
|
signConfigInfos12.put("requestVerifyFree", true);
|
||||||
|
signConfigInfo12.put("signConfigInfo", signConfigInfo12);
|
||||||
|
|
||||||
|
|
||||||
|
actors12.put("actor", actorlists12);
|
||||||
|
actors12.put("signFields", SignField12);
|
||||||
|
actors12.put("signConfigInfo", signConfigInfos12);
|
||||||
|
|
||||||
|
|
||||||
|
jsonArray12.add(actor12);
|
||||||
|
jsonArray12.add(actors12);
|
||||||
|
|
||||||
|
|
||||||
|
JSONArray docs12 = new JSONArray();
|
||||||
|
|
||||||
|
JSONObject qy12 = new JSONObject();
|
||||||
|
qy12.put("docId",doc12);
|
||||||
|
qy12.put("docName","文件文档");
|
||||||
|
String ided12 = FddFileId.id("/home/java/dpapp8090/pdf/" + id + "a"+ ".pdf");
|
||||||
|
qy12.put("docFileId",ided12);
|
||||||
|
JSONArray docFields12 = new JSONArray();
|
||||||
|
|
||||||
|
JSONObject yiye12 = new JSONObject();
|
||||||
|
yiye12.put("fieldId","8342392107");
|
||||||
|
yiye12.put("fieldName","签章");
|
||||||
|
JSONObject position12 = new JSONObject();
|
||||||
|
position12.put("positionMode","keyword");
|
||||||
|
position12.put("positionKeyword","盖章");
|
||||||
|
yiye12.put("position",position12);
|
||||||
|
yiye12.put("moveable","false");
|
||||||
|
yiye12.put("fieldType","corp_seal");
|
||||||
|
|
||||||
|
docFields12.add(yiye12);
|
||||||
|
|
||||||
|
|
||||||
|
JSONObject yiyes12 = new JSONObject();
|
||||||
|
yiyes12.put("fieldId","4100411846");
|
||||||
|
yiyes12.put("fieldName","签字");
|
||||||
|
JSONObject positions12 = new JSONObject();
|
||||||
|
positions12.put("positionMode","keyword");
|
||||||
|
positions12.put("positionKeyword","签字");
|
||||||
|
yiyes12.put("position",positions12);
|
||||||
|
yiyes12.put("moveable","false");
|
||||||
|
yiyes12.put("fieldType","person_sign");
|
||||||
|
|
||||||
|
docFields12.add(yiyes12);
|
||||||
|
|
||||||
|
qy12.put("docFields",docFields12);
|
||||||
|
|
||||||
|
docs12.add(qy12);
|
||||||
|
initiator12.put("docs", docs12);
|
||||||
|
|
||||||
|
|
||||||
|
initiator12.put("actors", jsonArray12);
|
||||||
|
String jsonString12 = initiator12.toJSONString();
|
||||||
|
log.info("我是参数a " + jsonString12);
|
||||||
|
|
||||||
|
String fdd12 = FDaDaUtil.fdds(jsonString12);
|
||||||
|
log.info("车损明细文件生成a:" + fdd12);
|
||||||
|
JSONObject jsonObject12 = JSON.parseObject(fdd12);
|
||||||
|
//任务id
|
||||||
|
String signTaskId12 = jsonObject12.getJSONObject("data").getString("signTaskId");
|
||||||
|
String signTaskIds12 = String.valueOf(jsonObject12.getJSONObject("data"));
|
||||||
|
System.out.println("signTaskId____________________" + signTaskId12);
|
||||||
|
System.out.println("signTaskIds========================" + signTaskIds12);
|
||||||
|
String signtask12 = FDaDaUtil.signtask(signTaskIds12);
|
||||||
|
log.info("车损明细文件生成完成a" + signtask12);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
75
src/main/java/com/example/sso/dao/FddFileId.java
Normal file
75
src/main/java/com/example/sso/dao/FddFileId.java
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
package com.example.sso.dao;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.example.sso.util.FDaDaUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.BufferedOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
public class FddFileId {
|
||||||
|
public static String id(String file) throws Exception {
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
jsonObject.put("fileType","doc");
|
||||||
|
String jsonString = jsonObject.toJSONString();
|
||||||
|
|
||||||
|
|
||||||
|
String files = FDaDaUtil.files(jsonString);
|
||||||
|
JSONObject jsonObject1 = JSON.parseObject(files);
|
||||||
|
String string = jsonObject1.getJSONObject("data").getString("uploadUrl");
|
||||||
|
|
||||||
|
String fddFileUrl = jsonObject1.getJSONObject("data").getString("fddFileUrl");
|
||||||
|
|
||||||
|
log.info("xxxx " + files);
|
||||||
|
|
||||||
|
final File localFile = new File(file);
|
||||||
|
URL uploadUrl = new URL(string);
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) uploadUrl.openConnection();
|
||||||
|
connection.setRequestMethod("PUT");
|
||||||
|
connection.setRequestProperty("Content-Type", "application/octet-stream");
|
||||||
|
connection.setDoOutput(true);
|
||||||
|
BufferedOutputStream bos = new BufferedOutputStream(connection.getOutputStream());
|
||||||
|
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(localFile));
|
||||||
|
int readByte = -1;
|
||||||
|
while ((readByte = bis.read()) != -1) {
|
||||||
|
bos.write(readByte);
|
||||||
|
}
|
||||||
|
bis.close();
|
||||||
|
bos.close();
|
||||||
|
int responseCode = connection.getResponseCode();
|
||||||
|
System.out.println("返回的信息如下:");
|
||||||
|
System.out.println(responseCode + ":" + connection.getResponseMessage());
|
||||||
|
|
||||||
|
JSONObject jsonObject2 = new JSONObject();
|
||||||
|
JSONArray jsonArray = new JSONArray();
|
||||||
|
JSONObject jsonObject3 = new JSONObject();
|
||||||
|
jsonObject3.put("fileType","doc");
|
||||||
|
jsonObject3.put("fddFileUrl",fddFileUrl);
|
||||||
|
jsonObject3.put("fileName","694cd73a46b10f23d91ce48b.pdf");
|
||||||
|
jsonArray.add(jsonObject3);
|
||||||
|
jsonObject2.put("fddFileUrlList",jsonArray);
|
||||||
|
String jsonString1 = jsonObject2.toJSONString();
|
||||||
|
log.info("文件参数 " + jsonString1);
|
||||||
|
String fileid = FDaDaUtil.fileid(jsonString1);
|
||||||
|
log.info("文件返沪 "+fileid );
|
||||||
|
|
||||||
|
JSONObject jsonObject4 = JSON.parseObject(fileid);
|
||||||
|
JSONObject string1 = jsonObject4.getJSONObject("data");
|
||||||
|
JSONArray fileIdList = string1.getJSONArray("fileIdList");
|
||||||
|
String a = "";
|
||||||
|
for(Object o : fileIdList ){
|
||||||
|
JSONObject te = (JSONObject) o;
|
||||||
|
a = te.getString("fileId");
|
||||||
|
|
||||||
|
}
|
||||||
|
System.out.println(a);
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,87 +2,182 @@ package com.example.sso.dao;
|
|||||||
|
|
||||||
import com.itextpdf.io.image.ImageData;
|
import com.itextpdf.io.image.ImageData;
|
||||||
import com.itextpdf.io.image.ImageDataFactory;
|
import com.itextpdf.io.image.ImageDataFactory;
|
||||||
|
import com.itextpdf.kernel.colors.DeviceRgb;
|
||||||
import com.itextpdf.kernel.font.PdfFont;
|
import com.itextpdf.kernel.font.PdfFont;
|
||||||
import com.itextpdf.kernel.font.PdfFontFactory;
|
import com.itextpdf.kernel.font.PdfFontFactory;
|
||||||
import com.itextpdf.kernel.geom.PageSize;
|
import com.itextpdf.kernel.geom.PageSize;
|
||||||
|
import com.itextpdf.kernel.geom.Rectangle;
|
||||||
import com.itextpdf.kernel.pdf.PdfDocument;
|
import com.itextpdf.kernel.pdf.PdfDocument;
|
||||||
import com.itextpdf.kernel.pdf.PdfWriter;
|
import com.itextpdf.kernel.pdf.PdfWriter;
|
||||||
|
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
|
||||||
|
import com.itextpdf.layout.Canvas;
|
||||||
import com.itextpdf.layout.Document;
|
import com.itextpdf.layout.Document;
|
||||||
import com.itextpdf.layout.element.Image;
|
import com.itextpdf.layout.element.Image;
|
||||||
import com.itextpdf.layout.element.Paragraph;
|
import com.itextpdf.layout.element.Paragraph;
|
||||||
import com.itextpdf.layout.properties.TextAlignment;
|
import com.itextpdf.layout.properties.TextAlignment;
|
||||||
|
import com.itextpdf.layout.properties.VerticalAlignment;
|
||||||
|
import com.itextpdf.kernel.events.PdfDocumentEvent;
|
||||||
|
import com.itextpdf.kernel.events.IEventHandler;
|
||||||
|
import com.itextpdf.kernel.events.Event;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class Photo {
|
public class Photo {
|
||||||
|
// 使用 ThreadLocal 存储每个线程的独立变量
|
||||||
|
private static final ThreadLocal<PdfDocument> pdfDocThreadLocal = new ThreadLocal<>();
|
||||||
|
private static final ThreadLocal<Document> documentThreadLocal = new ThreadLocal<>();
|
||||||
|
private static final ThreadLocal<String> currentPdfPathThreadLocal = new ThreadLocal<>();
|
||||||
|
private static final ThreadLocal<PdfFont> chineseFontThreadLocal = new ThreadLocal<>();
|
||||||
|
|
||||||
private static PdfDocument pdfDoc = null;
|
// 存储每页的页脚文本(使用ThreadLocal确保线程安全)
|
||||||
private static Document document = null;
|
private static final ThreadLocal<List<FooterText>> footerTextsThreadLocal = new ThreadLocal<>();
|
||||||
private static String currentPdfPath = null;
|
|
||||||
|
// 页脚文本类
|
||||||
|
private static class FooterText {
|
||||||
|
String text;
|
||||||
|
float x;
|
||||||
|
float y;
|
||||||
|
DeviceRgb color;
|
||||||
|
|
||||||
|
FooterText(String text, float x, float y, DeviceRgb color) {
|
||||||
|
this.text = text;
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.color = color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 页脚事件处理器
|
||||||
|
private static class FooterEventHandler implements IEventHandler {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(Event event) {
|
||||||
|
PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
|
||||||
|
PdfCanvas canvas = new PdfCanvas(docEvent.getPage());
|
||||||
|
Rectangle pageSize = docEvent.getPage().getPageSize();
|
||||||
|
|
||||||
|
// 获取当前线程的字体和页脚文本
|
||||||
|
PdfFont chineseFont = chineseFontThreadLocal.get();
|
||||||
|
List<FooterText> footerTexts = footerTextsThreadLocal.get();
|
||||||
|
|
||||||
|
if (chineseFont == null || footerTexts == null || footerTexts.isEmpty()) {
|
||||||
|
canvas.release();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建Canvas用于绘制
|
||||||
|
Canvas pageCanvas = new Canvas(canvas, pageSize);
|
||||||
|
|
||||||
|
// 绘制所有页脚文本
|
||||||
|
for (FooterText footerText : footerTexts) {
|
||||||
|
Paragraph paragraph = new Paragraph(footerText.text)
|
||||||
|
.setFont(chineseFont)
|
||||||
|
.setFontSize(12);
|
||||||
|
|
||||||
|
if (footerText.color != null) {
|
||||||
|
paragraph.setFontColor(footerText.color);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 在指定位置绘制文本
|
||||||
|
pageCanvas.showTextAligned(
|
||||||
|
paragraph,
|
||||||
|
footerText.x,
|
||||||
|
footerText.y,
|
||||||
|
TextAlignment.LEFT,
|
||||||
|
VerticalAlignment.BOTTOM
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
canvas.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 开始创建PDF
|
* 开始创建PDF
|
||||||
*/
|
*/
|
||||||
public static void startPDF(String pdfPath) throws IOException {
|
public static void startPDF(String pdfPath) throws IOException {
|
||||||
if (pdfDoc != null) {
|
// 获取当前线程的变量
|
||||||
|
PdfDocument pdfDoc = pdfDocThreadLocal.get();
|
||||||
|
Document document = documentThreadLocal.get();
|
||||||
|
|
||||||
|
// 如果已经存在,先关闭
|
||||||
|
if (pdfDoc != null || document != null) {
|
||||||
closePDF();
|
closePDF();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* currentPdfPath = pdfPath;
|
// 创建新的PDF文档
|
||||||
|
currentPdfPathThreadLocal.set(pdfPath);
|
||||||
PdfWriter writer = new PdfWriter(pdfPath);
|
PdfWriter writer = new PdfWriter(pdfPath);
|
||||||
pdfDoc = new PdfDocument(writer);
|
pdfDoc = new PdfDocument(writer);
|
||||||
// document = new Document(pdfDoc);
|
|
||||||
// 创建文档时设置0边距
|
// 注册页脚事件处理器
|
||||||
|
FooterEventHandler footerHandler = new FooterEventHandler();
|
||||||
|
pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, footerHandler);
|
||||||
|
|
||||||
|
// 使用标准A4纸
|
||||||
document = new Document(pdfDoc, PageSize.A4, false);
|
document = new Document(pdfDoc, PageSize.A4, false);
|
||||||
|
|
||||||
// 设置页边距为0
|
|
||||||
document.setMargins(0, 0, 0, 0);
|
|
||||||
// 或者使用具体的值
|
|
||||||
// document.setMargins(0f, 0f, 0f, 0f);
|
|
||||||
|
|
||||||
// 移除默认的页眉页脚
|
|
||||||
pdfDoc.getDefaultPageSize();*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
currentPdfPath = pdfPath;
|
|
||||||
PdfWriter writer = new PdfWriter(pdfPath);
|
|
||||||
pdfDoc = new PdfDocument(writer);
|
|
||||||
|
|
||||||
// A4纸的标准宽度是595点(约210mm),高度自定义
|
|
||||||
// PageSize.A4.getWidth() 获取A4宽度
|
|
||||||
PageSize customPageSize = new PageSize(PageSize.A4.getWidth(), 842*20);
|
|
||||||
|
|
||||||
document = new Document(pdfDoc, customPageSize, false);
|
|
||||||
document.setMargins(0, 0, 0, 0);
|
document.setMargins(0, 0, 0, 0);
|
||||||
|
|
||||||
|
// 初始化中文字体
|
||||||
|
PdfFont chineseFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H");
|
||||||
|
|
||||||
|
// 初始化页脚文本列表
|
||||||
|
footerTextsThreadLocal.set(new ArrayList<>());
|
||||||
|
|
||||||
System.out.println("开始创建PDF: " + pdfPath);
|
// 保存到ThreadLocal
|
||||||
|
pdfDocThreadLocal.set(pdfDoc);
|
||||||
|
documentThreadLocal.set(document);
|
||||||
|
chineseFontThreadLocal.set(chineseFont);
|
||||||
|
|
||||||
|
System.out.println(Thread.currentThread().getName() + " 开始创建PDF: " + pdfPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置页脚文本(会在每一页底部显示)
|
||||||
|
*/
|
||||||
|
public static void setFooterText(String text) throws IOException {
|
||||||
|
Document document = documentThreadLocal.get();
|
||||||
|
PdfFont chineseFont = chineseFontThreadLocal.get();
|
||||||
|
|
||||||
|
if (document == null) {
|
||||||
|
throw new IllegalStateException("请先调用 startPDF() 方法");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chineseFont == null) {
|
||||||
|
chineseFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H");
|
||||||
|
chineseFontThreadLocal.set(chineseFont);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取页脚文本列表
|
||||||
|
List<FooterText> footerTexts = footerTextsThreadLocal.get();
|
||||||
|
if (footerTexts == null) {
|
||||||
|
footerTexts = new ArrayList<>();
|
||||||
|
footerTextsThreadLocal.set(footerTexts);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清空原有页脚,添加新的页脚文本
|
||||||
|
footerTexts.clear();
|
||||||
|
footerTexts.add(new FooterText(text, 50F, 30F, (DeviceRgb) DeviceRgb.BLACK));
|
||||||
|
|
||||||
|
System.out.println(Thread.currentThread().getName() + " 已设置页脚文本: " + text);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加图片章节
|
* 添加图片章节
|
||||||
*/
|
*/
|
||||||
public static void appendImageSection(String imagePath) throws IOException {
|
public static void appendImageSection(String imagePath) throws IOException {
|
||||||
|
Document document = documentThreadLocal.get();
|
||||||
if (document == null) {
|
if (document == null) {
|
||||||
throw new IllegalStateException("请先调用 startPDF() 方法");
|
throw new IllegalStateException("请先调用 startPDF() 方法");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加章节标题
|
|
||||||
// document.add(new Paragraph("图片部分")
|
|
||||||
// .setFontSize(20)
|
|
||||||
// .setBold()
|
|
||||||
// .setMarginTop(20));
|
|
||||||
|
|
||||||
// 添加图片
|
// 添加图片
|
||||||
if (imagePath != null && new File(imagePath).exists()) {
|
if (imagePath != null && new File(imagePath).exists()) {
|
||||||
ImageData imageData = ImageDataFactory.create(imagePath);
|
ImageData imageData = ImageDataFactory.create(imagePath);
|
||||||
Image image = new Image(imageData);
|
Image image = new Image(imageData);
|
||||||
|
|
||||||
// image.setAutoScale(true);
|
|
||||||
image.setHorizontalAlignment(com.itextpdf.layout.properties.HorizontalAlignment.CENTER);
|
image.setHorizontalAlignment(com.itextpdf.layout.properties.HorizontalAlignment.CENTER);
|
||||||
image.setMarginTop(5);
|
image.setMarginTop(5);
|
||||||
image.setMarginBottom(5);
|
image.setMarginBottom(5);
|
||||||
@ -90,55 +185,48 @@ public class Photo {
|
|||||||
image.setWidth(200);
|
image.setWidth(200);
|
||||||
|
|
||||||
document.add(image);
|
document.add(image);
|
||||||
// document.add(new Paragraph("图片说明")
|
|
||||||
// .setFontSize(10)
|
|
||||||
// .setItalic()
|
|
||||||
// .setTextAlignment(com.itextpdf.layout.properties.TextAlignment.CENTER));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println("已添加图片章节");
|
System.out.println(Thread.currentThread().getName() + " 已添加图片章节");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加文本章节
|
* 添加文本章节
|
||||||
*/
|
*/
|
||||||
public static void appendTextSection(String text) throws IOException {
|
public static void appendTextSection(String text) throws IOException {
|
||||||
|
Document document = documentThreadLocal.get();
|
||||||
|
PdfFont chineseFont = chineseFontThreadLocal.get();
|
||||||
|
|
||||||
if (document == null) {
|
if (document == null) {
|
||||||
throw new IllegalStateException("请先调用 startPDF() 方法");
|
throw new IllegalStateException("请先调用 startPDF() 方法");
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PdfFont chineseFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H");
|
if (chineseFont == null) {
|
||||||
|
chineseFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H");
|
||||||
|
chineseFontThreadLocal.set(chineseFont);
|
||||||
|
}
|
||||||
|
|
||||||
// 添加章节标题
|
|
||||||
document.add(new Paragraph(text)
|
document.add(new Paragraph(text)
|
||||||
.setFont(chineseFont)
|
.setFont(chineseFont)
|
||||||
.setFontSize(20)
|
.setFontSize(20)
|
||||||
.setBold()
|
.setBold()
|
||||||
.setMarginTop(20));
|
.setMarginTop(20));
|
||||||
|
|
||||||
/* // 添加文本
|
System.out.println(Thread.currentThread().getName() + " 已添加文本章节");
|
||||||
if (text != null && !text.trim().isEmpty()) {
|
|
||||||
String[] paragraphs = text.split("\n");
|
|
||||||
for (String para : paragraphs) {
|
|
||||||
document.add(new Paragraph(para)
|
|
||||||
.setFontSize(12)
|
|
||||||
.setMarginBottom(10));
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
System.out.println("已添加文本章节");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void TextAlignment(String text) throws IOException {
|
public static void TextAlignment(String text) throws IOException {
|
||||||
|
Document document = documentThreadLocal.get();
|
||||||
|
PdfFont chineseFont = chineseFontThreadLocal.get();
|
||||||
|
|
||||||
if (document == null) {
|
if (document == null) {
|
||||||
throw new IllegalStateException("请先调用 startPDF() 方法");
|
throw new IllegalStateException("请先调用 startPDF() 方法");
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PdfFont chineseFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H");
|
if (chineseFont == null) {
|
||||||
|
chineseFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H");
|
||||||
|
chineseFontThreadLocal.set(chineseFont);
|
||||||
|
}
|
||||||
|
|
||||||
// 创建段落并设置居中对齐
|
// 创建段落并设置居中对齐
|
||||||
Paragraph paragraph = new Paragraph(text)
|
Paragraph paragraph = new Paragraph(text)
|
||||||
@ -146,52 +234,120 @@ public class Photo {
|
|||||||
.setFontSize(20)
|
.setFontSize(20)
|
||||||
.setBold()
|
.setBold()
|
||||||
.setMarginTop(20)
|
.setMarginTop(20)
|
||||||
.setTextAlignment(TextAlignment.CENTER); // 添加这行实现居中
|
.setTextAlignment(TextAlignment.CENTER);
|
||||||
|
|
||||||
document.add(paragraph);
|
document.add(paragraph);
|
||||||
System.out.println("已添加文本章节");
|
System.out.println(Thread.currentThread().getName() + " 已添加文本章节");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void appendTextSections(String text) throws IOException {
|
public static void appendTextSections(String text) throws IOException {
|
||||||
|
Document document = documentThreadLocal.get();
|
||||||
|
PdfFont chineseFont = chineseFontThreadLocal.get();
|
||||||
|
|
||||||
if (document == null) {
|
if (document == null) {
|
||||||
throw new IllegalStateException("请先调用 startPDF() 方法");
|
throw new IllegalStateException("请先调用 startPDF() 方法");
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PdfFont chineseFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H");
|
if (chineseFont == null) {
|
||||||
|
chineseFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H");
|
||||||
// 添加章节标题
|
chineseFontThreadLocal.set(chineseFont);
|
||||||
// 设置绝对位置在页面底部
|
|
||||||
Paragraph paragraph = new Paragraph(text);
|
|
||||||
float pageHeight = PageSize.A4.getHeight(); // 842点
|
|
||||||
float bottomMargin = 50; // 距离底部50点
|
|
||||||
float leftMargin = 400; // 左边距
|
|
||||||
|
|
||||||
paragraph.setFixedPosition(leftMargin, bottomMargin, PageSize.A4.getWidth() - 40).setFont(chineseFont);
|
|
||||||
document.add(paragraph);
|
|
||||||
|
|
||||||
/* // 添加文本
|
|
||||||
if (text != null && !text.trim().isEmpty()) {
|
|
||||||
String[] paragraphs = text.split("\n");
|
|
||||||
for (String para : paragraphs) {
|
|
||||||
document.add(new Paragraph(para)
|
|
||||||
.setFontSize(12)
|
|
||||||
.setMarginBottom(10));
|
|
||||||
}
|
}
|
||||||
}*/
|
|
||||||
|
|
||||||
System.out.println("已添加文本章节");
|
List<FooterText> footerTexts = footerTextsThreadLocal.get();
|
||||||
|
if (footerTexts == null) {
|
||||||
|
footerTexts = new ArrayList<>();
|
||||||
|
footerTextsThreadLocal.set(footerTexts);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加白色文本
|
||||||
|
footerTexts.add(new FooterText(text, 475F, 25f, (DeviceRgb) DeviceRgb.WHITE));
|
||||||
|
|
||||||
|
System.out.println(Thread.currentThread().getName() + " 已添加白色页脚文本: " + text);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void appendTextSections1(String text) throws IOException {
|
||||||
|
Document document = documentThreadLocal.get();
|
||||||
|
PdfFont chineseFont = chineseFontThreadLocal.get();
|
||||||
|
|
||||||
|
if (document == null) {
|
||||||
|
throw new IllegalStateException("请先调用 startPDF() 方法");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chineseFont == null) {
|
||||||
|
chineseFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H");
|
||||||
|
chineseFontThreadLocal.set(chineseFont);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<FooterText> footerTexts = footerTextsThreadLocal.get();
|
||||||
|
if (footerTexts == null) {
|
||||||
|
footerTexts = new ArrayList<>();
|
||||||
|
footerTextsThreadLocal.set(footerTexts);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加黑色文本
|
||||||
|
footerTexts.add(new FooterText(text, 310f, 25f, null));
|
||||||
|
|
||||||
|
System.out.println(Thread.currentThread().getName() + " 已添加黑色页脚文本: " + text);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void appendTextSectionss(String text) throws IOException {
|
||||||
|
Document document = documentThreadLocal.get();
|
||||||
|
PdfFont chineseFont = chineseFontThreadLocal.get();
|
||||||
|
|
||||||
|
if (document == null) {
|
||||||
|
throw new IllegalStateException("请先调用 startPDF() 方法");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chineseFont == null) {
|
||||||
|
chineseFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H");
|
||||||
|
chineseFontThreadLocal.set(chineseFont);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<FooterText> footerTexts = footerTextsThreadLocal.get();
|
||||||
|
if (footerTexts == null) {
|
||||||
|
footerTexts = new ArrayList<>();
|
||||||
|
footerTextsThreadLocal.set(footerTexts);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加白色文本
|
||||||
|
footerTexts.add(new FooterText(text, 400F, 50F, (DeviceRgb) DeviceRgb.WHITE));
|
||||||
|
|
||||||
|
System.out.println(Thread.currentThread().getName() + " 已添加白色页脚文本: " + text);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void appendTextSectionss1(String text) throws IOException {
|
||||||
|
Document document = documentThreadLocal.get();
|
||||||
|
PdfFont chineseFont = chineseFontThreadLocal.get();
|
||||||
|
|
||||||
|
if (document == null) {
|
||||||
|
throw new IllegalStateException("请先调用 startPDF() 方法");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chineseFont == null) {
|
||||||
|
chineseFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H");
|
||||||
|
chineseFontThreadLocal.set(chineseFont);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<FooterText> footerTexts = footerTextsThreadLocal.get();
|
||||||
|
if (footerTexts == null) {
|
||||||
|
footerTexts = new ArrayList<>();
|
||||||
|
footerTextsThreadLocal.set(footerTexts);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加黑色文本
|
||||||
|
footerTexts.add(new FooterText(text, 310, 50, null));
|
||||||
|
|
||||||
|
System.out.println(Thread.currentThread().getName() + " 已添加黑色页脚文本: " + text);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加分页符
|
* 添加分页符
|
||||||
*/
|
*/
|
||||||
public static void addPageBreak() {
|
public static void addPageBreak() {
|
||||||
|
Document document = documentThreadLocal.get();
|
||||||
if (document != null) {
|
if (document != null) {
|
||||||
document.add(new com.itextpdf.layout.element.AreaBreak());
|
document.add(new com.itextpdf.layout.element.AreaBreak());
|
||||||
System.out.println("已添加分页符");
|
System.out.println(Thread.currentThread().getName() + " 已添加分页符");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,17 +355,30 @@ public class Photo {
|
|||||||
* 关闭并保存PDF
|
* 关闭并保存PDF
|
||||||
*/
|
*/
|
||||||
public static void closePDF() {
|
public static void closePDF() {
|
||||||
|
// 获取当前线程的变量
|
||||||
|
Document document = documentThreadLocal.get();
|
||||||
|
PdfDocument pdfDoc = pdfDocThreadLocal.get();
|
||||||
|
String currentPdfPath = currentPdfPathThreadLocal.get();
|
||||||
|
PdfFont chineseFont = chineseFontThreadLocal.get();
|
||||||
|
|
||||||
if (document != null) {
|
if (document != null) {
|
||||||
document.close();
|
document.close();
|
||||||
document = null;
|
documentThreadLocal.remove();
|
||||||
}
|
|
||||||
if (pdfDoc != null) {
|
|
||||||
pdfDoc.close();
|
|
||||||
pdfDoc = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println("PDF已保存: " + currentPdfPath);
|
if (pdfDoc != null) {
|
||||||
currentPdfPath = null;
|
pdfDoc.close();
|
||||||
|
pdfDocThreadLocal.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chineseFont != null) {
|
||||||
|
chineseFontThreadLocal.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentPdfPath != null) {
|
||||||
|
System.out.println(Thread.currentThread().getName() + " PDF已保存: " + currentPdfPath);
|
||||||
|
currentPdfPathThreadLocal.remove();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -218,24 +387,21 @@ public class Photo {
|
|||||||
public static void createPDFWithMultipleSections(String pdfPath) throws IOException {
|
public static void createPDFWithMultipleSections(String pdfPath) throws IOException {
|
||||||
startPDF(pdfPath);
|
startPDF(pdfPath);
|
||||||
|
|
||||||
|
try {
|
||||||
// 添加各种内容
|
// 添加各种内容
|
||||||
appendTextSection("这是文档的第一部分\n包含一些介绍性的文字");
|
appendTextSection("这是文档的第一部分\n包含一些介绍性的文字");
|
||||||
|
|
||||||
|
|
||||||
appendImageSection("image1.jpg");
|
appendImageSection("image1.jpg");
|
||||||
appendTextSection("这是图片1的描述文字");
|
appendTextSection("这是图片1的描述文字");
|
||||||
|
|
||||||
appendImageSection("image2.png");
|
appendImageSection("image2.png");
|
||||||
appendTextSection("这是图片2的描述文字");
|
appendTextSection("这是图片2的描述文字");
|
||||||
|
} finally {
|
||||||
// 关闭并保存
|
// 确保资源被释放
|
||||||
closePDF();
|
closePDF();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static void createSimpleChinesePDF() throws IOException {
|
public static void createSimpleChinesePDF() throws IOException {
|
||||||
|
// 这个方法不使用ThreadLocal变量,因为它自己创建PDF
|
||||||
// 1. 创建PDF
|
// 1. 创建PDF
|
||||||
PdfWriter writer = new PdfWriter("D:\\下载模板\\a.pdf");
|
PdfWriter writer = new PdfWriter("D:\\下载模板\\a.pdf");
|
||||||
PdfDocument pdfDoc = new PdfDocument(writer);
|
PdfDocument pdfDoc = new PdfDocument(writer);
|
||||||
@ -258,17 +424,13 @@ public class Photo {
|
|||||||
|
|
||||||
// 4. 关闭文档
|
// 4. 关闭文档
|
||||||
document.close();
|
document.close();
|
||||||
|
pdfDoc.close();
|
||||||
|
|
||||||
System.out.println("PDF创建完成");
|
System.out.println("PDF创建完成");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
/**
|
||||||
try {
|
* 测试多线程并发
|
||||||
createSimpleChinesePDF();
|
*/
|
||||||
} catch (IOException e) {
|
|
||||||
System.out.println("错误: " + e.getMessage());
|
|
||||||
System.out.println("请确保添加了 font-asian 依赖");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
73
src/main/java/com/example/sso/test/R.java
Normal file
73
src/main/java/com/example/sso/test/R.java
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
package com.example.sso.test;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.example.sso.util.FDaDaUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.BufferedOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
@Slf4j
|
||||||
|
public class R {
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
jsonObject.put("fileType","doc");
|
||||||
|
String jsonString = jsonObject.toJSONString();
|
||||||
|
|
||||||
|
|
||||||
|
String files = FDaDaUtil.files(jsonString);
|
||||||
|
JSONObject jsonObject1 = JSON.parseObject(files);
|
||||||
|
String string = jsonObject1.getJSONObject("data").getString("uploadUrl");
|
||||||
|
|
||||||
|
String fddFileUrl = jsonObject1.getJSONObject("data").getString("fddFileUrl");
|
||||||
|
|
||||||
|
log.info("xxxx " + files);
|
||||||
|
|
||||||
|
final File localFile = new File("D:\\下载模板\\a.pdf");
|
||||||
|
URL uploadUrl = new URL(string);
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) uploadUrl.openConnection();
|
||||||
|
connection.setRequestMethod("PUT");
|
||||||
|
connection.setRequestProperty("Content-Type", "application/octet-stream");
|
||||||
|
connection.setDoOutput(true);
|
||||||
|
BufferedOutputStream bos = new BufferedOutputStream(connection.getOutputStream());
|
||||||
|
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(localFile));
|
||||||
|
int readByte = -1;
|
||||||
|
while ((readByte = bis.read()) != -1) {
|
||||||
|
bos.write(readByte);
|
||||||
|
}
|
||||||
|
bis.close();
|
||||||
|
bos.close();
|
||||||
|
int responseCode = connection.getResponseCode();
|
||||||
|
System.out.println("返回的信息如下:");
|
||||||
|
System.out.println(responseCode + ":" + connection.getResponseMessage());
|
||||||
|
|
||||||
|
JSONObject jsonObject2 = new JSONObject();
|
||||||
|
JSONArray jsonArray = new JSONArray();
|
||||||
|
JSONObject jsonObject3 = new JSONObject();
|
||||||
|
jsonObject3.put("fileType","doc");
|
||||||
|
jsonObject3.put("fddFileUrl",fddFileUrl);
|
||||||
|
jsonObject3.put("fileName","a.pdf");
|
||||||
|
jsonArray.add(jsonObject3);
|
||||||
|
jsonObject2.put("fddFileUrlList",jsonArray);
|
||||||
|
String jsonString1 = jsonObject2.toJSONString();
|
||||||
|
log.info("文件参数 " + jsonString1);
|
||||||
|
String fileid = FDaDaUtil.fileid(jsonString1);
|
||||||
|
log.info("文件返沪 "+fileid );
|
||||||
|
|
||||||
|
JSONObject jsonObject4 = JSON.parseObject(fileid);
|
||||||
|
JSONObject string1 = jsonObject4.getJSONObject("data");
|
||||||
|
JSONArray fileIdList = string1.getJSONArray("fileIdList");
|
||||||
|
String a = "";
|
||||||
|
for(Object o : fileIdList ){
|
||||||
|
JSONObject te = (JSONObject) o;
|
||||||
|
a = te.getString("fileId");
|
||||||
|
|
||||||
|
}
|
||||||
|
System.out.println(a);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -164,6 +164,112 @@ public class FDaDaUtil {
|
|||||||
return outcome;
|
return outcome;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String fdds( String bizContent) throws Exception {
|
||||||
|
|
||||||
|
String token = getToken();
|
||||||
|
|
||||||
|
// 获取当前时间的毫秒数
|
||||||
|
long currentTimeMillis = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// 将毫秒数转换为13位时间戳
|
||||||
|
String timestamp = String.valueOf(currentTimeMillis);
|
||||||
|
while (timestamp.length() < 13) {
|
||||||
|
timestamp = "0" + timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出13位时间戳
|
||||||
|
/* System.out.println("13位时间戳: " + timestamp);*/
|
||||||
|
|
||||||
|
//Nonce,先定义取值范围
|
||||||
|
String chars = "0123456789QWERTYUIOPASDFGHJKLZXCVBNMabcdefghijklmnopqrstuvwxyz";
|
||||||
|
StringBuffer value = new StringBuffer();
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
value.append(chars.charAt((int) (Math.random() * 62)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* System.out.println("随机选取的10个数为:" + value.toString());*/
|
||||||
|
|
||||||
|
String nonce = value.toString();
|
||||||
|
|
||||||
|
// appid
|
||||||
|
String appId = "00000916";
|
||||||
|
//密钥
|
||||||
|
String appSecret = "0WPTPAJKWRULHJ9BGBCZGWGLNZRHY5HD";
|
||||||
|
//令牌
|
||||||
|
String AccessToken = token;
|
||||||
|
|
||||||
|
|
||||||
|
//公共参数
|
||||||
|
/*String bizContent="{\"ownerId\":{\"idType\":\"corp\",\"openId\":\"625776ecae6742cb8eb710beedef9b4c\"}}";*/
|
||||||
|
/* System.out.println(nonce);*/
|
||||||
|
Map<String, String> paramMap = new TreeMap<>(new Comparator<String>() {
|
||||||
|
@Override
|
||||||
|
public int compare(String str1, String str2) {
|
||||||
|
return str1.compareTo(str2);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
paramMap.put("X-FASC-App-Id", appId);
|
||||||
|
paramMap.put("X-FASC-Sign-Type", "HMAC-SHA256");
|
||||||
|
paramMap.put("X-FASC-Timestamp", timestamp);
|
||||||
|
paramMap.put("X-FASC-Nonce", nonce);
|
||||||
|
paramMap.put("X-FASC-Api-SubVersion", "5.1");
|
||||||
|
paramMap.put("X-FASC-AccessToken", AccessToken);
|
||||||
|
paramMap.put("bizContent", bizContent);
|
||||||
|
String str = "";
|
||||||
|
for (String key : paramMap.keySet()) {
|
||||||
|
/* System.out.println("key: " + key + " value: " + paramMap.get(key));*/
|
||||||
|
if (str.equals("") && str != null) {
|
||||||
|
str = str + key + "=" + paramMap.get(key);
|
||||||
|
} else {
|
||||||
|
str = str + "&" + key + "=" + paramMap.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
/* System.out.println(str);*/
|
||||||
|
|
||||||
|
byte[] secretSigning = hmac256(appSecret.getBytes(), timestamp);
|
||||||
|
/* System.out.println(byte2Hex(secretSigning));*/
|
||||||
|
|
||||||
|
String signText = getSha256Str(str);
|
||||||
|
|
||||||
|
byte[] secretSigning2 = hmac256(secretSigning, signText);
|
||||||
|
String sign = byte2Hex(secretSigning2);
|
||||||
|
/* System.out.println(sign);*/
|
||||||
|
|
||||||
|
|
||||||
|
String url = "https://api.fadada.com/api/v5/sign-task/create";
|
||||||
|
|
||||||
|
// 设置请求头
|
||||||
|
HttpHeaders headers = new HttpHeaders();
|
||||||
|
headers.add("Content-Type", "application/x-www-form-urlencoded");
|
||||||
|
headers.add("X-FASC-App-Id", appId);
|
||||||
|
headers.add("X-FASC-Sign-Type", "HMAC-SHA256");
|
||||||
|
headers.add("X-FASC-Sign", sign);
|
||||||
|
headers.add("X-FASC-Timestamp", timestamp);
|
||||||
|
headers.add("X-FASC-Nonce", nonce);
|
||||||
|
headers.add("X-FASC-AccessToken", AccessToken);
|
||||||
|
headers.add("X-FASC-Grant-Type", "client_credential");
|
||||||
|
headers.add("X-FASC-Api-SubVersion", "5.1");
|
||||||
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
|
|
||||||
|
MultiValueMap<String, String> forms = new LinkedMultiValueMap<String, String>();
|
||||||
|
|
||||||
|
forms.put("bizContent", Collections.singletonList(bizContent));
|
||||||
|
/* forms.put("X-FASC-Sign-Type", Collections.singletonList("HMAC-SHA256"));
|
||||||
|
forms.put("X-FASC-Sign", Collections.singletonList(sign));
|
||||||
|
forms.put("X-FASC-Timestamp", Collections.singletonList(timestamp));
|
||||||
|
forms.put("X-FASC-Nonce", Collections.singletonList(nonce));
|
||||||
|
forms.put("X-FASC-Grant-Type", Collections.singletonList("client_credential"));
|
||||||
|
forms.put("X-FASC-Api-SubVersion", Collections.singletonList("5.1"));*/
|
||||||
|
|
||||||
|
HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<MultiValueMap<String, String>>(forms, headers);
|
||||||
|
//获取返回数据
|
||||||
|
String outcome = restTemplate.postForObject(url, httpEntity, String.class);
|
||||||
|
|
||||||
|
|
||||||
|
return outcome;
|
||||||
|
}
|
||||||
|
|
||||||
public static String zuofei( String bizContent) throws Exception {
|
public static String zuofei( String bizContent) throws Exception {
|
||||||
|
|
||||||
String token = getToken();
|
String token = getToken();
|
||||||
@ -1209,6 +1315,219 @@ public class FDaDaUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static String files( String bizContent) throws Exception {
|
||||||
|
|
||||||
|
String token = getToken();
|
||||||
|
|
||||||
|
// 获取当前时间的毫秒数
|
||||||
|
long currentTimeMillis = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// 将毫秒数转换为13位时间戳
|
||||||
|
String timestamp = String.valueOf(currentTimeMillis);
|
||||||
|
while (timestamp.length() < 13) {
|
||||||
|
timestamp = "0" + timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出13位时间戳
|
||||||
|
/* System.out.println("13位时间戳: " + timestamp);*/
|
||||||
|
|
||||||
|
//Nonce,先定义取值范围
|
||||||
|
String chars = "0123456789QWERTYUIOPASDFGHJKLZXCVBNMabcdefghijklmnopqrstuvwxyz";
|
||||||
|
StringBuffer value = new StringBuffer();
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
value.append(chars.charAt((int) (Math.random() * 62)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* System.out.println("随机选取的10个数为:" + value.toString());*/
|
||||||
|
|
||||||
|
String nonce = value.toString();
|
||||||
|
|
||||||
|
// appid
|
||||||
|
String appId = "00000916";
|
||||||
|
//密钥
|
||||||
|
String appSecret = "0WPTPAJKWRULHJ9BGBCZGWGLNZRHY5HD";
|
||||||
|
//令牌
|
||||||
|
String AccessToken = token;
|
||||||
|
|
||||||
|
|
||||||
|
//公共参数
|
||||||
|
/*String bizContent="{\"ownerId\":{\"idType\":\"corp\",\"openId\":\"625776ecae6742cb8eb710beedef9b4c\"}}";*/
|
||||||
|
/* System.out.println(nonce);*/
|
||||||
|
Map<String, String> paramMap = new TreeMap<>(new Comparator<String>() {
|
||||||
|
@Override
|
||||||
|
public int compare(String str1, String str2) {
|
||||||
|
return str1.compareTo(str2);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
paramMap.put("X-FASC-App-Id", appId);
|
||||||
|
paramMap.put("X-FASC-Sign-Type", "HMAC-SHA256");
|
||||||
|
paramMap.put("X-FASC-Timestamp", timestamp);
|
||||||
|
paramMap.put("X-FASC-Nonce", nonce);
|
||||||
|
paramMap.put("X-FASC-Api-SubVersion", "5.1");
|
||||||
|
paramMap.put("X-FASC-AccessToken", AccessToken);
|
||||||
|
paramMap.put("bizContent", bizContent);
|
||||||
|
String str = "";
|
||||||
|
for (String key : paramMap.keySet()) {
|
||||||
|
/* System.out.println("key: " + key + " value: " + paramMap.get(key));*/
|
||||||
|
if (str.equals("") && str != null) {
|
||||||
|
str = str + key + "=" + paramMap.get(key);
|
||||||
|
} else {
|
||||||
|
str = str + "&" + key + "=" + paramMap.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
/* System.out.println(str);*/
|
||||||
|
|
||||||
|
byte[] secretSigning = hmac256(appSecret.getBytes(), timestamp);
|
||||||
|
/* System.out.println(byte2Hex(secretSigning));*/
|
||||||
|
|
||||||
|
String signText = getSha256Str(str);
|
||||||
|
|
||||||
|
byte[] secretSigning2 = hmac256(secretSigning, signText);
|
||||||
|
String sign = byte2Hex(secretSigning2);
|
||||||
|
/* System.out.println(sign);*/
|
||||||
|
|
||||||
|
|
||||||
|
String url = "https://api.fadada.com/api/v5/file/get-upload-url";
|
||||||
|
|
||||||
|
// 设置请求头
|
||||||
|
HttpHeaders headers = new HttpHeaders();
|
||||||
|
headers.add("Content-Type", "application/x-www-form-urlencoded");
|
||||||
|
headers.add("X-FASC-App-Id", appId);
|
||||||
|
headers.add("X-FASC-Sign-Type", "HMAC-SHA256");
|
||||||
|
headers.add("X-FASC-Sign", sign);
|
||||||
|
headers.add("X-FASC-Timestamp", timestamp);
|
||||||
|
headers.add("X-FASC-Nonce", nonce);
|
||||||
|
headers.add("X-FASC-AccessToken", AccessToken);
|
||||||
|
headers.add("X-FASC-Grant-Type", "client_credential");
|
||||||
|
headers.add("X-FASC-Api-SubVersion", "5.1");
|
||||||
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
|
|
||||||
|
MultiValueMap<String, String> forms = new LinkedMultiValueMap<String, String>();
|
||||||
|
|
||||||
|
forms.put("bizContent", Collections.singletonList(bizContent));
|
||||||
|
/* forms.put("X-FASC-Sign-Type", Collections.singletonList("HMAC-SHA256"));
|
||||||
|
forms.put("X-FASC-Sign", Collections.singletonList(sign));
|
||||||
|
forms.put("X-FASC-Timestamp", Collections.singletonList(timestamp));
|
||||||
|
forms.put("X-FASC-Nonce", Collections.singletonList(nonce));
|
||||||
|
forms.put("X-FASC-Grant-Type", Collections.singletonList("client_credential"));
|
||||||
|
forms.put("X-FASC-Api-SubVersion", Collections.singletonList("5.1"));*/
|
||||||
|
|
||||||
|
HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<MultiValueMap<String, String>>(forms, headers);
|
||||||
|
//获取返回数据
|
||||||
|
String outcome = restTemplate.postForObject(url, httpEntity, String.class);
|
||||||
|
|
||||||
|
|
||||||
|
return outcome;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static String fileid( String bizContent) throws Exception {
|
||||||
|
|
||||||
|
String token = getToken();
|
||||||
|
|
||||||
|
// 获取当前时间的毫秒数
|
||||||
|
long currentTimeMillis = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// 将毫秒数转换为13位时间戳
|
||||||
|
String timestamp = String.valueOf(currentTimeMillis);
|
||||||
|
while (timestamp.length() < 13) {
|
||||||
|
timestamp = "0" + timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出13位时间戳
|
||||||
|
/* System.out.println("13位时间戳: " + timestamp);*/
|
||||||
|
|
||||||
|
//Nonce,先定义取值范围
|
||||||
|
String chars = "0123456789QWERTYUIOPASDFGHJKLZXCVBNMabcdefghijklmnopqrstuvwxyz";
|
||||||
|
StringBuffer value = new StringBuffer();
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
value.append(chars.charAt((int) (Math.random() * 62)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* System.out.println("随机选取的10个数为:" + value.toString());*/
|
||||||
|
|
||||||
|
String nonce = value.toString();
|
||||||
|
|
||||||
|
// appid
|
||||||
|
String appId = "00000916";
|
||||||
|
//密钥
|
||||||
|
String appSecret = "0WPTPAJKWRULHJ9BGBCZGWGLNZRHY5HD";
|
||||||
|
//令牌
|
||||||
|
String AccessToken = token;
|
||||||
|
|
||||||
|
|
||||||
|
//公共参数
|
||||||
|
/*String bizContent="{\"ownerId\":{\"idType\":\"corp\",\"openId\":\"625776ecae6742cb8eb710beedef9b4c\"}}";*/
|
||||||
|
/* System.out.println(nonce);*/
|
||||||
|
Map<String, String> paramMap = new TreeMap<>(new Comparator<String>() {
|
||||||
|
@Override
|
||||||
|
public int compare(String str1, String str2) {
|
||||||
|
return str1.compareTo(str2);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
paramMap.put("X-FASC-App-Id", appId);
|
||||||
|
paramMap.put("X-FASC-Sign-Type", "HMAC-SHA256");
|
||||||
|
paramMap.put("X-FASC-Timestamp", timestamp);
|
||||||
|
paramMap.put("X-FASC-Nonce", nonce);
|
||||||
|
paramMap.put("X-FASC-Api-SubVersion", "5.1");
|
||||||
|
paramMap.put("X-FASC-AccessToken", AccessToken);
|
||||||
|
paramMap.put("bizContent", bizContent);
|
||||||
|
String str = "";
|
||||||
|
for (String key : paramMap.keySet()) {
|
||||||
|
/* System.out.println("key: " + key + " value: " + paramMap.get(key));*/
|
||||||
|
if (str.equals("") && str != null) {
|
||||||
|
str = str + key + "=" + paramMap.get(key);
|
||||||
|
} else {
|
||||||
|
str = str + "&" + key + "=" + paramMap.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
/* System.out.println(str);*/
|
||||||
|
|
||||||
|
byte[] secretSigning = hmac256(appSecret.getBytes(), timestamp);
|
||||||
|
/* System.out.println(byte2Hex(secretSigning));*/
|
||||||
|
|
||||||
|
String signText = getSha256Str(str);
|
||||||
|
|
||||||
|
byte[] secretSigning2 = hmac256(secretSigning, signText);
|
||||||
|
String sign = byte2Hex(secretSigning2);
|
||||||
|
/* System.out.println(sign);*/
|
||||||
|
|
||||||
|
|
||||||
|
String url = "https://api.fadada.com/api/v5/file/process";
|
||||||
|
|
||||||
|
// 设置请求头
|
||||||
|
HttpHeaders headers = new HttpHeaders();
|
||||||
|
headers.add("Content-Type", "application/x-www-form-urlencoded");
|
||||||
|
headers.add("X-FASC-App-Id", appId);
|
||||||
|
headers.add("X-FASC-Sign-Type", "HMAC-SHA256");
|
||||||
|
headers.add("X-FASC-Sign", sign);
|
||||||
|
headers.add("X-FASC-Timestamp", timestamp);
|
||||||
|
headers.add("X-FASC-Nonce", nonce);
|
||||||
|
headers.add("X-FASC-AccessToken", AccessToken);
|
||||||
|
headers.add("X-FASC-Grant-Type", "client_credential");
|
||||||
|
headers.add("X-FASC-Api-SubVersion", "5.1");
|
||||||
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
|
|
||||||
|
MultiValueMap<String, String> forms = new LinkedMultiValueMap<String, String>();
|
||||||
|
|
||||||
|
forms.put("bizContent", Collections.singletonList(bizContent));
|
||||||
|
/* forms.put("X-FASC-Sign-Type", Collections.singletonList("HMAC-SHA256"));
|
||||||
|
forms.put("X-FASC-Sign", Collections.singletonList(sign));
|
||||||
|
forms.put("X-FASC-Timestamp", Collections.singletonList(timestamp));
|
||||||
|
forms.put("X-FASC-Nonce", Collections.singletonList(nonce));
|
||||||
|
forms.put("X-FASC-Grant-Type", Collections.singletonList("client_credential"));
|
||||||
|
forms.put("X-FASC-Api-SubVersion", Collections.singletonList("5.1"));*/
|
||||||
|
|
||||||
|
HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<MultiValueMap<String, String>>(forms, headers);
|
||||||
|
//获取返回数据
|
||||||
|
String outcome = restTemplate.postForObject(url, httpEntity, String.class);
|
||||||
|
|
||||||
|
|
||||||
|
return outcome;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
企业主体
|
企业主体
|
||||||
@ -1321,6 +1640,8 @@ public class FDaDaUtil {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
企业主体ebtryid
|
企业主体ebtryid
|
||||||
*/
|
*/
|
||||||
|
|||||||
39
src/main/resources/logback-spring.xml
Normal file
39
src/main/resources/logback-spring.xml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<property name="LOG_PATH" value="./logs" />
|
||||||
|
<property name="LOG_FILE" value="app" />
|
||||||
|
<property name="MAX_HISTORY" value="30" />
|
||||||
|
|
||||||
|
<!-- 控制台输出 -->
|
||||||
|
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<!-- 按天滚动的文件输出 -->
|
||||||
|
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<!-- 当前日志文件 -->
|
||||||
|
<file>${LOG_PATH}/${LOG_FILE}.log</file>
|
||||||
|
|
||||||
|
<!-- 滚动策略 -->
|
||||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||||
|
<!-- 每天0点生成新文件 -->
|
||||||
|
<fileNamePattern>${LOG_PATH}/${LOG_FILE}.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||||
|
<!-- 保留30天 -->
|
||||||
|
<maxHistory>${MAX_HISTORY}</maxHistory>
|
||||||
|
</rollingPolicy>
|
||||||
|
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
|
||||||
|
<!-- 关键:立即刷新,确保启动时有日志就立即创建文件 -->
|
||||||
|
<immediateFlush>true</immediateFlush>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="CONSOLE" />
|
||||||
|
<appender-ref ref="FILE" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
||||||
Reference in New Issue
Block a user