diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/controller/BaseExpenseAccountController.java b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/BaseExpenseAccountController.java index 63e14668..575c9034 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/controller/BaseExpenseAccountController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/BaseExpenseAccountController.java @@ -1,22 +1,27 @@ package com.ruoyi.system.controller; +import java.io.IOException; +import java.math.BigDecimal; +import java.net.URLEncoder; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; -import com.alibaba.fastjson.JSON; -import com.ruoyi.common.core.domain.entity.SysUser; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.file.FileDownloadUtils; +import com.ruoyi.financial.service.IFinacialExpenseService; import com.ruoyi.process.general.service.IProcessService; -import com.ruoyi.process.todoitem.mapper.BizTodoItemMapper; import com.ruoyi.remind.service.RemindService; import com.ruoyi.system.domain.BaseExpenseAccountChild; +import com.ruoyi.system.domain.BaseExpenseConfirmAmount; import com.ruoyi.system.domain.Vo.BaseExpenseAccountVo; -import com.ruoyi.system.mapper.BaseExpenseAccountChildMapper; -import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.system.service.*; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; @@ -37,6 +42,7 @@ import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.core.page.TableDataInfo; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** @@ -79,6 +85,11 @@ public class BaseExpenseAccountController extends BaseController @Autowired private IProcessService processService; @Autowired + private IBaseExpenseConfirmAmountService baseExpenseConfirmAmountService; + + @Autowired + private IFinacialExpenseService finacialExpenseService; + @Autowired @RequiresPermissions("system:baseExpense:view") @GetMapping() @@ -136,8 +147,60 @@ public class BaseExpenseAccountController extends BaseController List list = baseExpenseAccountService.selectBaseExpenseAccountList(baseExpenseAccount); ExcelUtil util = new ExcelUtil(BaseExpenseAccountVo.class); return util.exportExcel(list, "报销单数据"); + } + @RequiresPermissions("system:baseExpense:export") + @Log(title = "报销单", businessType = BusinessType.EXPORT) + @GetMapping("/excelExpenseVoucher/{id}") + public void excelExpense(@PathVariable("id") Long id, HttpServletResponse response) throws IOException { + BaseExpenseAccountVo baseExpenseAccount = baseExpenseAccountService.selectBaseExpenseAccountById(id); + List financialReceivablesRecordsList = baseExpenseAccountChildService.selectBaseExpenseAccountChildByExpenseCode(baseExpenseAccount.getExpenseCode()); + // 模版位置 + String fileName = "报销单.xlsx"; + FileDownloadUtils fileDownloadUtils = new FileDownloadUtils(); + String fileRelativePath = fileDownloadUtils.getFileRelativePath(fileName); + + String realFileName = baseExpenseAccount.getExpenseCode() +"-" +fileRelativePath.substring(0,fileName.lastIndexOf(".")) + ".xlsx"; + // 设置响应头,指定文件名和文件类型 + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); + response.setContentType("application/octet-stream"); + // 获取模板文件的输入流,引用绝对路径上的模版 + // 创建一个ExcelWriterBuilder对象,并指定输出流和输入流 + // 每页最多显示的行数 + ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(fileRelativePath).build(); + final int maxRowsPerPage = 6; + // 计算需要多少页 + int totalPages = (int) Math.ceil((double) financialReceivablesRecordsList.size() / maxRowsPerPage); + for (int i = 0; i < totalPages - 1; i++) { + Map map = new HashMap<>(); + List list = baseExpenseAccountChildService.selectBaseExpenseChildListByCodePage(baseExpenseAccount.getExpenseCode(), i * maxRowsPerPage, maxRowsPerPage); + Map map1 = new HashMap<>(); + map.put("list", list); + map1.put("deptName",baseExpenseAccount.getDeptName()); + String date = DateUtils.getDate(); + String[] dateArray = date.split("-"); + map1.put("year", dateArray[0]); + map1.put("month", dateArray[1]); + map1.put("day", dateArray[2]); + map1.put("fullName", baseExpenseAccount.getFullName()); + double sum = 0.0; + for (BaseExpenseAccountChild baseExpenseAccountChild : list) { + Double baseExpenseAccountChildAmounts = Double.valueOf(baseExpenseAccountChild.getAmounts()); + sum += baseExpenseAccountChildAmounts; + } + Double amounts = sum; + map.put("amountSum",sum); + // 创建一个WriteSheet对象,并指定模板中的Sheet编号 + WriteSheet writeSheet = EasyExcel.writerSheet("sheet" + (i + 1)).build(); + FillConfig fillConfig = FillConfig.builder().forceNewRow(false).build(); + excelWriter.fill(map1,fillConfig, writeSheet); + excelWriter.fill(map.get("list"), fillConfig, writeSheet); + //合计金额 + excelWriter.fill(map.get("amountSum"), fillConfig, writeSheet); + } + excelWriter.finish(); + } /** * 新增报销单 */ @@ -255,6 +318,11 @@ public class BaseExpenseAccountController extends BaseController if("submit".equals(instanceType)){ // 使用状态-是 baseExpenseAccountVo.setUseStatus("1"); + //总经理审核完毕为转入财务审核,如果是总经理审核的话,财务审核状态为0 + if(baseExpenseAccountVo.getTaskName().contains("总经理")){ + baseExpenseAccountVo.setManagerAuditStatus("1"); +// finacialExpenseService.submitApply(baseExpenseAccountVo); + } } // 作废 else if("cancel".equals(instanceType)){ @@ -308,4 +376,21 @@ public class BaseExpenseAccountController extends BaseController public AjaxResult getExpenseCode() throws Exception { return AjaxResult.success(sysUserService.selectUserAll()); } + + @RequestMapping("/confirmExpense/{id}") + public String confirmExpense(@PathVariable("id") Long id,ModelMap mmap) throws Exception { + BaseExpenseAccount baseExpenseAccount = baseExpenseAccountService.selectBaseExpenseAccountById(id); + BaseExpenseConfirmAmount baseExpenseConfirmAmount = new BaseExpenseConfirmAmount(); + baseExpenseConfirmAmount.setExpenseCode(baseExpenseAccount.getExpenseCode()); + baseExpenseConfirmAmount.setExpenseMethod(baseExpenseAccount.getExpenseMethod()); + baseExpenseConfirmAmount.setFullName(baseExpenseAccount.getFullName()); + mmap.put("baseExpenseAccount", baseExpenseConfirmAmount); + return prefix + "/confirmPayment"; + } + + @RequestMapping("/saveComfrimPayment") + @ResponseBody + public AjaxResult confirmExpense(BaseExpenseConfirmAmount baseExpenseConfirmAmount) throws Exception { + return toAjax(baseExpenseConfirmAmountService.insertBaseExpenseConfirmAmount(baseExpenseConfirmAmount)); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/controller/BaseExpenseConfirmAmountController.java b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/BaseExpenseConfirmAmountController.java new file mode 100644 index 00000000..d839535f --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/BaseExpenseConfirmAmountController.java @@ -0,0 +1,151 @@ +package com.ruoyi.system.controller; + +import java.util.List; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +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.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.system.domain.BaseExpenseConfirmAmount; +import com.ruoyi.system.service.IBaseExpenseConfirmAmountService; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 报销打款记录Controller + * + * @author zhang + * @date 2024-09-06 + */ +@Controller +@RequestMapping("/system/BaseExpenseConfirmAmount") +public class BaseExpenseConfirmAmountController extends BaseController +{ + private String prefix = "system/BaseExpenseConfirmAmount"; + + @Autowired + private IBaseExpenseConfirmAmountService baseExpenseConfirmAmountService; + + @RequiresPermissions("system:BaseExpenseConfirmAmount:view") + @GetMapping() + public String BaseExpenseConfirmAmount() + { + return prefix + "/BaseExpenseConfirmAmount"; + } + + /** + * 查询报销打款记录列表 + */ + @RequiresPermissions("system:BaseExpenseConfirmAmount:list") + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(BaseExpenseConfirmAmount baseExpenseConfirmAmount) + { + startPage(); + List list = baseExpenseConfirmAmountService.selectBaseExpenseConfirmAmountList(baseExpenseConfirmAmount); + return getDataTable(list); + } + + /** + * 导出报销打款记录列表 + */ + @RequiresPermissions("system:BaseExpenseConfirmAmount:export") + @Log(title = "报销打款记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + @ResponseBody + public AjaxResult export(BaseExpenseConfirmAmount baseExpenseConfirmAmount) + { + List list = baseExpenseConfirmAmountService.selectBaseExpenseConfirmAmountList(baseExpenseConfirmAmount); + ExcelUtil util = new ExcelUtil(BaseExpenseConfirmAmount.class); + return util.exportExcel(list, "报销打款记录数据"); + } + + /** + * 新增报销打款记录 + */ + @GetMapping("/add") + public String add() + { + return prefix + "/add"; + } + + /** + * 新增保存报销打款记录 + */ + @RequiresPermissions("system:BaseExpenseConfirmAmount:add") + @Log(title = "报销打款记录", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ResponseBody + public AjaxResult addSave(BaseExpenseConfirmAmount baseExpenseConfirmAmount) + { + return toAjax(baseExpenseConfirmAmountService.insertBaseExpenseConfirmAmount(baseExpenseConfirmAmount)); + } + + /** + * 修改报销打款记录 + */ + @GetMapping("/edit/{expenseAmountId}") + public String edit(@PathVariable("expenseAmountId") Long expenseAmountId, ModelMap mmap) + { + BaseExpenseConfirmAmount baseExpenseConfirmAmount = baseExpenseConfirmAmountService.selectBaseExpenseConfirmAmountById(expenseAmountId); + mmap.put("baseExpenseConfirmAmount", baseExpenseConfirmAmount); + return prefix + "/edit"; + } + + /** + * 修改保存报销打款记录 + */ + @RequiresPermissions("system:BaseExpenseConfirmAmount:edit") + @Log(title = "报销打款记录", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave(BaseExpenseConfirmAmount baseExpenseConfirmAmount) + { + return toAjax(baseExpenseConfirmAmountService.updateBaseExpenseConfirmAmount(baseExpenseConfirmAmount)); + } + + /** + * 删除报销打款记录 + */ + @RequiresPermissions("system:BaseExpenseConfirmAmount:remove") + @Log(title = "报销打款记录", businessType = BusinessType.DELETE) + @PostMapping( "/remove") + @ResponseBody + public AjaxResult remove(String ids) + { + return toAjax(baseExpenseConfirmAmountService.deleteBaseExpenseConfirmAmountByIds(ids)); + } + + /** + * 作废报销打款记录 + */ + @RequiresPermissions("system:BaseExpenseConfirmAmount:cancel") + @Log(title = "报销打款记录", businessType = BusinessType.CANCEL) + @GetMapping( "/cancel/{id}") + @ResponseBody + public AjaxResult cancel(@PathVariable("id") Long id){ + return toAjax(baseExpenseConfirmAmountService.cancelBaseExpenseConfirmAmountById(id)); + } + + /** + * 恢复报销打款记录 + */ + @RequiresPermissions("system:BaseExpenseConfirmAmount:restore") + @Log(title = "报销打款记录", businessType = BusinessType.RESTORE) + @GetMapping( "/restore/{id}") + @ResponseBody + public AjaxResult restore(@PathVariable("id")Long id) + { + return toAjax(baseExpenseConfirmAmountService.restoreBaseExpenseConfirmAmountById(id)); + } + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/BaseExpenseConfirmAmount.java b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/BaseExpenseConfirmAmount.java new file mode 100644 index 00000000..0fc0eb46 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/BaseExpenseConfirmAmount.java @@ -0,0 +1,117 @@ +package com.ruoyi.system.domain; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 报销打款记录对象 base_expense_confirm_amount + * + * @author zhang + * @date 2024-09-06 + */ +public class BaseExpenseConfirmAmount extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 打款记录id */ + private Long expenseAmountId; + + /** 关联打款记录报销单号 */ + @Excel(name = "关联打款记录报销单号") + private String expenseCode; + + /** 打款记录时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "打款记录时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date expenseDate; + + /** 报销类型 */ + @Excel(name = "报销类型") + private String expenseMethod; + + /** 报销人 */ + @Excel(name = "报销人") + private String fullName; + + /** 打款金额 */ + @Excel(name = "打款金额") + private BigDecimal amount; + + public void setExpenseAmountId(Long expenseAmountId) + { + this.expenseAmountId = expenseAmountId; + } + + public Long getExpenseAmountId() + { + return expenseAmountId; + } + public void setExpenseCode(String expenseCode) + { + this.expenseCode = expenseCode; + } + + public String getExpenseCode() + { + return expenseCode; + } + public void setExpenseDate(Date expenseDate) + { + this.expenseDate = expenseDate; + } + + public Date getExpenseDate() + { + return expenseDate; + } + + public String getExpenseMethod() { + return expenseMethod; + } + + public void setExpenseMethod(String expenseMethod) { + this.expenseMethod = expenseMethod; + } + + public void setFullName(String fullName) + { + this.fullName = fullName; + } + + public String getFullName() + { + return fullName; + } + public void setAmount(BigDecimal amount) + { + this.amount = amount; + } + + public BigDecimal getAmount() + { + return amount; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("expenseAmountId", getExpenseAmountId()) + .append("expenseCode", getExpenseCode()) + .append("expenseDate", getExpenseDate()) + .append("expenseMethod", getExpenseMethod()) + .append("fullName", getFullName()) + .append("amount", getAmount()) + .append("createTime", getCreateTime()) + .append("createBy", getCreateBy()) + .append("updateTime", getUpdateTime()) + .append("updateBy", getUpdateBy()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseExpenseAccountChildMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseExpenseAccountChildMapper.java index c4589060..e2976535 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseExpenseAccountChildMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseExpenseAccountChildMapper.java @@ -1,6 +1,8 @@ package com.ruoyi.system.mapper; import java.util.List; +import java.util.Map; + import com.ruoyi.system.domain.BaseExpenseAccountChild; /** @@ -19,6 +21,21 @@ public interface BaseExpenseAccountChildMapper */ public BaseExpenseAccountChild selectBaseExpenseAccountChildById(Long expenseChildId); + /** + * 查询报销单分类子 + * + * @param expenseCode 报销单分类编号 + * @return 报销单分类子 + */ + public List selectBaseExpenseAccountChildByExpenseCode(String expenseCode); + + /** + * 根据报销单分类编号查询报销单分类子 + * @param map + * @return + */ + public List selectBaseExpenseChildListByCodePage(Map map); + /** * 查询报销单分类子列表 * @@ -107,5 +124,4 @@ public interface BaseExpenseAccountChildMapper */ public int deleteBaseExpenseAccountChildByExpenseCodes(String[] expenseCodes); - } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseExpenseAccountMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseExpenseAccountMapper.java index 81fe0ee0..680f10ca 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseExpenseAccountMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseExpenseAccountMapper.java @@ -105,4 +105,6 @@ public interface BaseExpenseAccountMapper */ public Integer deleteBaseExpenseAccountByExpenseCode(String expenseCode); + + BaseExpenseAccount selectBaseExpenseAccountByCode(String expenseCode); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseExpenseConfirmAmountMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseExpenseConfirmAmountMapper.java new file mode 100644 index 00000000..acdfdc72 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseExpenseConfirmAmountMapper.java @@ -0,0 +1,81 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.system.domain.BaseExpenseConfirmAmount; + +/** + * 报销打款记录Mapper接口 + * + * @author zhang + * @date 2024-09-06 + */ +public interface BaseExpenseConfirmAmountMapper +{ + /** + * 查询报销打款记录 + * + * @param expenseAmountId 报销打款记录ID + * @return 报销打款记录 + */ + public BaseExpenseConfirmAmount selectBaseExpenseConfirmAmountById(Long expenseAmountId); + + public List selectBaseExpenseConfirmAmountByExpenseCode(String expenseCode); + + /** + * 查询报销打款记录列表 + * + * @param baseExpenseConfirmAmount 报销打款记录 + * @return 报销打款记录集合 + */ + public List selectBaseExpenseConfirmAmountList(BaseExpenseConfirmAmount baseExpenseConfirmAmount); + + /** + * 新增报销打款记录 + * + * @param baseExpenseConfirmAmount 报销打款记录 + * @return 结果 + */ + public int insertBaseExpenseConfirmAmount(BaseExpenseConfirmAmount baseExpenseConfirmAmount); + + /** + * 修改报销打款记录 + * + * @param baseExpenseConfirmAmount 报销打款记录 + * @return 结果 + */ + public int updateBaseExpenseConfirmAmount(BaseExpenseConfirmAmount baseExpenseConfirmAmount); + + /** + * 删除报销打款记录 + * + * @param expenseAmountId 报销打款记录ID + * @return 结果 + */ + public int deleteBaseExpenseConfirmAmountById(Long expenseAmountId); + + public int deleteBaseExpenseConfirmAmountByCode(String expenseCode); + + /** + * 批量删除报销打款记录 + * + * @param expenseAmountIds 需要删除的数据ID + * @return 结果 + */ + public int deleteBaseExpenseConfirmAmountByIds(String[] expenseAmountIds); + + /** + * 作废报销打款记录 + * + * @param expenseAmountId 报销打款记录ID + * @return 结果 + */ + public int cancelBaseExpenseConfirmAmountById(Long expenseAmountId); + + /** + * 恢复报销打款记录 + * + * @param expenseAmountId 报销打款记录ID + * @return 结果 + */ + public int restoreBaseExpenseConfirmAmountById(Long expenseAmountId); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseExpenseAccountChildServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseExpenseAccountChildServiceImpl.java index e6ac2d64..71c0c5d5 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseExpenseAccountChildServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseExpenseAccountChildServiceImpl.java @@ -1,12 +1,17 @@ package com.ruoyi.system.service.impl; +import java.io.IOException; +import java.util.HashMap; import java.util.List; +import java.util.Map; + import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; +import com.ruoyi.system.domain.*; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.system.mapper.BaseExpenseAccountChildMapper; -import com.ruoyi.system.domain.BaseExpenseAccountChild; import com.ruoyi.system.service.IBaseExpenseAccountChildService; import com.ruoyi.common.core.text.Convert; @@ -143,4 +148,30 @@ public class BaseExpenseAccountChildServiceImpl implements IBaseExpenseAccountCh { return baseExpenseAccountChildMapper.restoreBaseExpenseAccountChildById(expenseChildId); } + + @Override + public List selectBaseExpenseAccountChildByExpenseCode(String expenseCode) { + return baseExpenseAccountChildMapper.selectBaseExpenseAccountChildByExpenseCode(expenseCode); + } + + + @Override + public Map exportTemplate(List baseExpenseAccountChildList) throws NoSuchBeanDefinitionException, IOException { + Map map = new HashMap<>(); + //需要传输导出的值有:借方科目,开户银行, + //现在时间截取后 年,月,日, 格式为转换 yyyy MM dd, + //凭证信息批量:包含收款摘要,金额字符串截取,位数从百万开始,百万,十万,万,千,百,十,元,角,分。小数点后俩位为角,分,小数点不需要显示, + //将以上信息通过map传输出去 + //接收拆分的数字 + return map; + } + @Override + public List selectBaseExpenseChildListByCodePage(String expenseCode, int pageNum, int pageSize){ + Map params = new HashMap<>(); + params.put("code",expenseCode); + params.put("pageNum",pageNum); + params.put("pageSize",pageSize); + return baseExpenseAccountChildMapper.selectBaseExpenseChildListByCodePage(params); + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseExpenseAccountServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseExpenseAccountServiceImpl.java index 29966296..fd8c9b9a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseExpenseAccountServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseExpenseAccountServiceImpl.java @@ -317,7 +317,6 @@ public class BaseExpenseAccountServiceImpl implements IBaseExpenseAccountService SysUser user = ShiroUtils.getSysUser(); baseExpenseAccount.setApplyUser(user.getLoginName()); baseExpenseAccount.setApplyTime(DateUtils.getNowDate()); -// insertBaseExpenseAccount(baseExpenseAccount); if (baseExpenseAccount.getExpenseId() == null || baseExpenseAccount.getExpenseId() == 0){ insertBaseExpenseAccount(baseExpenseAccount); } @@ -414,4 +413,9 @@ public class BaseExpenseAccountServiceImpl implements IBaseExpenseAccountService public Object getId() { return redisCache.generateBillNo("BX"); } + + @Override + public BaseExpenseAccount selectBaseExpenseAccountByCode(String expenseCode) { + return baseExpenseAccountMapper.selectBaseExpenseAccountByCode(expenseCode); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseExpenseConfirmAmountServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseExpenseConfirmAmountServiceImpl.java new file mode 100644 index 00000000..62002900 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseExpenseConfirmAmountServiceImpl.java @@ -0,0 +1,126 @@ +package com.ruoyi.system.service.impl; + +import java.util.List; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.ShiroUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.system.mapper.BaseExpenseConfirmAmountMapper; +import com.ruoyi.system.domain.BaseExpenseConfirmAmount; +import com.ruoyi.system.service.IBaseExpenseConfirmAmountService; +import com.ruoyi.common.core.text.Convert; + +/** + * 报销打款记录Service业务层处理 + * + * @author zhang + * @date 2024-09-06 + */ +@Service +public class BaseExpenseConfirmAmountServiceImpl implements IBaseExpenseConfirmAmountService +{ + @Autowired + private BaseExpenseConfirmAmountMapper baseExpenseConfirmAmountMapper; + + /** + * 查询报销打款记录 + * + * @param expenseAmountId 报销打款记录ID + * @return 报销打款记录 + */ + @Override + public BaseExpenseConfirmAmount selectBaseExpenseConfirmAmountById(Long expenseAmountId) + { + return baseExpenseConfirmAmountMapper.selectBaseExpenseConfirmAmountById(expenseAmountId); + } + + /** + * 查询报销打款记录列表 + * + * @param baseExpenseConfirmAmount 报销打款记录 + * @return 报销打款记录 + */ + @Override + public List selectBaseExpenseConfirmAmountList(BaseExpenseConfirmAmount baseExpenseConfirmAmount) + { + return baseExpenseConfirmAmountMapper.selectBaseExpenseConfirmAmountList(baseExpenseConfirmAmount); + } + + /** + * 新增报销打款记录 + * + * @param baseExpenseConfirmAmount 报销打款记录 + * @return 结果 + */ + @Override + public int insertBaseExpenseConfirmAmount(BaseExpenseConfirmAmount baseExpenseConfirmAmount) + { + baseExpenseConfirmAmount.setCreateTime(DateUtils.getNowDate()); + String loginName = ShiroUtils.getLoginName(); + baseExpenseConfirmAmount.setCreateBy(loginName); + return baseExpenseConfirmAmountMapper.insertBaseExpenseConfirmAmount(baseExpenseConfirmAmount); + } + + /** + * 修改报销打款记录 + * + * @param baseExpenseConfirmAmount 报销打款记录 + * @return 结果 + */ + @Override + public int updateBaseExpenseConfirmAmount(BaseExpenseConfirmAmount baseExpenseConfirmAmount) + { + baseExpenseConfirmAmount.setUpdateTime(DateUtils.getNowDate()); + String loginName = ShiroUtils.getLoginName(); + baseExpenseConfirmAmount.setUpdateBy(loginName); + return baseExpenseConfirmAmountMapper.updateBaseExpenseConfirmAmount(baseExpenseConfirmAmount); + } + + /** + * 删除报销打款记录对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteBaseExpenseConfirmAmountByIds(String ids) + { + return baseExpenseConfirmAmountMapper.deleteBaseExpenseConfirmAmountByIds(Convert.toStrArray(ids)); + } + + /** + * 删除报销打款记录信息 + * + * @param expenseAmountId 报销打款记录ID + * @return 结果 + */ + @Override + public int deleteBaseExpenseConfirmAmountById(Long expenseAmountId) + { + return baseExpenseConfirmAmountMapper.deleteBaseExpenseConfirmAmountById(expenseAmountId); + } + + /** + * 作废报销打款记录 + * + * @param expenseAmountId 报销打款记录ID + * @return 结果 + */ + @Override + public int cancelBaseExpenseConfirmAmountById(Long expenseAmountId) + { + return baseExpenseConfirmAmountMapper.cancelBaseExpenseConfirmAmountById(expenseAmountId); + } + + /** + * 恢复报销打款记录信息 + * + * @param expenseAmountId 报销打款记录ID + * @return 结果 + */ + @Override + public int restoreBaseExpenseConfirmAmountById(Long expenseAmountId) + { + return baseExpenseConfirmAmountMapper.restoreBaseExpenseConfirmAmountById(expenseAmountId); + } +} diff --git a/ruoyi-admin/src/main/resources/mapper/system/BaseExpenseAccountChildMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/BaseExpenseAccountChildMapper.xml index 31b0dc19..feef17e6 100644 --- a/ruoyi-admin/src/main/resources/mapper/system/BaseExpenseAccountChildMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/system/BaseExpenseAccountChildMapper.xml @@ -50,7 +50,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where expense_child_id = #{expenseChildId} - + + insert into base_expense_account_child diff --git a/ruoyi-admin/src/main/resources/mapper/system/BaseExpenseAccountMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/BaseExpenseAccountMapper.xml index 8185b4da..9b61446c 100644 --- a/ruoyi-admin/src/main/resources/mapper/system/BaseExpenseAccountMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/system/BaseExpenseAccountMapper.xml @@ -35,7 +35,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + @@ -51,15 +51,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + insert into base_expense_account @@ -237,5 +243,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{expenseCode} - \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/system/BaseExpenseConfirmAmountMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/BaseExpenseConfirmAmountMapper.xml new file mode 100644 index 00000000..e4d128f7 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/system/BaseExpenseConfirmAmountMapper.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + select expense_amount_id, expense_code, expense_date, expense_method, + full_name, amount, create_time, create_by, update_time, update_by, + remark from base_expense_confirm_amount + + + + + + + + insert into base_expense_confirm_amount + + expense_code, + expense_date, + expense_method, + full_name, + amount, + create_time, + create_by, + update_time, + update_by, + remark, + + + #{expenseCode}, + #{expenseDate}, + #{expenseMethod}, + #{fullName}, + #{amount}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{remark}, + + + + + update base_expense_confirm_amount + + expense_code = #{expenseCode}, + expense_date = #{expenseDate}, + expense_method = #{expenseMethod}, + full_name = #{fullName}, + amount = #{amount}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + remark = #{remark}, + + where expense_amount_id = #{expenseAmountId} + + + + delete from base_expense_confirm_amount where expense_amount_id = #{expenseAmountId} + + + delete from base_expense_confirm_amount where expense_code = #{expensecode} + + + delete from base_expense_confirm_amount where expense_amount_id in + + #{expenseAmountId} + + + + + update base_expense_confirm_amount set del_flag = '1' where expense_amount_id = #{expenseAmountId} + + + + update base_expense_confirm_amount set del_flag = '0' where expense_amount_id = #{expenseAmountId} + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/static/attachments/报销单.xlsx b/ruoyi-admin/src/main/resources/static/attachments/报销单.xlsx new file mode 100644 index 00000000..09078c5e Binary files /dev/null and b/ruoyi-admin/src/main/resources/static/attachments/报销单.xlsx differ diff --git a/ruoyi-admin/src/main/resources/templates/system/baseExpense/baseExpense.html b/ruoyi-admin/src/main/resources/templates/system/baseExpense/baseExpense.html index e2386e5b..a4be3cdf 100644 --- a/ruoyi-admin/src/main/resources/templates/system/baseExpense/baseExpense.html +++ b/ruoyi-admin/src/main/resources/templates/system/baseExpense/baseExpense.html @@ -39,7 +39,7 @@
  • - +
  • -
  • -
  • @@ -112,6 +112,7 @@ var loginName = [[${@permission.getPrincipalProperty('loginName')}]]; var auditStatusData = [[${@dict.getType('auditStatus')}]]; var expenseMethodData = [[${@dict.getType('sys_base_expense_method')}]]; + var finacialExpenseStatusDatas = [[${@dict.getType('finacialExpenseStatus')}]]; var prefix = ctx + "system/baseExpense"; $(function() { @@ -140,8 +141,10 @@ {title:'流程作废实例ID',field: 'cancelInstanceId',visible: false,align: 'center',}, {title: '流程恢复实例ID',field: 'restoreInstanceId', visible: false,align: 'center',}, {title: '流程实例类型', field: 'instanceTypeName',visible: false,align: 'center',}, - {field: 'applyUserName', title: '申请人',align: 'center',}, - {field: 'applyTime',title: '申请时间',align: 'center',}, + {title: '申请人',field: 'applyUserName', align: 'center', + formatter: function(value, row, index) {return '' + (value ? value : "-") + '';} + }, + {title: '申请时间',field: 'applyTime',align: 'center',}, {title: '当前任务ID',field: 'taskId',visible: false,align: 'center',}, {title: '待办用户ID',field: 'todoUserId', visible: false,align: 'center',}, {title: '当前任务名称',field: 'taskName', @@ -155,14 +158,14 @@ return $.table.selectDictLabel(auditStatusData, value); } }, - {title: '总经理审核状态',field: 'managerAuditStatus',align: 'center', + {title: '总经理状态',field: 'managerAuditStatus',align: 'center', formatter: function(value, row, index) { return $.table.selectDictLabel(auditStatusData, value); } }, - {title: '财务审核状态',field: 'financeAuditStatus',align: 'center', + {title: '财务状态',field: 'financeAuditStatus',align: 'center', formatter: function(value, row, index) { - return $.table.selectDictLabel(auditStatusData, value); + return $.table.selectDictLabel(finacialExpenseStatusDatas, value); } }, {title: '报销单编号',field: 'expenseCode',align: 'center',}, @@ -178,8 +181,8 @@ {title: '对公收款账户',field: 'corporateReceivingAccount',visible: false,align: 'center',}, {title: '对公开户行',field: 'publicAccountBanks',visible: false,align: 'center',}, {title: '录入时间',field: 'createTime',align: 'center',}, - {title: '更新人',field: 'updateBy',align: 'center',visible: false}, - {title: '上次更新时间',field: 'updateTime',visible: false,align: 'center',}, + {title: '更新人',field: 'updateBy',align: 'center',}, + {title: '上次更新时间',field: 'updateTime',align: 'center',}, {title: '备注',field: 'remark',visible: false,align: 'center',}, {title: '使用状态',field: 'useStatus',visible: false,align: 'center',}, {title: '操作',align: 'center', formatter: function (value, row, index) { @@ -205,6 +208,12 @@ actions.push(' 审批历史 '); actions.push(' 进度查看 '); } + if(row.auditStatus=="1" && row.managerAuditStatus=="1") { + actions.push(' 导出 '); + } + if(row.auditStatus=="1" && row.financeAuditStatus=="3" && row.managerAuditStatus=="1") { + actions.push(' 确认打款'); + } // 详情 actions.push(' 详情 '); return actions.join(''); @@ -257,6 +266,15 @@ } }); } + + //确认打款 + function financialExpenseAmount(expenseId){ + $.modal.open("确认打款",prefix + "/confirmExpense/" + expenseId); + } + /*导出报销单*/ + function exportExpense(expenseId){ + window.location.href = prefix + "/excelExpenseVoucher/" + expenseId; + } \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/system/baseExpense/confirmPayment.html b/ruoyi-admin/src/main/resources/templates/system/baseExpense/confirmPayment.html new file mode 100644 index 00000000..7377de61 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/system/baseExpense/confirmPayment.html @@ -0,0 +1,81 @@ + + + + + + + + + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + +
    +
    +
    +
    + + + + + + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/system/baseExpense/edit.html b/ruoyi-admin/src/main/resources/templates/system/baseExpense/edit.html index bd64260b..1bcb8ac8 100644 --- a/ruoyi-admin/src/main/resources/templates/system/baseExpense/edit.html +++ b/ruoyi-admin/src/main/resources/templates/system/baseExpense/edit.html @@ -97,7 +97,7 @@
    -
    +
    @@ -160,6 +160,22 @@ handleExpenseMethod(this); loadSupplierCodes(); }); + function insertRow() { + $table.bootstrapTable('insertRow', { + index:0, + row: { + expenseChildId:'', + costType: "", + costSmallType:"", + purpose:'' , + amounts: '', + expenseTime: '', + evectionCode:'' , + purchaseCode:'', + outsourceCode: '', + } + }) + } function removeRow(index) { // 使用索引值移除行 $('#bootstrap-sub-table-expense-edit').bootstrapTable('remove', { @@ -250,7 +266,7 @@ function submitHandler() { if ($.validate.form()) { var tableData = $("#bootstrap-sub-table-expense-edit").bootstrapTable('getData'); - var formData = $("#form-baseExpense-add").serializeArray(); + var formData = $("#form-baseExpense-edit").serializeArray(); var rows = tableData.length; if(rows==0){ $.modal.alertWarning("子表数据不能为空!");