package cn.timer.api.controller.dzht; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import org.springframework.beans.factory.annotation.Value; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.pagehelper.PageHelper; import com.google.common.collect.Lists; import cn.timer.api.bean.dzht.DzhtAssoCjlc; import cn.timer.api.bean.dzht.DzhtAssoGrzc; import cn.timer.api.bean.dzht.DzhtAssoHtcsr; import cn.timer.api.bean.dzht.DzhtAssoHtcyr; import cn.timer.api.bean.dzht.DzhtAssoHtmb; import cn.timer.api.bean.dzht.DzhtAssoMbzj; import cn.timer.api.bean.dzht.DzhtAssoQyyz; import cn.timer.api.bean.dzht.DzhtAssoQyzc; import cn.timer.api.bean.dzht.DzhtAssoSdgzq; import cn.timer.api.bean.dzht.DzhtAssoTpyz; import cn.timer.api.bean.qyzx.businessService.QyzxRemainingQuantity; import cn.timer.api.bean.qyzx.businessService.QyzxUseRecord; import cn.timer.api.bean.yggl.YgglMainEmp; import cn.timer.api.config.annotation.CurrentUser; import cn.timer.api.config.annotation.UserBean; import cn.timer.api.controller.dzht.cn.tign.hz.comm.FileHelper; import cn.timer.api.controller.dzht.cn.tign.hz.comm.HttpHelper; import cn.timer.api.controller.dzht.cn.tign.hz.constant.ConfigConstant; import cn.timer.api.controller.dzht.cn.tign.hz.domain.component.StructComponent; import cn.timer.api.controller.dzht.cn.tign.hz.domain.signarea.PosBean; import cn.timer.api.controller.dzht.cn.tign.hz.domain.signarea.Signfield; import cn.timer.api.controller.dzht.cn.tign.hz.domain.signflow.ConfigInfo; import cn.timer.api.controller.dzht.cn.tign.hz.domain.signflow.SignFlowStart; import cn.timer.api.controller.dzht.cn.tign.hz.enums.RequestType; import cn.timer.api.controller.dzht.cn.tign.hz.exception.DefineException; import cn.timer.api.controller.dzht.cn.tign.hz.helper.AccountHelper; import cn.timer.api.controller.dzht.cn.tign.hz.helper.FileTemplateHelper; import cn.timer.api.controller.dzht.cn.tign.hz.helper.SealHelper; import cn.timer.api.controller.dzht.cn.tign.hz.helper.SignHelper; import cn.timer.api.controller.dzht.cn.tign.hz.helper.TokenHelper; import cn.timer.api.controller.dzht.cn.tign.hz.param.SealParamUtil; import cn.timer.api.dto.dzht.DzhtQueryDto; import cn.timer.api.utils.Result; import cn.timer.api.utils.ResultUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @RestController @Api(tags = "8.1电子合同") @Transactional @RequestMapping(value = "/dzhtApi", produces = { "application/json" }) public class DzhtController2 { @Value("${config-8timer.esign.callbackUrl}") public String callbackUrl; // 回调地址 @Value("${config-8timer.esign.redirectUrl}") public String redirectUrl; // 重定向地址 private String getID(Integer empNum) { QueryWrapper<DzhtAssoGrzc> queryWrapper = new QueryWrapper<DzhtAssoGrzc>(); queryWrapper.eq("emp_num", empNum); DzhtAssoGrzc d = DzhtAssoGrzc.builder().build().selectOne(queryWrapper); if (d != null) { return d.getAccountId(); } return null; } @GetMapping("/getAccountId") @ApiOperation(value = "根据empNum查accountId", httpMethod = "GET", notes = "接口发布说明") public Result<Object> getAccountId(@CurrentUser UserBean userBean, Integer empNum) { return ResultUtil.data(getID(empNum), "查詢成功"); } protected String grzc(@CurrentUser UserBean userBean, Integer empNum) { JSONObject j = null; if (getID(empNum) == null) { Integer orgCode = userBean.getOrgCode(); YgglMainEmp yg = YgglMainEmp.builder().build() .selectOne(new QueryWrapper<YgglMainEmp>().eq("org_code", orgCode).eq("emp_num", empNum)); String phone = yg.getPhone(); String name = yg.getName(); Integer type = yg.getZjType(); String idType = null; if (type == null) return "IDCARD-ERROR"; if (type == 0) { idType = "CRED_PSN_CH_IDCARD";// 大陆身份证 } else if (type == 1) { idType = "CRED_PSN_CH_HONGKONG";// 香港通行证 } else if (type == 2) { idType = "CRED_PSN_CH_TWCARD";// 台湾通行证 } else if (type == 3) { idType = "CRED_PSN_FOREIGN";// 外籍护照 } String idNumber = yg.getZjNum(); DzhtAssoGrzc grzc = new DzhtAssoGrzc(); grzc.setThirdPartyUserId(idNumber); grzc.setName(name); grzc.setIdType(idType); grzc.setIdNumber(idNumber); grzc.setMobile(phone); grzc.setEmpNum(empNum); grzc.setOrgCode(orgCode); try { TokenHelper.getTokenData(); j = AccountHelper.createPersonAcct(idNumber, name, idType, idNumber, phone, null); } catch (DefineException e) { e.getStackTrace(); } grzc.setAccountId(j.getString("accountId")); grzc.insert(); return j.getString("accountId"); } return getID(empNum); } // 新增个人注册 @PostMapping("/esignGrzc/{empNum}") @ApiOperation(value = "e签宝个人注册(通过empNum)", httpMethod = "POST", notes = "接口发布说明") public Result<Object> esignGrzc(@CurrentUser UserBean userBean, @PathVariable Integer empNum) { return ResultUtil.data(grzc(userBean, empNum), "注册成功"); } // 新增e签宝企业注册 @PostMapping("/addQyzc") @ApiOperation(value = "e签宝企业注册", httpMethod = "POST", notes = "接口发布说明") public Result<Object> esignQyzc(@CurrentUser UserBean userBean, @RequestBody DzhtAssoQyzc qyzc) { DzhtAssoQyzc q = DzhtAssoQyzc.builder().build() .selectOne(new QueryWrapper<DzhtAssoQyzc>().eq("third_party_user_id", qyzc.getIdNumber())); if (q != null) { return ResultUtil.data(q.getOrgId(), "机构已存在"); } JSONObject j = null; String creator = grzc(userBean, userBean.getEmpNum()); qyzc.setCreator(creator); String thirdPartyUserId = qyzc.getIdNumber(); qyzc.setThirdPartyUserId(thirdPartyUserId); try { TokenHelper.getTokenData(); j = AccountHelper.createOrgAcct(thirdPartyUserId, creator, qyzc.getName(), qyzc.getIdType(), qyzc.getIdNumber()); Integer code = j.getInteger("code"); if (code != null && code != 0) return ResultUtil.error(j.getString("message")); } catch (DefineException e) { e.getStackTrace(); } String orgId = j.getString("orgId"); String accountId = j.getString("accountId"); qyzc.setOrgId(orgId); qyzc.setOrgCode(userBean.getOrgCode()); if (accountId != null) qyzc.insert(); return ResultUtil.data(orgId, "创建成功"); } // 查询企业信息 @GetMapping("/organizations") @ApiOperation(value = "查询企业信息", httpMethod = "GET", notes = "接口发布说明") public Result<Object> organizations(@CurrentUser UserBean userBean, String orgId) { JSONObject j = null; try { TokenHelper.getTokenData(); j = AccountHelper.qryOrgAcctByOrgId(orgId); } catch (DefineException e) { e.printStackTrace(); } return ResultUtil.data(j, "查詢成功"); } // 查询企业信息s @GetMapping("/getOrganizations") @ApiOperation(value = "查询企业信息s", httpMethod = "GET", notes = "接口发布说明") public Result<Object> getOrganizations(@CurrentUser UserBean userBean) { // List<QyzxEmpEntAsso> list = QyzxEmpEntAsso.builder().build().selectList( // new QueryWrapper<QyzxEmpEntAsso>().lambda().eq(QyzxEmpEntAsso::getEmpNum, userBean.getEmpNum())); // List<Integer> orgCodeList = Lists.transform(list, newList -> newList.getOrgCode()); List<String> orgIds = new ArrayList<String>(); // for (Integer orgCode : orgCodeList) { DzhtAssoQyzc qyzc = DzhtAssoQyzc.builder().build().selectOne(new QueryWrapper<DzhtAssoQyzc>().lambda() .eq(DzhtAssoQyzc::getOrgCode, userBean.getOrgCode()).select(DzhtAssoQyzc::getOrgId)); if (qyzc != null) orgIds.add(qyzc.getOrgId()); // } JSONObject j = null; List<JSONObject> result = new ArrayList<JSONObject>(); try { TokenHelper.getTokenData(); for (String orgId : orgIds) { j = AccountHelper.qryOrgAcctByOrgId(orgId); result.add(j); } } catch (DefineException e) { e.printStackTrace(); } return ResultUtil.data(result, "查詢成功"); } // 创建机构印章 @PostMapping("/orgTemplate") @ApiOperation(value = "创建机构模板印章", httpMethod = "POST", notes = "接口发布说明") public Result<Object> orgTemplate(@CurrentUser UserBean userBean, @RequestBody DzhtAssoQyyz qyyz) { DzhtAssoQyzc yz = DzhtAssoQyzc.builder().build() .selectOne(new QueryWrapper<DzhtAssoQyzc>().eq("org_code", userBean.getOrgCode()).select("org_id")); if (yz == null) { return ResultUtil.error("请先在签约主体中进行企业认证"); } String orgId = yz.getOrgId();// 查询orgId // String orgId = "dfd84b9a58d345ea90f6711bad853435";// 测试公司账户 // 印章参数 String alias = qyyz.getAlias(); String color = qyyz.getColor(); Integer height = qyyz.getHeight(); Integer width = qyyz.getWidth(); String htext = qyyz.getHtext(); String qtext = qyyz.getQtext(); String type = qyyz.getType(); String central = qyyz.getCentral(); String j = SealParamUtil.addOrgTemplateSealParam(alias, color, height, width, htext, qtext, type, central); String url = ConfigConstant.createOfficialSeal_URL(orgId); JSONObject json = null; try { TokenHelper.getTokenData();// 获取鉴权 json = HttpHelper.doCommHttp(RequestType.POST, url, j); if (json.get("code") == "0") { JSONObject data = json.getJSONObject("data"); qyyz.setFileKey(data.getString("fileKey")); qyyz.setSealId(data.getString("sealId")); qyyz.setCreateTime(new Date()); qyyz.setOrgId(orgId); qyyz.insert(); } } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } return ResultUtil.data(json, "创建企业印章成功"); } // 查询机构印章 @GetMapping("/qryOrgSeal") @ApiOperation(value = "查询机构模板印章", httpMethod = "GET", notes = "接口发布说明") public Result<Object> qryOrgSeal(@CurrentUser UserBean userBean, @RequestParam Integer offset, @RequestParam Integer size) { JSONObject a = null; try { TokenHelper.getTokenData();// 获取鉴权 DzhtAssoQyzc qyzc = DzhtAssoQyzc.builder().build() .selectOne(new QueryWrapper<DzhtAssoQyzc>().eq("org_code", userBean.getOrgCode()).select("org_id")); if (qyzc != null) { String orgId = qyzc.getOrgId();// 查询orgId a = SealHelper.qryOrgSeal(orgId, offset, size); } } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } return ResultUtil.data(a, "查询成功"); } /********************************************/ // 添加输入项组件 @PostMapping("/addComponents/{templateId}") @ApiOperation(value = "添加输入项组件", httpMethod = "POST", notes = "接口发布说明") public Result<Object> addComponents(@PathVariable String templateId, @RequestBody List<StructComponent> structComponents) { List<String> l = new ArrayList<String>(); for (StructComponent structComponent : structComponents) { String key = structComponent.getKey(); l.add(key); } String str2 = String.join(",", l); List<String> list = null; try { // List<StructComponent> structComponents = new ArrayList<StructComponent>(); // // 位置信息 // Pos pos = new Pos(1, 170, 682); // // 组件样式 // Style style = new Style(100, 24, null, null, null); // // 上下文信息 // Context context = new Context(name, null, null, style, pos); // // 组件包装 // StructComponent structComponent = new StructComponent(null, name, 1, // context); // structComponents.add(structComponent); TokenHelper.getTokenData();// 获取鉴权 list = FileTemplateHelper.addComponents(templateId, structComponents); String str = String.join(",", list); QueryWrapper<DzhtAssoMbzj> q = new QueryWrapper<DzhtAssoMbzj>(); q.eq("template_id", templateId); DzhtAssoMbzj mbzj = DzhtAssoMbzj.builder().build().selectOne(q); if (mbzj != null) { UpdateWrapper<DzhtAssoMbzj> u = new UpdateWrapper<DzhtAssoMbzj>(); u.eq("template_id", templateId).set("zjid", mbzj.getZjid() + "," + str); mbzj.update(u); } else { DzhtAssoMbzj mbzj2 = new DzhtAssoMbzj(); mbzj2.setTemplateId(templateId); mbzj2.setZjid(str); mbzj2.setZjkey(str2); mbzj2.insert(); } } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } return ResultUtil.data(list); } // 删除合同模板 @DeleteMapping("/delHtmb") @ApiOperation(value = "删除合同模版", httpMethod = "DELETE", notes = "接口发布说明") public Result<Object> delHtmb(@RequestParam String templateId) { DzhtAssoHtmb htmb = new DzhtAssoHtmb(); htmb.setIsDel(1); htmb.update(new UpdateWrapper<DzhtAssoHtmb>().eq("template_id", templateId)); return ResultUtil.success("删除成功"); } // 删除输入项组件 @DeleteMapping("/delComponents") @ApiOperation(value = "删除输入项组件", httpMethod = "DELETE", notes = "接口发布说明") public Result<Object> delComponents(@RequestParam String templateId, String ids) { try { TokenHelper.getTokenData();// 获取鉴权 FileTemplateHelper.delComponents(templateId, ids); } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } // 更新数据库组件id List<String> list = new ArrayList<String>(Arrays.asList(DzhtAssoMbzj.builder().build() .selectOne(new QueryWrapper<DzhtAssoMbzj>().eq("template_id", templateId)).getZjid().split(","))); for (String id : ids.split(",")) { if (list.contains(id)) { list.remove(id); } } String newZjid = String.join(",", list); UpdateWrapper<DzhtAssoMbzj> updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("template_id", templateId).set("zjid", newZjid); DzhtAssoMbzj.builder().build().update(updateWrapper); return ResultUtil.success(); } // 查询当前用户合同模板列表 @PostMapping("/qryComponentList") @ApiOperation(value = "查询当前用户合同模板列表", httpMethod = "POST", notes = "接口发布说明") public Result<Object> qryComponentList(@CurrentUser UserBean userBean, @RequestBody DzhtQueryDto dzhtQueryDto) { String mbmc = dzhtQueryDto.getQuery(); Page<DzhtAssoHtmb> page = new Page<DzhtAssoHtmb>( dzhtQueryDto.getCurrentPage() == null ? 1 : dzhtQueryDto.getCurrentPage(), dzhtQueryDto.getTotalPage() == null ? 10 : dzhtQueryDto.getTotalPage()); QueryWrapper<DzhtAssoHtmb> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("is_del", 0).eq("emp_num", userBean.getEmpNum()).like(mbmc != null, "mbmc", mbmc) .eq("org_code", userBean.getOrgCode()).select("template_id", "mbmc", "file_name", "created_time") .orderByDesc("created_time"); IPage<DzhtAssoHtmb> dPage = DzhtAssoHtmb.builder().build().selectPage(page, queryWrapper); List<DzhtAssoHtmb> htmbs = dPage.getRecords(); dPage.getCurrent(); dPage.getPages(); dPage.getTotal(); dPage.getSize(); return ResultUtil.data(dPage, htmbs, "查询成功"); } // 查询合同模板/组件 @GetMapping("/qryComponents") @ApiOperation(value = "查询合同模板/组件", httpMethod = "GET", notes = "接口发布说明") public Result<Object> qryComponents(@RequestParam String templateId) { JSONObject j = null; try { TokenHelper.getTokenData();// 获取鉴权 j = FileTemplateHelper.qryComponents(templateId); } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } return ResultUtil.data(j); } // 查询模板组件id @GetMapping("/qryMbzjid") @ApiOperation(value = "查询 模板组件id", httpMethod = "GET", notes = "接口发布说明") public Result<Object> qryMbzjid(@RequestParam String templateId) { String zjid = DzhtAssoMbzj.builder().build() .selectOne(new QueryWrapper<DzhtAssoMbzj>().eq("template_id", templateId)).getZjid(); String[] a = StringUtils.delimitedListToStringArray(zjid, ","); return ResultUtil.data(a); } // 查询文件详情/下载文件 /** * status 文件状态(返回参数) 0:文件未上传; 1:文件上传中 ; 2:文件上传已完成,; 3:文件上传失败 ; 4:文件等待转pdf ; * 5:文件已转换pdf 。 6:加水印中 7:加水印完毕 */ @GetMapping("/getDownLoadUrl") @ApiOperation(value = "查询文件详情/下载文件", httpMethod = "GET", notes = "接口发布说明") public Result<Object> getDownLoadUrl(@RequestParam String fileId) { JSONObject j = null; try { TokenHelper.getTokenData();// 获取鉴权 j = FileTemplateHelper.getDownLoadUrl(fileId); } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } return ResultUtil.data(j); } // 创建签署流程 @Transactional @PostMapping("/signflows") @ApiOperation(value = "创建签署流程", httpMethod = "POST", notes = "接口发布说明") public Result<Object> signflows(@CurrentUser UserBean userBean, @RequestBody DzhtAssoCjlc lc) { Integer empNum = userBean.getEmpNum(); Integer orgCode = userBean.getOrgCode(); String flowId = null; QyzxRemainingQuantity quantity = QyzxRemainingQuantity.builder().build().selectOne( new LambdaQueryWrapper<QyzxRemainingQuantity>().eq(QyzxRemainingQuantity::getOrgCode, orgCode) .eq(QyzxRemainingQuantity::getPmid, 2).gt(QyzxRemainingQuantity::getRemainder, 0)); Integer remainder = null; Date date = null; if (quantity != null) { remainder = quantity.getRemainder(); date = quantity.getExpireDate(); } if (quantity == null || remainder == null || remainder <= 0) { return ResultUtil.error("当前企业套餐余额不足,请充值购买后使用"); } if (date != null && date.getTime() <= new Date().getTime()) { return ResultUtil.error("当前企业电子合同套餐已过期"); } // ConfigInfo cfgInfo = new ConfigInfo(null, "1,2", null, null); // SignFlowStart sfs = new SignFlowStart(null, "测试签署流程开启", null, null, null, // null, null, cfgInfo); String a = null; if (callbackUrl != null) { a = callbackUrl; } // lc.getNoticeDeveloperUrl(); // 回调地址 String c = null; if (redirectUrl != null) { c = redirectUrl; } // lc.getRedirectUrl(); // 签署完成回调地址 String b = lc.getNoticeType(); String d = lc.getSignPlatform(); ConfigInfo cfgInfo = new ConfigInfo(a, b, c, d); Boolean e = lc.getAutoArchive(); String f = lc.getBusinessScene(); Long g = lc.getContractValidity(); Integer h = lc.getContractRemind(); Long i = lc.getSignValidity(); DzhtAssoGrzc grzc = DzhtAssoGrzc.builder().build() .selectOne(new QueryWrapper<DzhtAssoGrzc>().eq("emp_num", userBean.getEmpNum())); String j = null; if (grzc != null) { j = grzc.getAccountId(); } lc.setInitiatorAccountId(j); String k = lc.getInitiatorAuthorizedAccountId(); SignFlowStart sfs = new SignFlowStart(e, f, g, h, i, j, k, cfgInfo); JSONObject jsonObject = null; try { TokenHelper.getTokenData();// 获取鉴权 jsonObject = SignHelper.createSignFlow(sfs); flowId = jsonObject.getString("flowId"); lc.setFlowId(flowId); lc.setCreater(empNum); lc.setCreatedTime(new Date()); lc.setOrgCode(orgCode); lc.insert(); } catch (DefineException e1) { e1.printStackTrace(); return ResultUtil.error(); } QyzxUseRecord qyzxUseRecord = new QyzxUseRecord(); qyzxUseRecord.setCreateTime(new Date()); YgglMainEmp ygglMainEmp = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda() .eq(YgglMainEmp::getEmpNum, empNum).select(YgglMainEmp::getName)); String name = null; if (ygglMainEmp != null) { name = ygglMainEmp.getName(); } qyzxUseRecord.setCreateUser(name); qyzxUseRecord.setOriginalTotalNum(remainder); qyzxUseRecord.setNowTotalNum(--remainder); qyzxUseRecord.setOrderNo(quantity.getOrderNo()); qyzxUseRecord.setOrgCode(orgCode); qyzxUseRecord.setUseNum(1); qyzxUseRecord.setScene("签署中"); qyzxUseRecord.setPmid(2); qyzxUseRecord.setFlowId(flowId); qyzxUseRecord.setFlowName(f); qyzxUseRecord.insert(); quantity.setRemainder(remainder); quantity.updateById(); return ResultUtil.data(jsonObject, "创建签署流程成功"); } // 签署流程查询 // 0-草稿 1-签署中 2-完成 3-撤销 5-过期(签署截至日志到期后触发) 7-拒签 @GetMapping("/qrySignFlow") @ApiOperation(value = "签署流程查询", httpMethod = "GET", notes = "接口发布说明") public Result<Object> qrySignFlow(@RequestParam String flowId) { JSONObject json = null; try { TokenHelper.getTokenData();// 获取鉴权 json = SignHelper.qrySignFlow(flowId); } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } return ResultUtil.data(json, "查询成功"); } // 流程签署人列表 @GetMapping("/qryFlowSigners") @ApiOperation(value = "流程签署人列表", httpMethod = "GET", notes = "接口发布说明") public Result<Object> qryFlowSigners(@RequestParam String flowId) { JSONObject json = null; try { TokenHelper.getTokenData();// 获取鉴权 json = SignHelper.qryFlowSigners(flowId); } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } return ResultUtil.data(json, "查询成功"); } // 流程签署人列表(签署人姓名、AccountId) @GetMapping("/getQsr") @ApiOperation(value = "流程签署人列表(签署人姓名、AccountId)", httpMethod = "GET", notes = "接口发布说明") public Result<Object> flowSigners(@RequestParam String flowId) { JSONObject json = null; List<Map<String, String>> l = new ArrayList<Map<String, String>>(); try { TokenHelper.getTokenData();// 获取鉴权 json = SignHelper.qryFlowSigners(flowId); JSONArray j = json.getJSONArray("signers"); if (j != null) { for (int i = 0; i < j.size(); i++) { Map<String, String> map = new HashMap<String, String>(); String signerAccountId = j.getJSONObject(i).getString("signerAccountId"); String signerName = j.getJSONObject(i).getString("signerName"); map.put("signerAccountId", signerAccountId); map.put("signerName", signerName); l.add(map); } } } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } return ResultUtil.data(l, "查询成功"); } // 流程文档添加 @PostMapping("/addFlowDoc") @ApiOperation(value = "流程文档添加", httpMethod = "POST", notes = "接口发布说明") public Result<Object> addFlowDoc(@RequestParam String fileIds, @RequestParam String flowId) { try { TokenHelper.getTokenData();// 获取鉴权 SignHelper.addFlowDoc(flowId, fileIds); } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } return ResultUtil.success("添加成功"); } // 流程文档删除 @DeleteMapping("/delFlowDoc") @ApiOperation(value = "流程文档删除", httpMethod = "DELETE", notes = "接口发布说明") public Result<Object> delFlowDoc(@RequestParam String fileIds, @RequestParam String flowId) { try { TokenHelper.getTokenData();// 获取鉴权 SignHelper.delFlowDoc(flowId, fileIds); } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } return ResultUtil.success("删除成功"); } // 保存参与人信息 @PostMapping("/saveCyr") @ApiOperation(value = "保存参与人信息", httpMethod = "POST", notes = "接口发布说明") public Result<Object> saveCyr(@CurrentUser UserBean userBean, @RequestBody List<DzhtAssoHtcyr> htcyrs) { for (DzhtAssoHtcyr htcyr : htcyrs) { Integer empNum = htcyr.getEmpNum(); DzhtAssoGrzc grzc = DzhtAssoGrzc.builder().build() .selectOne(new QueryWrapper<DzhtAssoGrzc>().eq("emp_num", empNum)); if (grzc != null) { htcyr.setSignerAccountId(grzc.getAccountId()); } else { htcyr.setSignerAccountId(grzc(userBean, empNum));// 没有就注册一个 } DzhtAssoHtcyr cyr = DzhtAssoHtcyr.builder().build().selectOne( new QueryWrapper<DzhtAssoHtcyr>().eq("emp_num", empNum).eq("template_id", htcyr.getTemplateId())); if (cyr == null) { htcyr.insert(); } } return ResultUtil.data(htcyrs, "保存成功"); } // 获取参与人信息 @GetMapping("/getCyr") @ApiOperation(value = "获取参与人信息", httpMethod = "GET", notes = "接口发布说明") public Result<Object> getCyr(@CurrentUser UserBean userBean, String templateId) { List<DzhtAssoHtcyr> dzht = DzhtAssoHtcyr.builder().build() .selectList(new QueryWrapper<DzhtAssoHtcyr>().eq("template_id", templateId)); return ResultUtil.data(dzht, "查询成功"); } // 保存抄送人信息 @PostMapping("/saveCsr") @ApiOperation(value = "保存抄送人信息", httpMethod = "POST", notes = "接口发布说明") public Result<Object> saveCsr(@CurrentUser UserBean userBean, @RequestBody List<DzhtAssoHtcsr> htcsrs) { for (DzhtAssoHtcsr htcsr : htcsrs) { Integer empNum = htcsr.getEmpNum(); DzhtAssoGrzc grzc = DzhtAssoGrzc.builder().build() .selectOne(new QueryWrapper<DzhtAssoGrzc>().eq("emp_num", empNum)); if (grzc != null) { htcsr.setSignerAccountId(grzc.getAccountId()); } else { htcsr.setSignerAccountId(grzc(userBean, empNum));// 没有就注册一个 } DzhtAssoHtcsr cyr = DzhtAssoHtcsr.builder().build().selectOne( new QueryWrapper<DzhtAssoHtcsr>().eq("emp_num", empNum).eq("template_id", htcsr.getTemplateId())); if (cyr == null) { htcsr.insert(); } } return ResultUtil.data(htcsrs, "保存成功"); } // 获取抄送人信息 @GetMapping("/getCsr") @ApiOperation(value = "获取抄送人信息", httpMethod = "GET", notes = "接口发布说明") public Result<Object> getCsr(@CurrentUser UserBean userBean, String templateId) { List<DzhtAssoHtcsr> dzht = DzhtAssoHtcsr.builder().build() .selectList(new QueryWrapper<DzhtAssoHtcsr>().eq("template_id", templateId)); return ResultUtil.data(dzht, "查询成功"); } // // 保存手动盖章签署区 // @PostMapping("/saveSign") // @ApiOperation(value = "保存手动盖章区信息", httpMethod = "POST", notes = "接口发布说明") // public Result<Object> saveSign(@CurrentUser UserBean userBean, @RequestBody List<DzhtAssoSdgzq> sdgzqs) { // for (DzhtAssoSdgzq sdgzq : sdgzqs) { // sdgzq.setCreater(userBean.getEmpNum()); // sdgzq.setCreatedTime(new Date()); // sdgzq.setOrgCode(userBean.getOrgCode()); // sdgzq.insert(); // } // return ResultUtil.data(sdgzqs); // // } // 添加手动盖章签署区 @PostMapping("/handSign") @ApiOperation(value = "添加手动盖章区", httpMethod = "POST", notes = "接口发布说明") public Result<Object> handSign(@CurrentUser UserBean userBean, @RequestBody List<DzhtAssoSdgzq> sdgzqs) { List<String> list = new ArrayList<String>(); // 这里举一个签署区的例子 // String fileId1 = fileIds.get(0); // String signerAccountId1 = signerAccountIds.get(0); // String authorizedAccountId1 = // CollectionUtils.isNotEmpty(authorizedAccountIds) ? // authorizedAccountIds.get(0) : null; // // List<Signfield> list = Lists.newArrayList(); // PosBean posBean1 = new PosBean("1", 500f, 100f, null, null); // Signfield signfield1 = new Signfield(fileId1, signerAccountId1, null, // authorizedAccountId1, null, 1, posBean1, // null, null, null); // // list.add(signfield1); // List<DzhtAssoSdgzq> sdgzqs = DzhtAssoSdgzq.builder().build().selectList(new // QueryWrapper<DzhtAssoSdgzq>() // .eq("org_code", userBean.getOrgCode()).eq("emp_num", // userBean.getEmpNum()).orderByDesc("created_time")); List<Signfield> signfields = new ArrayList<Signfield>(); JSONObject json = null; for (DzhtAssoSdgzq sdgzq : sdgzqs) { String flowId = sdgzq.getFlowId(); DzhtAssoCjlc lc = DzhtAssoCjlc.builder().build() .selectOne(new QueryWrapper<DzhtAssoCjlc>().eq("flow_id", flowId).select("business_scene")); sdgzq.setBusinessScene(lc.getBusinessScene());// 文件主题 String fileId = sdgzq.getFileId(); String signerAccountId = sdgzq.getSignerAccountId(); list.add(signerAccountId); String authorizedAccountId = sdgzq.getAuthorizedAccountId(); Integer actorIndentityType = sdgzq.getActorIndentityType(); Boolean assignedPosbean = sdgzq.getAssignedPosbean(); Integer order = sdgzq.getSignOrder(); String posPage = sdgzq.getPosPage(); Float posX = sdgzq.getPosX(); Float posY = sdgzq.getPosY(); Float width = sdgzq.getWidth(); Boolean addSignTime = sdgzq.getAddSignTime(); String sealType = sdgzq.getSealType(); // String sealId = sdgzq.getSealId(); Integer signType = sdgzq.getSignType(); String thirdOrderNo = sdgzq.getThirdOrderNo(); PosBean posBean = new PosBean(posPage, posX, posY, width, addSignTime); Signfield signfield = new Signfield(fileId, signerAccountId, actorIndentityType, authorizedAccountId, assignedPosbean, order, posBean, sealType, signType, thirdOrderNo); signfields.add(signfield); try { DzhtAssoGrzc grzc = DzhtAssoGrzc.builder().build() .selectOne(new QueryWrapper<DzhtAssoGrzc>().eq("account_id", signerAccountId)); if (grzc != null) { Integer signerEmpNum = grzc.getEmpNum(); sdgzq.setSignerEmpNum(signerEmpNum);// 签署人员工号 } sdgzq.setCreater(userBean.getEmpNum()); sdgzq.setCreatedTime(new Date()); sdgzq.setOrgCode(userBean.getOrgCode()); TokenHelper.getTokenData(); json = SignHelper.addSignerHandSignArea(flowId, signfields); JSONObject jsonObject = json.getJSONArray("signfieldBeans").getJSONObject(0); sdgzq.setSignfieldId(jsonObject.getString("signfieldId")); } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } // String str = String.join(",", list); // // DzhtAssoCjlc lc = DzhtAssoCjlc.builder().build() // .selectOne(new QueryWrapper<DzhtAssoCjlc>().eq("flow_id", flowId)); // String accountId = lc.getSingerAccountId(); // // if (accountId != null) { // accountId = accountId + "," + str; // } // DzhtAssoCjlc.builder().singerAccountId(accountId).build() // .update(new QueryWrapper<DzhtAssoCjlc>().eq("flow_id", flowId)); // 更新创建流程签署人 sdgzq.insert(); } return ResultUtil.data(json, "添加成功"); } // 创建个人/机构图片印章 @PostMapping("/image") @ApiOperation(value = "创建个人/机构图片印章", httpMethod = "POST", notes = "接口发布说明") public Result<Object> image(@CurrentUser UserBean userBean, @RequestBody DzhtAssoTpyz tpyz) { // 下载oss文件到服务器 String ossUrl = tpyz.getOssUrl(); String fileName = System.currentTimeMillis() + UUID.randomUUID().toString() + ossUrl.substring(ossUrl.lastIndexOf(".")); String filePath = null; try { filePath = FileHelper.downLoadFromUrl(ossUrl, fileName, DzhtController.savePath()); tpyz.setFilePath(filePath); } catch (IOException e1) { e1.printStackTrace(); } final String type = "BASE64"; tpyz.setType(type);// 数据类型 String accountId = tpyz.getAccountId();// 个人账户 String alias = tpyz.getAlias();// 印章别名 Integer height = tpyz.getHeight();// 高 Integer width = tpyz.getWidth();// 宽 Boolean transparentFlag = tpyz.getTransparentFlag();// 是否透明化 String data = null; JSONObject json = null; try { data = FileHelper.getBase64Str(filePath); tpyz.setData(data);// 图片BASE64数据 TokenHelper.getTokenData();// 获取鉴权 json = SealHelper.createPicSeal(accountId, alias, height, width, type, data, transparentFlag); } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } tpyz.setSealId(json.getString("sealId")); tpyz.setFileKey(json.getString("fileKey")); tpyz.setHeight(json.getInteger("height")); tpyz.setWidth(json.getInteger("width")); tpyz.setEmpNum(userBean.getEmpNum()); tpyz.setOrgCode(userBean.getOrgCode()); tpyz.setCreatedTime(new Date()); tpyz.insert(); return ResultUtil.data(json, "创建成功"); } // 查询签署区列表 @GetMapping("/qrySignArea") @ApiOperation(value = "查询签署区列表", httpMethod = "GET", notes = "接口发布说明") public Result<Object> qrySignArea(@RequestParam String flowId, @RequestParam(required = false) String accountId, @RequestParam(required = false) String signfieldIds) { JSONObject json = null; try { TokenHelper.getTokenData();// 获取鉴权 json = SignHelper.qrySignArea(flowId, accountId, signfieldIds); } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } return ResultUtil.data(json, "查询成功"); } // 删除签署区 @DeleteMapping("/delSignArea") @ApiOperation(value = "删除签署区", httpMethod = "DELETE", notes = "接口发布说明") public Result<Object> delSignArea(@RequestParam String flowId, @RequestParam String signfieldIds) { JSONObject json = null; try { TokenHelper.getTokenData();// 获取鉴权 json = SignHelper.delSignArea(flowId, signfieldIds); } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } return ResultUtil.data(json, "删除成功"); } // 开启签署流程 @PutMapping("/startSignFlow") @ApiOperation(value = "开启签署流程", httpMethod = "PUT", notes = "接口发布说明") public Result<Object> startSignFlow(@CurrentUser UserBean userBean, @RequestParam String flowId) { Integer orgCode = userBean.getOrgCode(); QyzxRemainingQuantity quantity = QyzxRemainingQuantity.builder().build().selectOne( new LambdaQueryWrapper<QyzxRemainingQuantity>().eq(QyzxRemainingQuantity::getOrgCode, orgCode) .eq(QyzxRemainingQuantity::getPmid, 2).gt(QyzxRemainingQuantity::getRemainder, 0)); Integer remainder = null; Date date = null; if (quantity != null) { remainder = quantity.getRemainder(); date = quantity.getExpireDate(); } if (quantity == null || remainder == null || remainder <= 0) { return ResultUtil.error("企业 " + orgCode + " :套餐余额不足,请充值购买后使用"); } if (date != null && date.getTime() <= new Date().getTime()) { return ResultUtil.error("企业 " + orgCode + " :电子合同套餐已过期"); } try { TokenHelper.getTokenData();// 获取鉴权 SignHelper.startSignFlow(flowId); } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } return ResultUtil.success(); } // 获取签署地址 @GetMapping("/qrySignUrl") @ApiOperation(value = "获取签署地址", httpMethod = "GET", notes = "接口发布说明") public Result<Object> qrySignUrl(@CurrentUser UserBean userBean, @RequestParam String flowId, @RequestParam(required = false) String organizeId, @RequestParam(required = false) String urlType) { JSONObject json = null; try { QueryWrapper<DzhtAssoGrzc> queryWrapper = new QueryWrapper<DzhtAssoGrzc>(); queryWrapper.eq("emp_num", userBean.getEmpNum()).select("account_id"); String accountId = DzhtAssoGrzc.builder().build().selectOne(queryWrapper).getAccountId(); TokenHelper.getTokenData();// 获取鉴权 json = SignHelper.qrySignUrl(flowId, accountId, organizeId, urlType); } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } if (json != null && json.getLong("code") != 0) return ResultUtil.error(json.getString("message")); return ResultUtil.data(json.getJSONObject("data"), "成功"); } // 流程签署人催签 @PutMapping("/rushsign") @ApiOperation(value = "流程签署人催签", httpMethod = "PUT", notes = "接口发布说明") public Result<Object> rushsign(@CurrentUser UserBean userBean, @RequestParam String flowId, @RequestParam(required = false) String noticeTypes, @RequestParam(required = false) String rushsignAccountId) { try { TokenHelper.getTokenData();// 获取鉴权 JSONObject json = SignHelper.rushSign(flowId, getID(userBean.getEmpNum()), noticeTypes, rushsignAccountId); if (json != null && json.getLong("code") != 0) { return ResultUtil.error(json.getString("message")); } } catch (DefineException e) { // return ResultUtil.error("当前用户非流程发起人, 不能执行催签操作"); e.printStackTrace(); } return ResultUtil.success(); } // 撤回签署流程 @PutMapping("/revoke") @ApiOperation(value = "撤回签署流程", httpMethod = "PUT", notes = "接口发布说明") public Result<Object> revoke(@CurrentUser UserBean userBean, @RequestParam String flowId, @RequestParam(required = false) String revokeReason) { String operatorId = null; try { TokenHelper.getTokenData();// 获取鉴权 DzhtAssoGrzc grzc = DzhtAssoGrzc.builder().build() .selectOne(new QueryWrapper<DzhtAssoGrzc>().eq("emp_num", userBean.getEmpNum())); if (grzc != null) { operatorId = grzc.getAccountId(); } JSONObject json = SignHelper.revokeSignFlow(flowId, revokeReason, operatorId); if (json != null && json.getLong("code") != 0) { return ResultUtil.error(json.getString("message")); } } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } return ResultUtil.success(); } // 签署流程归档 @PutMapping("/archiveSignFlow") @ApiOperation(value = "签署流程归档", httpMethod = "PUT", notes = "接口发布说明") public Result<Object> archiveSignFlow(@CurrentUser UserBean userBean, @RequestParam String flowId) { try { TokenHelper.getTokenData();// 获取鉴权 SignHelper.archiveSignFlow(flowId); } catch (DefineException e) { e.printStackTrace(); return ResultUtil.error(); } return ResultUtil.success(); } // 流程文档下载 @GetMapping("/downloadFlowDoc") @ApiOperation(value = "流程文档下载", httpMethod = "GET", notes = "接口发布说明") public Result<Object> downloadFlowDoc(@RequestParam String flowId) { JSONObject json = null; try { TokenHelper.getTokenData();// 获取鉴权 json = SignHelper.downloadFlowDoc(flowId); } catch (DefineException e) { e.printStackTrace(); } if (json != null && json.getLong("code") != 0) return ResultUtil.error(json.getString("message")); return ResultUtil.data(json.getJSONObject("data"), "成功"); } /** * 获取当前用户发起的签署流程 * * @param flowId * @return */ @GetMapping("/getFqlc") @ApiOperation(value = "当前用户发起的签署流程", httpMethod = "GET", notes = "接口发布说明") public Result<Object> getFqlc(@CurrentUser UserBean userBean, @RequestParam(required = false, defaultValue = "1") Integer currPage, @RequestParam(required = false, defaultValue = "10") Integer pageSize, @RequestParam(required = false) String query) { com.github.pagehelper.Page<Object> page = PageHelper.startPage(currPage, pageSize); List<DzhtAssoCjlc> cjlcs = DzhtAssoCjlc.builder().build() .selectList(new QueryWrapper<DzhtAssoCjlc>().like(query != null, "business_scene", query) .eq("org_code", userBean.getOrgCode()).eq("creater", userBean.getEmpNum()).select("flow_id")); List<Object> l = new ArrayList<Object>(); for (DzhtAssoCjlc lc : cjlcs) { l.add(qryFlow(lc.getFlowId())); } // com.github.pagehelper.Page<Object> page = PageHelper.startPage(currPage, pageSize); // List<DzhtAssoCjlc> cjlcs = DzhtAssoCjlc.builder().build() // .selectList(new QueryWrapper<DzhtAssoCjlc>().eq("org_code", userBean.getOrgCode()) // .eq("creater", userBean.getEmpNum()) // .select("initiator_authorized_account_id", "flow_id", "singer_account_id")); // List<Object> l = new ArrayList<Object>(); // // for (DzhtAssoCjlc cjlc : cjlcs) { // Map<String, Object> map = new HashMap<String, Object>(); // List<Object> singerInfo = new ArrayList<Object>(); // String initiatorAuthorizedAccountId = cjlc.getInitiatorAuthorizedAccountId(); // if (initiatorAuthorizedAccountId != null) { // Map<String, Object> maps = new HashMap<String, Object>(); // DzhtAssoQyzc qyzc = DzhtAssoQyzc.builder().build().selectOne( // new QueryWrapper<DzhtAssoQyzc>().eq("org_id", initiatorAuthorizedAccountId).select("name")); // if (qyzc != null) { // String name = qyzc.getName(); // maps.put("initiatorAuthorizedAccountId", initiatorAuthorizedAccountId); // maps.put("name", name); // singerInfo.add(maps); // } // } // String singerAccountIds = cjlc.getSingerAccountId(); // if (singerAccountIds != null) { // for (String accountId : singerAccountIds.split(",")) { // DzhtAssoGrzc grzc = DzhtAssoGrzc.builder().build().selectOne( // new QueryWrapper<DzhtAssoGrzc>().eq("account_id", accountId).select("emp_num", "name")); // // Map<String, Object> maps = new HashMap<String, Object>(); // maps.put("name", grzc.getName()); // maps.put("empNum", grzc.getEmpNum()); // singerInfo.add(maps); // } // } // map.put("flowInfo", qryFlow(cjlc.getFlowId())); // map.put("singerInfo", singerInfo); // l.add(map); // } return ResultUtil.pageData(l, page.getTotal(), "查询成功"); } /** * 获取当前用户收到的签署流程 * * @param currPage * * @param flowId * @return */ @GetMapping("/getSdlc") @ApiOperation(value = "当前用户收到的签署流程", httpMethod = "GET", notes = "接口发布说明") public Result<Object> getSdlc(@CurrentUser UserBean userBean, @RequestParam(required = false, defaultValue = "1") Integer currPage, @RequestParam(required = false, defaultValue = "10") Integer pageSize, @RequestParam(required = false) String query) { List<JSONObject> json = new ArrayList<JSONObject>(); com.github.pagehelper.Page<Object> page = PageHelper.startPage(currPage, pageSize); List<DzhtAssoSdgzq> list = DzhtAssoSdgzq.builder().build() .selectList(new QueryWrapper<DzhtAssoSdgzq>().select("distinct flow_id") .eq("signer_emp_num", userBean.getEmpNum()).like(query != null, "business_scene", query)); List<String> flowIdList = Lists.transform(list, newList -> newList.getFlowId()); for (String flowId : flowIdList) { json.add(qryFlow(flowId)); } return ResultUtil.pageData(json, page.getTotal(), "查询成功"); } /**********************************************************/ // 签署流程查询 private JSONObject qryFlow(@RequestParam String flowId) { JSONObject json = null; try { TokenHelper.getTokenData();// 获取鉴权 json = SignHelper.qrySignFlow(flowId); } catch (DefineException e) { e.printStackTrace(); } return json; } }