package net.chenlin.dp.modules.api.service; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.request.OapiProcessinstanceCreateRequest; import com.dingtalk.api.response.OapiProcessinstanceCreateResponse; import com.fasterxml.jackson.databind.ObjectMapper; import com.taobao.api.ApiException; import net.chenlin.dp.common.openapi4j.commons.TokenManager; import net.chenlin.dp.common.openapi4j.exception.OpenAPIException; import net.chenlin.dp.common.openapi4j.model.Record; import net.chenlin.dp.common.openapi4j.platform.TradeService; import net.chenlin.dp.common.openapi4j.service.BaseService; import net.chenlin.dp.common.openapi4j.service.CustomerService; import net.chenlin.dp.common.openapi4j.service.UserService; import net.chenlin.dp.common.openapi4j.util.HttpUtil; import net.chenlin.dp.common.openapi4j.util.PropUtil; import net.chenlin.dp.modules.api.controller.DingdingOpenInterface; import net.chenlin.dp.modules.api.vo.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.math.BigDecimal; import java.util.*; public class PayrequestService extends BaseService { final static Logger logger = LoggerFactory.getLogger(PayrequestService.class); private Properties prop = PropUtil.getProperties("/config.properties"); public PayrequestService() { this.access_token = TokenManager.getToKenId(); } public PayrequestService(String token) { this.access_token = token; } private DingdingOpenInterface dingdingOpenInterface=new DingdingOpenInterface(); // public static String getToaccount=""; /** * 获取单个付款申请单 * @param id * @param to_account * @return * @throws OpenAPIException */ public JSONObject get(String id) throws OpenAPIException { JSONObject record; try { Map paramMap = new HashMap(); paramMap.put("to_account", getToaccount); paramMap.put("id", id); String url = this.createURL("payrequest/get", paramMap); logger.info(url); record = JSONObject.parseObject(HttpUtil.get(url)); } catch (Exception e) { throw new OpenAPIException(e.getMessage(), e); } return record; } /** * 申请单 * @param paramMap * @return * @throws OpenAPIException */ public JSONObject batchGet(Map paramMap) throws OpenAPIException { JSONObject record; try { paramMap.put("to_account",getToaccount); String url = this.createURL("payrequestlist/batch_get", paramMap); logger.info(url); record = JSONObject.parseObject(HttpUtil.get(url)); } catch (Exception e) { // TODO Auto-generated catch block throw new OpenAPIException(e.getMessage(), e); } return record; } /** * 批量获取付款申请单 * @param map * @return * @throws OpenAPIException */ public List yonyouQueryPayrequest(Mapmap) throws OpenAPIException { map.put("to_account", getToaccount); // map.put("iverifystate", "0"); try { JSONObject jsonObject = batchGet(map); HashMap hashMap = JSONObject.parseObject(jsonObject.toString(), HashMap.class); Object errcode = hashMap.get("errcode"); if (errcode.equals("0")){ Object row_count = hashMap.get("row_count"); map.put("rows_per_page",row_count.toString()); JSONObject jsonObjects = batchGet(map); HashMap hashMaps = JSONObject.parseObject(jsonObjects.toString(), HashMap.class); if (hashMaps.get("errcode").equals("0")){ Object saleorderlist = hashMaps.get("payrequestlist"); List list= JSON.parseArray(JSON.toJSONString(saleorderlist), Payrequest.class); return list; }else { return null; } }else { return null; } }catch (Exception e){ throw new OpenAPIException(e.getMessage(), e); } } /** * 获取单张付款申请订单 * @param id * @return * @throws OpenAPIException */ public Payrequest yonyouGetPayrequest(String id) throws OpenAPIException { try { JSONObject jsonObject = get(id); HashMap hashMap = JSONObject.parseObject(jsonObject.toString(), HashMap.class); if (hashMap.get("errcode").equals("0")){ Object payrequest = hashMap.get("payrequest"); ObjectMapper objectMapper = new ObjectMapper(); Payrequest zfsp = objectMapper.convertValue(payrequest, Payrequest.class); return zfsp; }else { return null; } }catch (Exception e){ throw new OpenAPIException(e.getMessage(), e); } } /** * 付款申请单审核 * @param jsonboy * @param to_account * @return * @throws OpenAPIException */ public JSONObject shenghe() throws OpenAPIException { JSONObject record; try { Map paramMap = new HashMap(); String s = "{\n" + "\t\"payrequest\":{\n" + "\t\t\"voucher_code\":\"0000000001\",\n" + "\t\t\"user_id\":\"00001\",\n" + "\t\t\"opinion\":\"同意\",\n" + "\t\t\"agree\":\"1\"\n" + "\t}\n" + "}"; paramMap.put("to_account", getToaccount); String url = this.createURL("payrequest/audit", paramMap); logger.debug(url); String resultStr = HttpUtil.post(url, s); logger.debug(resultStr); JSONObject resultRecord = Record.parseObject(resultStr); Thread.sleep(3000); record = Record.parseObject(HttpUtil.get(resultRecord.getString("url"))); } catch (Exception e) { throw new OpenAPIException(e.getMessage(), e); } return record; } /** * 钉钉创建付款申请单审批实列 * @param processCode * @param agentid * @param userid 发起人 * @param deptid 部门 * @param map 数据 * @throws ApiException */ public void createPayrequest(String processCode, Long agentid, String userid, Long deptid, Payrequest so) throws ApiException { DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/processinstance/create"); OapiProcessinstanceCreateRequest req = new OapiProcessinstanceCreateRequest(); req.setAgentId(agentid); req.setProcessCode(processCode); req.setOriginatorUserId(userid); req.setDeptId(deptid); req.setCcPosition("START"); String useridshenh = prop.getProperty("shenhe_userid"); List processInstanceApproverVoList = new ArrayList(); OapiProcessinstanceCreateRequest.ProcessInstanceApproverVo processInstanceApproverVo = new OapiProcessinstanceCreateRequest.ProcessInstanceApproverVo(); processInstanceApproverVoList.add(processInstanceApproverVo); processInstanceApproverVo.setTaskActionType("NONE"); processInstanceApproverVo.setUserIds(Arrays.asList(useridshenh)); req.setApproversV2(processInstanceApproverVoList); if (so!=null){ List formComponentValueVoList = new ArrayList(); OapiProcessinstanceCreateRequest.FormComponentValueVo formComponentValueVo = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); formComponentValueVo.setName("日期"); formComponentValueVo.setValue(so.getDvouchdate()); formComponentValueVoList.add(formComponentValueVo); OapiProcessinstanceCreateRequest.FormComponentValueVo fc = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); fc.setName("部门"); if (so.getCdepname()!=null&&!so.getCdepname().equals("")){ fc.setValue(so.getCdepname()); }else { fc.setValue("暂无"); } formComponentValueVoList.add(fc); OapiProcessinstanceCreateRequest.FormComponentValueVo fc2 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); fc2.setName("供应商"); if (so.getCvenname()!=null&&!so.getCvenname().equals("")){ fc2.setValue(so.getCvenname()); }else { fc2.setValue("暂无"); } formComponentValueVoList.add(fc2); OapiProcessinstanceCreateRequest.FormComponentValueVo fc3 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); fc3.setName("结算方式"); if (so.getCssname()!=null&&!so.getCssname().equals("0E-10")){ fc3.setValue(so.getCssname()); }else { fc3.setValue("暂无"); } formComponentValueVoList.add(fc3); OapiProcessinstanceCreateRequest.FormComponentValueVo fc4 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); fc4.setName("申请人"); if (so.getCpersonname()!=null&&!so.getCpersonname().equals("")){ fc4.setValue(so.getCpersonname()); }else { fc4.setValue("暂无"); } formComponentValueVoList.add(fc4); OapiProcessinstanceCreateRequest.FormComponentValueVo fc6 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); fc6.setName("付款日期"); if (so.getDgatheringdate()!=null&&!so.getDgatheringdate().equals("")){ fc6.setValue(so.getDgatheringdate()); }else { fc6.setValue(so.getDvouchdate()); } formComponentValueVoList.add(fc6); List>ls=new ArrayList<>(); BigDecimal a =new BigDecimal("0"); for (PayrequestMin s:so.getEntry()){ Listmingxilist=new ArrayList<>(); OapiProcessinstanceCreateRequest.FormComponentValueVo mingxi2 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); mingxi2.setName("来源单据号"); mingxi2.setValue(so.getCvouchid()); mingxilist.add(mingxi2); OapiProcessinstanceCreateRequest.FormComponentValueVo fc7 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); fc7.setName("存货名称"); if (s.getCinvname()!=null&&!s.getCinvname().equals("")){ fc7.setValue(s.getCinvname()); }else { fc7.setValue("暂无"); } mingxilist.add(fc7); OapiProcessinstanceCreateRequest.FormComponentValueVo fc8 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); fc8.setName("存货数量"); if (s.getIapplyamt_s()!=null&&!s.getIapplyamt_s().equals("0E-10")){ fc8.setValue(s.getIapplyamt_s()); }else { fc8.setValue("0"); } mingxilist.add(fc8); OapiProcessinstanceCreateRequest.FormComponentValueVo fc9 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); fc9.setName("单价"); if (s.getInattaxprice()!=null&&!s.getInattaxprice().equals("0E-10")){ fc9.setValue(s.getInattaxprice()); }else { fc9.setValue("0"); } mingxilist.add(fc9); OapiProcessinstanceCreateRequest.FormComponentValueVo fc10= new OapiProcessinstanceCreateRequest.FormComponentValueVo(); fc10.setName("金额"); if (s.getIapplyamt()!=null&&!s.getIapplyamt().equals("0E-10")){ fc10.setValue(s.getIapplyamt()); BigDecimal b=new BigDecimal(s.getIapplyamt()); BigDecimal add = a.add(b); a=add; }else { fc10.setValue("0"); } mingxilist.add(fc10); ls.add(mingxilist); } OapiProcessinstanceCreateRequest.FormComponentValueVo fc5 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); fc5.setName("申请金额(元)"); fc5.setValue(a.toString()); // fc5.setValue(so.getPersonname()); formComponentValueVoList.add(fc5); OapiProcessinstanceCreateRequest.FormComponentValueVo obj7 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); obj7.setName("表格"); obj7.setValue(JSON.toJSONString(ls)); formComponentValueVoList.add(obj7); req.setFormComponentValues(formComponentValueVoList); dingdingOpenInterface.getToken(); OapiProcessinstanceCreateResponse rsp = client.execute(req, dingdingOpenInterface.gettoken); System.out.println(rsp.getBody()); } } //获取to_account public void getToaccount(){ Properties prop = PropUtil.getProperties("/config.properties"); getToaccount= prop.getProperty("to_account"); } public static void main(String[] args) throws OpenAPIException { PayrequestService payrequestService=new PayrequestService(); payrequestService.getToaccount(); SaleOrderRest saleOrderRest=new SaleOrderRest(); UserService userService=new UserService(); JSONObject login = userService.login("demo", "", PayrequestService.getToaccount); saleOrderRest.setUser_id("demo"); saleOrderRest.setVoucher_code("0000000001"); saleOrderRest.setAgree("1"); payrequestService.shenghe(); } }