diff --git a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxMineController.java b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxMineController.java index d848963..0fef845 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxMineController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxMineController.java @@ -9,6 +9,7 @@ import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; import com.budwk.app.flow.engine.FlowEngine; import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.democratic.suggestionBox.models.SuggestionBox; import com.budwk.app.zhgh.democratic.suggestionBox.service.SuggestionBoxService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -111,5 +112,16 @@ public class SuggestionBoxMineController { return Result.success(); } + @At + @SaCheckPermission(value = {"suggestionBox.mine", "h5.suggestionBox.mine"}, mode = SaMode.OR) + @ApiOperation("保存评价") + @SLog(tag = "建言献策-", msg = "保存评价") + public Result evaluate(String id ,String evaluate) { + SuggestionBox box = dao.fetch(SuggestionBox.class, id); + box.setEvaluate(evaluate); + dao.update(box); + return Result.success(); + } + } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxQueryController.java b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxQueryController.java index 1213feb..e0c7f15 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxQueryController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxQueryController.java @@ -4,9 +4,11 @@ import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaMode; import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.zhgh.democratic.suggestionBox.models.SuggestionBox; import com.budwk.app.zhgh.democratic.suggestionBox.service.SuggestionBoxService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -23,6 +25,8 @@ import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; +import java.util.Date; + @IocBean @At("/platform/suggestionBox/query") @Ok("json:full") @@ -117,5 +121,16 @@ public class SuggestionBoxQueryController { return Result.success(); } + @At + @SaCheckPermission(value = {"suggestionBox.query", "h5.suggestionBox.query"}, mode = SaMode.OR) + @ApiOperation("保存答复") + @SLog(tag = "建言献策-", msg = "保存答复") + public Result reply(String id ,String reply) { + SuggestionBox box = dao.fetch(SuggestionBox.class, id); + box.setReply(reply); + dao.update(box); + return Result.success(); + } + } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/models/SuggestionBox.java b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/models/SuggestionBox.java index 59a07f5..52cb884 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/models/SuggestionBox.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/models/SuggestionBox.java @@ -73,6 +73,16 @@ public class SuggestionBox extends BaseModel { @ColDefine(type = ColType.TEXT) private String content; + @Column + @Comment("答复") + @ColDefine(type = ColType.TEXT) + private String reply; + + @Column + @Comment("评价") + @ColDefine(type = ColType.TEXT) + private String evaluate; + @Column @Comment("附件") @ColDefine(type = ColType.MYSQL_JSON) diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/condolence/controller/CondolenceMineController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/condolence/controller/CondolenceMineController.java index 8f8506c..6dd7411 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/condolence/controller/CondolenceMineController.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/condolence/controller/CondolenceMineController.java @@ -3,6 +3,7 @@ package com.budwk.app.zhgh.staffbenefit.condolence.controller; import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaMode; +import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Dict; import cn.hutool.core.util.StrUtil; @@ -51,6 +52,7 @@ import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDateTime; @@ -270,5 +272,123 @@ public class CondolenceMineController { } + } + @At + @ApiOperation("导出单个慰问报销凭证") + @SaCheckPermission("condolence") + public void doExport(@Valid String id, HttpServletResponse response) throws ParseException { + HashMap docData = new HashMap<>(); + + Sql sql = Sqls.create(""" + SELECT + info.*, + ins.id AS instanceId, + ct.name AS typeName + FROM + `condolence` info + LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id + LEFT JOIN condolence_type ct ON ct.id = info.type + WHERE + info.id = @id + """).setParam("id", id); + sql.setCallback(Sqls.callback.map()); + dao.execute(sql); + NutMap info = (NutMap) sql.getResult(); + + // 根据慰问类型选择不同的模板和文件名 + String type = info.getString("type"); + String templateName; + String fileName; + + templateName = "condolence_reimbursement"; + fileName = "河北地质大学慰问报销凭证" + ".docx"; + + + + // 添加日期格式化处理 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); + SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + if (info.get("createTime") != null) { + if (info.get("createTime") instanceof String) { + String createTimeStr = (String) info.get("createTime"); + Date date = inputFormat.parse(createTimeStr); + info.put("createTime", sdf.format(date)); + + } + } + if (StrUtil.isNotBlank(info.getString("signature"))) { + info.put("signature", sysOfficeTemplateUtil.createPictureRenderData(info.getString("signature"))); + } + + info.put("money_big", Convert.digitToChinese(info.getDouble("money"))); + info.put("typeName", info.getString("typeName")); + double price = info.getDouble("money"); + int money_int = (int) price; + BigDecimal b1 = new BigDecimal(Double.toString(price)); + BigDecimal b2 = new BigDecimal(Double.toString(money_int)); + double moneyAngle = b1.subtract(b2).doubleValue(); + BigDecimal b3 = new BigDecimal(moneyAngle); + + info.put("one", money_int >= 1000000 ? (money_int / 1000000) % 10 : null); + info.put("two", money_int >= 100000 ? (money_int / 100000) % 10 : null); + info.put("three", money_int >= 10000 ? (money_int / 10000) % 10 : null); + info.put("four", money_int >= 1000 ? (money_int / 1000) % 10 : null); + info.put("five", money_int >= 100 ? (money_int / 100) % 10 : null); + info.put("six", money_int >= 10 ? (money_int / 10) % 10 : null); + info.put("seven", money_int >= 10 ? money_int % 10 : null); + info.put("eight", (int) (moneyAngle * 10)); + info.put("nine", (int) (moneyAngle * 100 % 10)); + + docData.put("schoolName", Globals.AppName); + docData.put("info", info); + + + List doneTaskVos = new ArrayList<>(); + List doneTaskList = flowEngine.processTaskService().getDoneTaskList(info.getLong("instanceId"), null); + for (ProcessTask doneTask : doneTaskList) { + ProcessTaskVO taskVO = flowEngine.processTaskService().findById(doneTask.getId()); + doneTaskVos.add(taskVO); + } + + // 各审批节点处理 + doneTaskVos.stream().filter(task -> "分工会审核".equals(task.getDisplayName())) + .max(Comparator.comparing(ProcessTaskVO::getCreatedAt)) + .ifPresent(v -> { + Dict taskFormData = v.getTaskFormData(); + HashMap approval = new HashMap<>(); + + approval.put("date", DateUtil.format(v.getFinishTime(), "yyyy年MM月dd日")); + approval.put("user", taskFormData.getStr("tf_userName")); + if (StrUtil.isNotBlank(taskFormData.getStr("tf_userSign"))) { + approval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(taskFormData.getStr("tf_userSign"))); + } + approval.put("opinion", taskFormData.getStr("tf_opinion")); + docData.put("fgh", approval); + }); + + doneTaskVos.stream().filter(task -> "校工会审核".equals(task.getDisplayName())) + .max(Comparator.comparing(ProcessTaskVO::getCreatedAt)) + .ifPresent(v -> { + Dict taskFormData = v.getTaskFormData(); + HashMap approval = new HashMap<>(); + + approval.put("date", DateUtil.format(v.getFinishTime(), "yyyy年MM月dd日")); + approval.put("user", taskFormData.getStr("tf_userName")); + if (StrUtil.isNotBlank(taskFormData.getStr("tf_userSign"))) { + approval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(taskFormData.getStr("tf_userSign"))); + } + approval.put("opinion", taskFormData.getStr("tf_opinion")); + docData.put("xgh", approval); + }); + + try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) { + XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate(templateName)).render(docData).writeAndClose(byteArrayOutputStream); + CommonDownloadUtil.download(fileName, byteArrayOutputStream.toByteArray(), response); + } catch (IOException e) { + log.error("河北地质大学慰问报销凭证导出失败,id:{},错误信息:{}", id, e.getMessage()); + } + + } } diff --git a/src/main/resources/views/platform/zhgh/democratic/suggestionBox/info.js b/src/main/resources/views/platform/zhgh/democratic/suggestionBox/info.js index c7a29c6..8acfab7 100644 --- a/src/main/resources/views/platform/zhgh/democratic/suggestionBox/info.js +++ b/src/main/resources/views/platform/zhgh/democratic/suggestionBox/info.js @@ -12,6 +12,8 @@ const SUGGESTION_INFO = { {{viewData.unionName}} {{viewData.title}} {{viewData.content}} + {{viewData.reply}} + {{viewData.evaluate}} @@ -65,6 +68,30 @@ layout("/layouts/platform.html"){ return {} }, methods: { + evaluate(row) { + this.$prompt('请输入评价内容', '评价', { + confirmButtonText: '保存', + cancelButtonText: '取消', + inputType: 'textarea', + inputPlaceholder: '请输入评价内容', + inputValidator: (value) => { + if (!value || value.trim() === '') { + return '评价内容不能为空'; + } + return true; + } + }).then(({ value }) => { + this.$axios.post('/platform/suggestionBox/mine/evaluate', {id: row.id, evaluate: value + }).then((res) => { + if (res.code === 0) { + this.$message.success('评价保存成功'); + this.pageData(); + } + }) + }).catch(() => { + // 用户取消操作 + }); + }, openView(row) { this.$refs.guava.edit(()=>{ this.$refs.suggestionInfoRef.onOpen(row) diff --git a/src/main/resources/views/platform/zhgh/democratic/suggestionBox/query/index.html b/src/main/resources/views/platform/zhgh/democratic/suggestionBox/query/index.html index 245f221..0ddb1b7 100644 --- a/src/main/resources/views/platform/zhgh/democratic/suggestionBox/query/index.html +++ b/src/main/resources/views/platform/zhgh/democratic/suggestionBox/query/index.html @@ -54,6 +54,9 @@ layout("/layouts/platform.html"){ @@ -84,14 +87,35 @@ layout("/layouts/platform.html"){ } }, methods: { + reply(row) { + this.$prompt('请输入答复内容', '答复', { + confirmButtonText: '保存', + cancelButtonText: '取消', + inputType: 'textarea', + inputPlaceholder: '请输入答复内容', + inputValidator: (value) => { + if (!value || value.trim() === '') { + return '答复内容不能为空'; + } + return true; + } + }).then(({ value }) => { + this.$axios.post('/platform/suggestionBox/query/reply', {id: row.id, reply: value + }).then((res) => { + if (res.code === 0) { + this.$message.success('答复保存成功'); + this.pageData(); + } + }) + }).catch(() => { + // 用户取消操作 + }); + }, openView(row) { this.$refs.guava.edit(()=>{ this.$refs.suggestionInfoRef.onOpen(row) }) }, - onEdit(row) { - commonUtil.pjaxPush('/platform/suggestionBox/write?taskId=' + (row.startTaskId || '') + "&bizId=" + row.id) - }, onRevoke(row) { this.$confirm("您确定要撤回吗?", "提示", { confirmButtonText: "确定", diff --git a/src/main/resources/views/platform/zhgh/staffbenefit/condolence/mine/index.html b/src/main/resources/views/platform/zhgh/staffbenefit/condolence/mine/index.html index 5f37c51..db3ffab 100644 --- a/src/main/resources/views/platform/zhgh/staffbenefit/condolence/mine/index.html +++ b/src/main/resources/views/platform/zhgh/staffbenefit/condolence/mine/index.html @@ -71,7 +71,10 @@ layout("/layouts/platform.html"){ 删除 - 导出 + 导出申请表 + + + 报销凭证 @@ -111,10 +114,10 @@ layout("/layouts/platform.html"){ }, methods: { onExport(id) { - this.$downLoad('/platform/condolence/mine/onExport', { - id: id - }) - + this.$downLoad('/platform/condolence/mine/onExport', {id: id}) + }, + doExport(id) { + this.$downLoad('/platform/condolence/mine/doExport', {id: id}) }, onAdd() { commonUtil.pjaxPush('/platform/condolence/apply')