package com.java110.oa.bmo.oaWorkflowForm.impl; import com.alibaba.fastjson.JSONObject; import com.java110.core.annotation.Java110Transactional; import com.java110.core.factory.GenerateCodeFactory; import com.java110.dto.oaWorkflow.OaWorkflowDto; import com.java110.dto.oaWorkflowData.OaWorkflowDataDto; import com.java110.dto.oaWorkflowForm.OaWorkflowFormDto; import com.java110.dto.user.UserDto; import com.java110.dto.workflowDataFile.WorkflowDataFileDto; import com.java110.entity.audit.AuditUser; import com.java110.intf.common.IOaWorkflowActivitiInnerServiceSMO; import com.java110.intf.oa.IOaWorkflowDataInnerServiceSMO; import com.java110.intf.oa.IOaWorkflowFormInnerServiceSMO; import com.java110.intf.oa.IOaWorkflowInnerServiceSMO; import com.java110.intf.oa.IWorkflowDataFileV1InnerServiceSMO; import com.java110.intf.user.IUserInnerServiceSMO; import com.java110.oa.bmo.oaWorkflowForm.IGetOaWorkflowFormBMO; import com.java110.po.workflowDataFile.WorkflowDataFilePo; import com.java110.utils.cache.MappingCache; import com.java110.utils.constant.MappingConstant; import com.java110.utils.exception.CmdException; import com.java110.utils.util.Assert; import com.java110.utils.util.BeanConvertUtil; import com.java110.utils.util.DateUtil; import com.java110.utils.util.StringUtil; import com.java110.vo.ResultVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service("getOaWorkflowFormBMOImpl") public class GetOaWorkflowFormBMOImpl implements IGetOaWorkflowFormBMO { @Autowired private IOaWorkflowFormInnerServiceSMO oaWorkflowFormInnerServiceSMOImpl; @Autowired private IOaWorkflowInnerServiceSMO oaWorkflowInnerServiceSMOImpl; @Autowired private IUserInnerServiceSMO userInnerServiceSMOImpl; @Autowired private IOaWorkflowActivitiInnerServiceSMO oaWorkflowUserInnerServiceSMOImpl; @Autowired private IOaWorkflowDataInnerServiceSMO oaWorkflowDataInnerServiceSMOImpl; @Autowired private IWorkflowDataFileV1InnerServiceSMO workflowDataFileV1InnerServiceSMOImpl; /** * @param oaWorkflowFormDto * @return 订单服务能够接受的报文 */ public ResponseEntity get(OaWorkflowFormDto oaWorkflowFormDto) { int count = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowFormsCount(oaWorkflowFormDto); List oaWorkflowFormDtos = null; if (count > 0) { oaWorkflowFormDtos = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowForms(oaWorkflowFormDto); } else { oaWorkflowFormDtos = new ArrayList<>(); } ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) oaWorkflowFormDto.getRow()), count, oaWorkflowFormDtos); ResponseEntity responseEntity = new ResponseEntity(resultVo.toString(), HttpStatus.OK); return responseEntity; } /** * {"schemaVersion":1,"exporter":{"name":"form-js","version":"0.1.0"}, * "components":[{"text":"# Text","type":"text"},{"key":"textfield2","label":"文本框","type":"textfield"},{"key":"number2","label":"Number","type":"number"}, * {"key":"checkbox2","label":"Checkbox","type":"checkbox"}, * {"key":"radio2","label":"Radio","type":"radio","values":[{"label":"Value","value":"value"}]}, * {"key":"select2","label":"Select","type":"select","values":[{"label":"Value","value":"value"}]}, * {"text":"# Text","type":"text"},{"key":"textarea1","label":"多行文本框","type":"textarea"}, * {"key":"textdate1","label":"日期","type":"textdate"}, * {"key":"textdatetime1","label":"时间","type":"textdatetime"}, * {"action":"submit","key":"button1","label":"Button","type":"button"}],"type":"default"} * * @param paramIn * @return */ @Override public ResponseEntity queryOaWorkflowFormData(Map paramIn) { OaWorkflowFormDto oaWorkflowFormDto = new OaWorkflowFormDto(); oaWorkflowFormDto.setFlowId(paramIn.get("flowId").toString()); oaWorkflowFormDto.setStoreId(paramIn.get("storeId").toString()); oaWorkflowFormDto.setRow(1); oaWorkflowFormDto.setPage(1); List oaWorkflowFormDtos = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowForms(oaWorkflowFormDto); Assert.listOnlyOne(oaWorkflowFormDtos, "未包含流程表单,请先设置表单"); paramIn.put("tableName", oaWorkflowFormDtos.get(0).getTableName()); int count = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowFormDataCount(paramIn); List datas = null; if (count > 0) { datas = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowFormDatas(paramIn); } else { datas = new ArrayList<>(); } //查询file queryFilesFromData(datas); ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (int) paramIn.get("row")), count, datas); ResponseEntity responseEntity = new ResponseEntity(resultVo.toString(), HttpStatus.OK); return responseEntity; } private void queryFilesFromData(List datas) { if (datas.size() != 1) { return; } WorkflowDataFileDto workflowDataFileDto = new WorkflowDataFileDto(); workflowDataFileDto.setId(datas.get(0).get("id").toString()); workflowDataFileDto.setStoreId(datas.get(0).get("store_id").toString()); List workflowDataFileDtos = workflowDataFileV1InnerServiceSMOImpl.queryWorkflowDataFiles(workflowDataFileDto); if (workflowDataFileDtos == null || workflowDataFileDtos.size() < 1) { return; } String imgUrl = MappingCache.getValue(MappingConstant.FILE_DOMAIN,"IMG_PATH"); for(WorkflowDataFileDto tmpWorkflowDataFileDto: workflowDataFileDtos){ tmpWorkflowDataFileDto.setRealFileName(imgUrl + tmpWorkflowDataFileDto.getRealFileName()); } datas.get(0).put("files",workflowDataFileDtos); } /** * 保存表单数据 * * @param reqJson * @return */ @Override public ResponseEntity saveOaWorkflowFormData(JSONObject reqJson) { OaWorkflowFormDto oaWorkflowFormDto = new OaWorkflowFormDto(); oaWorkflowFormDto.setFlowId(reqJson.get("flowId").toString()); oaWorkflowFormDto.setStoreId(reqJson.get("storeId").toString()); oaWorkflowFormDto.setRow(1); oaWorkflowFormDto.setPage(1); List oaWorkflowFormDtos = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowForms(oaWorkflowFormDto); Assert.listOnlyOne(oaWorkflowFormDtos, "未包含流程表单,请先设置表单"); // OaWorkflowDto oaWorkflowDto = new OaWorkflowDto(); oaWorkflowDto.setStoreId(reqJson.getString("storeId")); oaWorkflowDto.setFlowId(reqJson.getString("flowId")); List oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto); Assert.listOnlyOne(oaWorkflowDtos, "流程不存在"); if (!OaWorkflowDto.STATE_COMPLAINT.equals(oaWorkflowDtos.get(0).getState())) { throw new IllegalArgumentException(oaWorkflowDtos.get(0).getFlowName() + "流程未部署"); } if (StringUtil.isEmpty(oaWorkflowDtos.get(0).getProcessDefinitionKey())) { throw new IllegalArgumentException(oaWorkflowDtos.get(0).getFlowName() + "流程未部署"); } //查询用户名称 UserDto userDto = new UserDto(); userDto.setUserId(reqJson.getString("userId")); List userDtos = userInnerServiceSMOImpl.getUsers(userDto); Assert.listOnlyOne(userDtos, "用户不存在"); //保存表单数据 reqJson.put("id", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_flowId)); reqJson.put("state", "1001"); reqJson.put("createUserId", reqJson.getString("userId")); reqJson.put("createUserName", userDtos.get(0).getUserName()); reqJson.put("tableName", oaWorkflowFormDtos.get(0).getTableName()); int flag = oaWorkflowFormInnerServiceSMOImpl.saveOaWorkflowFormData(reqJson); if (flag < 1) { throw new IllegalArgumentException("保存失败"); } //判断是否有附件 saveOaWorkflowFile(reqJson); reqJson.put("processDefinitionKey", oaWorkflowDtos.get(0).getProcessDefinitionKey()); oaWorkflowUserInnerServiceSMOImpl.startProcess(reqJson); return ResultVo.success(); } private void saveOaWorkflowFile(JSONObject reqJson) { if (!reqJson.containsKey("fileName")) { return; } String fileName = reqJson.getString("fileName"); if (StringUtil.isEmpty(fileName)) { return; } WorkflowDataFilePo workflowDataFilePo = new WorkflowDataFilePo(); workflowDataFilePo.setCreateUserId(reqJson.getString("userId")); workflowDataFilePo.setCreateUserName(reqJson.getString("createUserName")); workflowDataFilePo.setFileId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_file_id)); workflowDataFilePo.setFileName(reqJson.getString("fileName")); workflowDataFilePo.setId(reqJson.getString("id")); workflowDataFilePo.setRealFileName(reqJson.getString("realFileName")); workflowDataFilePo.setStoreId(reqJson.getString("storeId")); int flag = workflowDataFileV1InnerServiceSMOImpl.saveWorkflowDataFile(workflowDataFilePo); if (flag < 1) { throw new CmdException("保存附件失败"); } } /** * 查询工作流待办 * * @param paramIn * @return */ @Override public ResponseEntity queryOaWorkflowUserTaskFormData(JSONObject paramIn) { OaWorkflowDto oaWorkflowDto = new OaWorkflowDto(); oaWorkflowDto.setStoreId(paramIn.getString("storeId")); oaWorkflowDto.setFlowId(paramIn.getString("flowId")); List oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto); Assert.listOnlyOne(oaWorkflowDtos, "流程不存在"); OaWorkflowFormDto oaWorkflowFormDto = new OaWorkflowFormDto(); oaWorkflowFormDto.setFlowId(paramIn.get("flowId").toString()); oaWorkflowFormDto.setStoreId(paramIn.get("storeId").toString()); oaWorkflowFormDto.setRow(1); oaWorkflowFormDto.setPage(1); List oaWorkflowFormDtos = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowForms(oaWorkflowFormDto); Assert.listOnlyOne(oaWorkflowFormDtos, "未包含流程表单,请先设置表单"); AuditUser auditUser = new AuditUser(); auditUser.setProcessDefinitionKey(oaWorkflowDtos.get(0).getProcessDefinitionKey()); auditUser.setFlowId(paramIn.getString("flowId")); auditUser.setUserId(paramIn.getString("userId")); auditUser.setStoreId(paramIn.getString("storeId")); auditUser.setPage(paramIn.getInteger("page")); auditUser.setRow(paramIn.getInteger("row")); long count = oaWorkflowUserInnerServiceSMOImpl.getUserTaskCount(auditUser); List datas = null; if (count > 0) { datas = oaWorkflowUserInnerServiceSMOImpl.getUserTasks(auditUser); //刷新 表单数据 freshFormData(datas, paramIn, oaWorkflowFormDtos.get(0)); } else { datas = new ArrayList<>(); } ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) paramIn.getInteger("row")), count, datas); ResponseEntity responseEntity = new ResponseEntity(resultVo.toString(), HttpStatus.OK); return responseEntity; } /** * 查询工作流待办 * * @param paramIn * @return */ @Override public ResponseEntity queryOaWorkflowUserHisTaskFormData(JSONObject paramIn) { OaWorkflowDto oaWorkflowDto = new OaWorkflowDto(); oaWorkflowDto.setStoreId(paramIn.getString("storeId")); oaWorkflowDto.setFlowId(paramIn.getString("flowId")); List oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto); Assert.listOnlyOne(oaWorkflowDtos, "流程不存在"); OaWorkflowFormDto oaWorkflowFormDto = new OaWorkflowFormDto(); oaWorkflowFormDto.setFlowId(paramIn.get("flowId").toString()); oaWorkflowFormDto.setStoreId(paramIn.get("storeId").toString()); oaWorkflowFormDto.setRow(1); oaWorkflowFormDto.setPage(1); List oaWorkflowFormDtos = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowForms(oaWorkflowFormDto); Assert.listOnlyOne(oaWorkflowFormDtos, "未包含流程表单,请先设置表单"); OaWorkflowDataDto oaWorkflowDataDto = new OaWorkflowDataDto(); oaWorkflowDataDto.setFlowId(paramIn.getString("flowId")); oaWorkflowDataDto.setStaffId(paramIn.getString("userId")); oaWorkflowDataDto.setStoreId(paramIn.getString("storeId")); oaWorkflowDataDto.setPage(paramIn.getInteger("page")); oaWorkflowDataDto.setRow(paramIn.getInteger("row")); oaWorkflowDataDto.setHis("Y"); long count = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatasCount(oaWorkflowDataDto); List datas = new ArrayList<>(); if (count > 0) { List oaWorkflowDataDtos = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatas(oaWorkflowDataDto); for (OaWorkflowDataDto oaWorkflowDataDto1 : oaWorkflowDataDtos) { datas.add(BeanConvertUtil.beanCovertJson(oaWorkflowDataDto1)); } //刷新 表单数据 freshFormData(datas, paramIn, oaWorkflowFormDtos.get(0)); } ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) paramIn.getInteger("row")), count, datas); ResponseEntity responseEntity = new ResponseEntity(resultVo.toString(), HttpStatus.OK); return responseEntity; } @Override @Java110Transactional public ResponseEntity auditOaWorkflow(JSONObject reqJson) { //查询流程是否存在 OaWorkflowDto oaWorkflowDto = new OaWorkflowDto(); oaWorkflowDto.setStoreId(reqJson.getString("storeId")); oaWorkflowDto.setFlowId(reqJson.getString("flowId")); List oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto); Assert.listOnlyOne(oaWorkflowDtos, "流程不存在"); //流程表单是否存在 OaWorkflowFormDto oaWorkflowFormDto = new OaWorkflowFormDto(); oaWorkflowFormDto.setFlowId(reqJson.get("flowId").toString()); oaWorkflowFormDto.setStoreId(reqJson.get("storeId").toString()); oaWorkflowFormDto.setRow(1); oaWorkflowFormDto.setPage(1); List oaWorkflowFormDtos = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowForms(oaWorkflowFormDto); Assert.listOnlyOne(oaWorkflowFormDtos, "未包含流程表单,请先设置表单"); //流程数据是否存在 Map paramMap = new HashMap(); paramMap.put("storeId", reqJson.getString("storeId")); paramMap.put("id", reqJson.getString("id")); paramMap.put("tableName", oaWorkflowFormDtos.get(0).getTableName()); paramMap.put("page", 1); paramMap.put("row", 1); List formDatas = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowFormDatas(paramMap); Assert.listOnlyOne(formDatas, "工单数据不存在"); reqJson.put("startUserId", formDatas.get(0).get("create_user_id")); //业务办理 if ("1100".equals(reqJson.getString("auditCode")) || "1500".equals(reqJson.getString("auditCode"))) { //办理操作 reqJson.put("nextUserId", reqJson.getString("staffId")); boolean isLastTask = oaWorkflowUserInnerServiceSMOImpl.completeTask(reqJson); if (isLastTask) { reqJson.put("state", "1005"); //工单结束 } else { reqJson.put("state", "1002"); //工单审核 } reqJson.put("tableName", oaWorkflowFormDtos.get(0).getTableName()); oaWorkflowFormInnerServiceSMOImpl.updateOaWorkflowFormData(reqJson); //完成当前流程 插入下一处理人 } else if ("1300".equals(reqJson.getString("auditCode"))) { //转单操作 reqJson.put("nextUserId", reqJson.getString("staffId")); oaWorkflowUserInnerServiceSMOImpl.changeTaskToOtherUser(reqJson); reqJson.put("state", "1004"); //工单转单 reqJson.put("tableName", oaWorkflowFormDtos.get(0).getTableName()); oaWorkflowFormInnerServiceSMOImpl.updateOaWorkflowFormData(reqJson); } else if ("1200".equals(reqJson.getString("auditCode")) || "1400".equals(reqJson.getString("auditCode")) ) { //退回操作 oaWorkflowUserInnerServiceSMOImpl.goBackTask(reqJson); reqJson.put("state", "1003"); //工单退单 reqJson.put("tableName", oaWorkflowFormDtos.get(0).getTableName()); oaWorkflowFormInnerServiceSMOImpl.updateOaWorkflowFormData(reqJson); } else { throw new IllegalArgumentException("不支持的类型"); } return ResultVo.success(); } @Override public ResponseEntity getNextTask(JSONObject reqJson) { //流程表单是否存在 OaWorkflowFormDto oaWorkflowFormDto = new OaWorkflowFormDto(); oaWorkflowFormDto.setFlowId(reqJson.get("flowId").toString()); oaWorkflowFormDto.setStoreId(reqJson.get("storeId").toString()); oaWorkflowFormDto.setRow(1); oaWorkflowFormDto.setPage(1); List oaWorkflowFormDtos = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowForms(oaWorkflowFormDto); Assert.listOnlyOne(oaWorkflowFormDtos, "未包含流程表单,请先设置表单"); Map paramMap = new HashMap(); paramMap.put("storeId", reqJson.getString("storeId")); paramMap.put("id", reqJson.getString("id")); paramMap.put("tableName", oaWorkflowFormDtos.get(0).getTableName()); paramMap.put("page", 1); paramMap.put("row", 1); List formDatas = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowFormDatas(paramMap); Assert.listOnlyOne(formDatas, "表单数据不存在"); reqJson.put("startUserId", formDatas.get(0).get("create_user_id")); List tasks = oaWorkflowUserInnerServiceSMOImpl.nextAllNodeTaskList(reqJson); return ResultVo.createResponseEntity(tasks); } @Override public ResponseEntity queryOaWorkflowUser(JSONObject paramIn) { OaWorkflowDto oaWorkflowDto = new OaWorkflowDto(); oaWorkflowDto.setStoreId(paramIn.getString("storeId")); oaWorkflowDto.setFlowId(paramIn.getString("flowId")); List oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto); Assert.listOnlyOne(oaWorkflowDtos, "流程不存在"); OaWorkflowFormDto oaWorkflowFormDto = new OaWorkflowFormDto(); oaWorkflowFormDto.setFlowId(paramIn.get("flowId").toString()); oaWorkflowFormDto.setStoreId(paramIn.get("storeId").toString()); oaWorkflowFormDto.setRow(1); oaWorkflowFormDto.setPage(1); List oaWorkflowFormDtos = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowForms(oaWorkflowFormDto); //Assert.listOnlyOne(oaWorkflowFormDtos, "未包含流程表单,请先设置表单"); OaWorkflowFormDto tmpOaWorkflowFormDto = (oaWorkflowFormDtos == null || oaWorkflowFormDtos.size() < 1)?null:oaWorkflowFormDtos.get(0); OaWorkflowDataDto oaWorkflowDataDto = new OaWorkflowDataDto(); oaWorkflowDataDto.setFlowId(paramIn.getString("flowId")); oaWorkflowDataDto.setBusinessKey(paramIn.getString("id")); oaWorkflowDataDto.setStoreId(paramIn.getString("storeId")); oaWorkflowDataDto.setPage(paramIn.getInteger("page")); oaWorkflowDataDto.setRow(paramIn.getInteger("row")); long count = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatasCount(oaWorkflowDataDto); List datas = new ArrayList<>(); if (count > 0) { List oaWorkflowDataDtos = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatas(oaWorkflowDataDto); for (OaWorkflowDataDto oaWorkflowDataDto1 : oaWorkflowDataDtos) { datas.add(BeanConvertUtil.beanCovertJson(oaWorkflowDataDto1)); } //刷新 表单数据 freshFormData(datas, paramIn, tmpOaWorkflowFormDto); } ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) paramIn.getInteger("row")), count, datas); ResponseEntity responseEntity = new ResponseEntity(resultVo.toString(), HttpStatus.OK); return responseEntity; } /** * 刷入表单数据 * * @param datas */ private void freshFormData(List datas, JSONObject paramIn, OaWorkflowFormDto oaWorkflowFormDto) { List userIds = new ArrayList<>(); for (JSONObject data : datas) { if (!StringUtil.isEmpty(data.getString("staffId"))) { userIds.add(data.getString("staffId")); } } //输入formData refreshFormData(oaWorkflowFormDto,datas,paramIn); long duration = 0L; for (JSONObject data : datas) { if (data.containsKey("startTime") && data.containsKey("endTime")) { try { if (data.getString("endTime") == null) { duration = DateUtil.getCurrentDate().getTime() - DateUtil.getDateFromString(data.getString("startTime"), DateUtil.DATE_FORMATE_STRING_A).getTime(); } else { duration = DateUtil.getDateFromString(data.getString("endTime"), DateUtil.DATE_FORMATE_STRING_A).getTime() - DateUtil.getDateFromString(data.getString("startTime"), DateUtil.DATE_FORMATE_STRING_A).getTime(); } } catch (Exception e) { duration = 0; } data.put("duration", getCostTime(duration)); } } if (userIds.size() < 1) { return; } //刷入员工信息 UserDto userDto = new UserDto(); userDto.setUserIds(userIds.toArray(new String[userIds.size()])); List userDtos = userInnerServiceSMOImpl.getStaffs(userDto); for (JSONObject data : datas) { for (UserDto userDto1 : userDtos) { if (data.getString("staffId").equals(userDto1.getUserId())) { data.put("orgName", userDto1.getOrgName()); data.put("staffName", userDto1.getUserName()); } } } } private void refreshFormData(OaWorkflowFormDto oaWorkflowFormDto, List datas, JSONObject paramIn) { if(oaWorkflowFormDto == null){ return ; } List ids = new ArrayList<>(); for (JSONObject data : datas) { ids.add(data.getString("id")); } if (ids.size() < 1) { return; } Map paramMap = new HashMap(); paramMap.put("storeId", paramIn.getString("storeId")); paramMap.put("ids", ids.toArray(new String[ids.size()])); paramMap.put("tableName", oaWorkflowFormDto.getTableName()); paramMap.put("page", 1); paramMap.put("row", ids.size()); List formDatas = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowFormDatas(paramMap); for (JSONObject data : datas) { for (Map form : formDatas) { if (data.getString("id").equals(form.get("id"))) { data.putAll(form); } } } } public String getCostTime(Long time) { if (time == null) { return "00:00"; } long hours = time / (1000 * 60 * 60); long minutes = (time - hours * (1000 * 60 * 60)) / (1000 * 60); String diffTime = ""; if (minutes < 10) { diffTime = hours + ":0" + minutes; } else { diffTime = hours + ":" + minutes; } return diffTime; } }