package com.ruoyi.web.controller.project; 
 | 
  
 | 
import com.ruoyi.common.annotation.Log; 
 | 
import com.ruoyi.common.annotation.RepeatSubmit; 
 | 
import com.ruoyi.common.config.RuoYiConfig; 
 | 
import com.ruoyi.common.constant.HttpStatus; 
 | 
import com.ruoyi.common.core.controller.BaseController; 
 | 
import com.ruoyi.common.core.domain.AjaxResult; 
 | 
import com.ruoyi.common.core.domain.entity.SysUser; 
 | 
import com.ruoyi.common.core.domain.model.LoginUser; 
 | 
import com.ruoyi.common.core.page.TableDataInfo; 
 | 
import com.ruoyi.common.enums.BusinessType; 
 | 
import com.ruoyi.common.exception.ServiceException; 
 | 
import com.ruoyi.common.utils.SecurityUtils; 
 | 
import com.ruoyi.common.utils.poi.ExcelUtil; 
 | 
import com.ruoyi.project.domain.*; 
 | 
import com.ruoyi.project.domain.dto.ServiceReimbursementDto; 
 | 
import com.ruoyi.project.domain.vo.CheckFundVO; 
 | 
import com.ruoyi.project.domain.vo.DingTalkReqVo; 
 | 
import com.ruoyi.project.domain.vo.SpFinancialExpensesIn; 
 | 
import com.ruoyi.project.domain.vo.SpFinancialExpensesReimbursementOut; 
 | 
import com.ruoyi.project.service.*; 
 | 
import com.ruoyi.system.service.ISysPostService; 
 | 
import com.ruoyi.system.service.ISysUserService; 
 | 
import com.ruoyi.web.controller.enums.PersonType; 
 | 
import freemarker.template.Configuration; 
 | 
import freemarker.template.Template; 
 | 
import freemarker.template.TemplateException; 
 | 
import io.swagger.annotations.Api; 
 | 
import io.swagger.annotations.ApiOperation; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.lang.StringUtils; 
 | 
import org.apache.ibatis.annotations.Options; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.util.CollectionUtils; 
 | 
import org.springframework.web.bind.annotation.*; 
 | 
  
 | 
import java.io.*; 
 | 
import java.math.BigDecimal; 
 | 
import java.text.SimpleDateFormat; 
 | 
import java.util.*; 
 | 
import java.util.concurrent.ConcurrentHashMap; 
 | 
import java.util.regex.Pattern; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
  
 | 
/** 
 | 
 * 报销申请Controller 
 | 
 * 
 | 
 * @author ruoyi 
 | 
 * @date 2022-01-24 
 | 
 */ 
 | 
@Slf4j 
 | 
@Api("报销申请") 
 | 
@RestController 
 | 
@RequestMapping("/project/reimbursement") 
 | 
public class ServiceReimbursementController extends BaseController { 
 | 
    @Autowired 
 | 
    private IServiceReimbursementService serviceReimbursementService; 
 | 
  
 | 
//    @Autowired 
 | 
//    private MergeFilesToPDFUtils mergeFilesToPDFUtils; 
 | 
  
 | 
    @Autowired 
 | 
    private IServiceReimbursementSharedService serviceReimbursementSharedService; 
 | 
  
 | 
    @Autowired 
 | 
    private IServiceReimbursementpayeeService reimbursementpayeeService; 
 | 
  
 | 
    @Autowired 
 | 
    private IServiceReimbursementdetailService serviceReimbursementdetailService; 
 | 
  
 | 
    @Autowired 
 | 
    private IServiceFundflowruleService serviceFundflowruleService; 
 | 
  
 | 
    @Autowired 
 | 
    private IServiceFundflowService serviceFundflowService; 
 | 
  
 | 
    @Autowired 
 | 
    private DingTalkService dingTalkService; 
 | 
  
 | 
    @Autowired 
 | 
    private ISysUserService sysUserService; 
 | 
  
 | 
    @Autowired 
 | 
    private ISysPostService postService; 
 | 
  
 | 
    private static Configuration configuration = null; 
 | 
  
 | 
    public ServiceReimbursementController() { 
 | 
        configuration = new Configuration(); 
 | 
        configuration.setDefaultEncoding("utf-8"); 
 | 
    } 
 | 
  
 | 
    static String cashUnitLeft[] = {"元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万"}; 
 | 
    static String cashUnitRight[] = {"角", "分", "厘"}; 
 | 
    static String upperNumber[] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; 
 | 
  
 | 
    /** 
 | 
     * 查询报销申请列表 
 | 
     */ 
 | 
    @ApiOperation("查询报销申请列表") 
 | 
    //// @PreAuthorize("@ss.hasPermi('project:reimbursement:list')") 
 | 
    @Log(title = "查询报销申请列表", businessType = BusinessType.OTHER) 
 | 
    @GetMapping("/list") 
 | 
    public TableDataInfo list(ServiceReimbursement serviceReimbursement) { 
 | 
        SysUser user = SecurityUtils.getLoginUser().getUser(); 
 | 
        serviceReimbursement.setCreateBy(user.getUserName()); 
 | 
        serviceReimbursement.setUsername(user.getNickName()); 
 | 
        startPage(); 
 | 
        List<ServiceReimbursement> list = serviceReimbursementService.queryList(serviceReimbursement); 
 | 
        return getDataTable(list); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据日期查询报销申请列表 
 | 
     */ 
 | 
    @ApiOperation("根据日期查询报销申请列表") 
 | 
    @GetMapping("/listWithDate") 
 | 
    public TableDataInfo listWithDate(ServiceReimbursementDto serviceReimbursementdto) { 
 | 
        startPage(); 
 | 
        List<ServiceReimbursement> list = serviceReimbursementService.selectSearchList(serviceReimbursementdto); 
 | 
        return getDataTable(list); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据权限显示审核列表 
 | 
     */ 
 | 
    @ApiOperation("根据权限显示审核列表") 
 | 
    @Log(title = "根据权限显示审核列表", businessType = BusinessType.OTHER) 
 | 
    @GetMapping("/listbypower") 
 | 
    public TableDataInfo getListBypower(SpFinancialExpensesIn spFinancialExpensesIn) { 
 | 
        LoginUser loginUser = getLoginUser(); 
 | 
  
 | 
        String APPLICANT = spFinancialExpensesIn.getAPPLICANT(); 
 | 
        String APPLICATIONBEGTIME = spFinancialExpensesIn.getAPPLICATIONBEGTIME(); 
 | 
        String APPLICATIONENDTIME = spFinancialExpensesIn.getAPPLICATIONENDTIME(); 
 | 
        Integer CHECKFLAG = spFinancialExpensesIn.getCHECKFLAG(); 
 | 
        Integer APPLYTYPE = spFinancialExpensesIn.getAPPLYTYPE(); 
 | 
        Integer checkstatus = spFinancialExpensesIn.getCheckstatus(); 
 | 
        Integer pageNum = spFinancialExpensesIn.getPageNum(); 
 | 
        Integer pageSize = spFinancialExpensesIn.getPageSize(); 
 | 
        String donorname = spFinancialExpensesIn.getDonorname(); 
 | 
  
 | 
        if (pageNum == null) { 
 | 
            pageNum = 1; 
 | 
        } 
 | 
  
 | 
        if (pageSize == null) { 
 | 
            pageSize = 10; 
 | 
        } 
 | 
  
 | 
        if (APPLICANT == null) { 
 | 
            APPLICANT = ""; 
 | 
        } 
 | 
  
 | 
        if (APPLICATIONBEGTIME == null) { 
 | 
            APPLICATIONBEGTIME = ""; 
 | 
        } 
 | 
  
 | 
        if (APPLICATIONENDTIME == null) { 
 | 
            APPLICATIONENDTIME = ""; 
 | 
        } 
 | 
  
 | 
        //startPage(); 
 | 
        List<SpFinancialExpensesReimbursementOut> list = serviceReimbursementService.getListBypower(loginUser.getUsername(), 1, APPLICANT, APPLICATIONBEGTIME, APPLICATIONENDTIME, loginUser.getDeptId().toString(), CHECKFLAG, APPLYTYPE, checkstatus, donorname); 
 | 
        //根据经办人筛选 
 | 
        if (StringUtils.isNotBlank(spFinancialExpensesIn.getUsername())) { 
 | 
            list = list.stream().filter(reimbursementOut -> reimbursementOut.getUsername().contains(spFinancialExpensesIn.getUsername())).collect(Collectors.toList()); // 按name字段过滤 
 | 
        } 
 | 
        //根据金额筛选 
 | 
        if (spFinancialExpensesIn.getMoney() != null) { 
 | 
            list = list.stream().filter(reimbursementOut -> new BigDecimal(reimbursementOut.getAmountrequested()).compareTo(new BigDecimal(spFinancialExpensesIn.getMoney())) == 0).collect(Collectors.toList()); 
 | 
  
 | 
        } 
 | 
        //根据业务组筛选 
 | 
        if (StringUtils.isNotBlank(spFinancialExpensesIn.getDeptnos())) { 
 | 
            list = list.stream().filter(reimbursementOut -> reimbursementOut.getDeptmentno().contains(spFinancialExpensesIn.getDeptnos())).collect(Collectors.toList()); // 按name字段过滤 
 | 
        } 
 | 
        //根据创建时间排序 
 | 
        Collections.sort(list, new Comparator<SpFinancialExpensesReimbursementOut>() { 
 | 
            @Override 
 | 
            public int compare(SpFinancialExpensesReimbursementOut o1, SpFinancialExpensesReimbursementOut o2) { 
 | 
                return o1.getApplyTime().compareTo(o2.getApplyTime()); 
 | 
            } 
 | 
        }); 
 | 
        return getCustomDataTable(list, pageNum, pageSize); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 导出报销申请列表 
 | 
     */ 
 | 
    @ApiOperation("导出报销申请列表") 
 | 
    //// @PreAuthorize("@ss.hasPermi('project:reimbursement:export')") 
 | 
    @Log(title = "报销申请", businessType = BusinessType.EXPORT) 
 | 
    @GetMapping("/export") 
 | 
    public AjaxResult export(ServiceReimbursement serviceReimbursement) { 
 | 
        List<ServiceReimbursement> list = serviceReimbursementService.queryList(serviceReimbursement); 
 | 
        ExcelUtil<ServiceReimbursement> util = new ExcelUtil<ServiceReimbursement>(ServiceReimbursement.class); 
 | 
        return util.exportExcel(list, "报销申请数据"); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取报销申请详细信息 
 | 
     */ 
 | 
    @ApiOperation("获取报销申请详细信息") 
 | 
    //// @PreAuthorize("@ss.hasPermi('project:reimbursement:query')") 
 | 
    @GetMapping(value = "/{id}") 
 | 
    public AjaxResult getInfo(@PathVariable("id") Long id) { 
 | 
        return AjaxResult.success(serviceReimbursementService.getById(id)); 
 | 
    } 
 | 
  
 | 
    @GetMapping("/getMaxId") 
 | 
    public AjaxResult getMaxId() { 
 | 
        return AjaxResult.success(serviceReimbursementService.getMaxId()); 
 | 
    } 
 | 
  
 | 
    @GetMapping("/getRBDetailList/{id}") 
 | 
    public AjaxResult getRBDetailList(@PathVariable("id") Long id) { 
 | 
        return AjaxResult.success(serviceReimbursementService.getRBDetailList(id)); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 新增报销申请 
 | 
     */ 
 | 
    @ApiOperation("新增报销申请") 
 | 
    //// @PreAuthorize("@ss.hasPermi('project:reimbursement:add')") 
 | 
    @Log(title = "报销申请", businessType = BusinessType.INSERT) 
 | 
    @PostMapping("/add") 
 | 
    @RepeatSubmit 
 | 
    @Options(useGeneratedKeys = true, keyProperty = "id") 
 | 
    public AjaxResult add(@RequestBody ServiceReimbursement serviceReimbursement) { 
 | 
        if (!Objects.isNull(serviceReimbursement)) { 
 | 
            serviceReimbursement.setCreateTime(new Date()); 
 | 
            serviceReimbursement.setCheckstatus(serviceReimbursement.getCheckstatus() == null ? 1 : serviceReimbursement.getCheckstatus()); 
 | 
            serviceReimbursement.setUploadStates(0); 
 | 
            boolean b = serviceReimbursementService.save(serviceReimbursement); 
 | 
            Long id = serviceReimbursement.getId(); 
 | 
            return AjaxResult.success(id); 
 | 
        } 
 | 
        return error(); 
 | 
    } 
 | 
  
 | 
//    /** 
 | 
//     * 差旅费上报 
 | 
//     */ 
 | 
//    @ApiOperation("差旅费上报") 
 | 
//    @Log(title = "差旅费上报", businessType = BusinessType.OTHER) 
 | 
//    @PostMapping("/test") 
 | 
//    public AjaxResult test(@RequestBody CheckFundVO checkFundVO) { 
 | 
//        mergeFilesToPDFUtils.generatePdf(checkFundVO.getFileNames(), checkFundVO.getOutputFile()); 
 | 
//        return AjaxResult.success(200); 
 | 
//    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 差旅费上报 
 | 
     */ 
 | 
    @ApiOperation("差旅费上报") 
 | 
    @Log(title = "差旅费上报", businessType = BusinessType.OTHER) 
 | 
    @PostMapping("/travelexpensereport") 
 | 
    public AjaxResult travelexpensereport(@RequestBody CheckFundVO checkFundVO) { 
 | 
        ServiceReimbursement serviceReimbursement = serviceReimbursementService.getById(checkFundVO.getFundid()); 
 | 
        serviceReimbursement.setApplyTime(new Date()); 
 | 
        Long flowLavel = null; 
 | 
  
 | 
        LoginUser loginUser = getLoginUser(); 
 | 
        SysUser user = loginUser.getUser(); 
 | 
  
 | 
        //查询必审人 
 | 
        ServiceFundflowrule serviceFundflowrule = new ServiceFundflowrule(); 
 | 
        serviceFundflowrule.setApplytype("0"); 
 | 
        serviceFundflowrule.setMustAudite(1); 
 | 
        serviceFundflowrule.setDel_flag(0); 
 | 
        List<ServiceFundflowrule> serviceFundflowrules = serviceFundflowruleService.queryList(serviceFundflowrule); 
 | 
        log.info("reimbursement必审人的等级为:{}", serviceFundflowrules.get(0).getFlowlevel()); 
 | 
  
 | 
        //如果等于100,说明已经走到医院财务那边了;财务那边取数据是从分享表取,所以,这里直接往分享表里添加数据就行了; 
 | 
        if (!Objects.isNull(serviceReimbursement) && serviceReimbursement.getBackflowlevel() != null) { 
 | 
            if (serviceReimbursement.getBackflowlevel() == 100 || serviceReimbursement.getBackflowlevel() == 199) { 
 | 
                //将退回阶段设置成100 
 | 
                serviceReimbursement.setBackflowlevel(100L); 
 | 
                //退回再提交,需要再到出纳那里 
 | 
                serviceReimbursement.setFlowlevel(Long.valueOf(serviceFundflowrules.get(0).getFlowlevel() - 1)); 
 | 
                serviceReimbursement.setRecordstatus(2); 
 | 
                serviceReimbursementService.updateById(serviceReimbursement); 
 | 
  
 | 
                //将修改的上报数据 新增一条 
 | 
//                serviceReimbursementService.addSharedData(checkFundVO.getFundid()); 
 | 
  
 | 
                return success(); 
 | 
            } else if (serviceReimbursement.getBackflowlevel() >= Long.valueOf(serviceFundflowrules.get(0).getFlowlevel())) { 
 | 
                //必审人领导退回的,也需要走必审人那里 
 | 
                serviceReimbursement.setFlowlevel(Long.valueOf(serviceFundflowrules.get(0).getFlowlevel() - 1)); 
 | 
                serviceReimbursement.setRecordstatus(2); 
 | 
                serviceReimbursementService.updateById(serviceReimbursement); 
 | 
                return success(); 
 | 
            } 
 | 
        } 
 | 
        if (serviceReimbursement != null) { 
 | 
            Integer TotalLevel = 0; 
 | 
            List<Integer> postids = postService.selectPostListByUserId(loginUser.getUserId()); 
 | 
  
 | 
            if (!postids.contains(2)) { 
 | 
                serviceReimbursement.setRecordstatus(2); 
 | 
                if (serviceReimbursement.getBackflowlevel() != null) { 
 | 
                    serviceReimbursement.setFlowlevel(serviceReimbursement.getBackflowlevel()); 
 | 
                } else { 
 | 
                    serviceReimbursement.setBackflowlevel(Long.valueOf(serviceFundflowrules.get(0).getFlowlevel() - 1)); 
 | 
                    serviceReimbursement.setFlowlevel(Long.valueOf(serviceFundflowrules.get(0).getFlowlevel() - 1)); 
 | 
                } 
 | 
            } else { 
 | 
                serviceReimbursement.setRecordstatus(0); 
 | 
                if (serviceReimbursement.getBackflowlevel() != null) { 
 | 
                    serviceReimbursement.setFlowlevel(serviceReimbursement.getBackflowlevel()); 
 | 
                } else { 
 | 
                    serviceReimbursement.setFlowlevel(0L); 
 | 
                    serviceReimbursement.setBackflowlevel(0L); 
 | 
                } 
 | 
            } 
 | 
  
 | 
            if (!postids.contains(2) && (serviceReimbursement.getBackflowlevel() == null || serviceReimbursement.getBackflowlevel() == 0)) { 
 | 
                ServiceFundflow serviceFundflow = new ServiceFundflow(); 
 | 
                serviceFundflow.setFundid(serviceReimbursement.getId()); 
 | 
                serviceFundflow.setCheckuserno(user.getUserName()); 
 | 
                serviceFundflow.setCheckusername(user.getNickName()); 
 | 
                serviceFundflow.setFundtype(1); 
 | 
                serviceFundflow.setApplytype("0"); 
 | 
                serviceFundflow.setFlowconclusion(1); 
 | 
                serviceFundflow.setFlowcontent("非专职人员直接进入二级审核"); 
 | 
  
 | 
                serviceFundflow.setFlowlevel(serviceFundflowrules.get(0).getFlowlevel() - 1); 
 | 
                serviceFundflowService.save(serviceFundflow); 
 | 
  
 | 
  
 | 
                SysUser sysUser = null; 
 | 
                if (serviceReimbursement.getFlowlevel() == 0L) { 
 | 
                    //组长信息 
 | 
                    SysUser su = new SysUser(); 
 | 
                    su.setNickName(serviceReimbursement.getManagername()); 
 | 
                    List<SysUser> sysUserList = sysUserService.selectUserList(su); 
 | 
                    if (sysUserList.size() > 0) { 
 | 
                        sysUser = sysUserList.get(0); 
 | 
                    } 
 | 
                } else if (serviceReimbursement.getFlowlevel() == 1L) { 
 | 
                    //陈慕华信息 
 | 
                    sysUser = sysUserService.selectUserByUserName("047"); 
 | 
                } 
 | 
                ConcurrentHashMap map = new ConcurrentHashMap(); 
 | 
                ArrayList<ConcurrentHashMap<String, Object>> contentList = new ArrayList<>(); 
 | 
                map.put("提交人:", loginUser.getUser().getUserName()); 
 | 
                map.put("提交时间:", new Date()); 
 | 
                map.put("内容:", serviceReimbursement.getReason()); 
 | 
                contentList.add(map); 
 | 
                DingTalkReqVo dingTalkReqVo = new DingTalkReqVo(); 
 | 
                dingTalkReqVo.setTitle("差旅审批信息"); 
 | 
                dingTalkReqVo.setNumber(sysUser != null ? sysUser.getPhonenumber() : ""); 
 | 
                dingTalkReqVo.setContents(contentList); 
 | 
                dingTalkService.sendNotification(dingTalkReqVo); 
 | 
            } 
 | 
  
 | 
            serviceReimbursementService.updateById(serviceReimbursement); 
 | 
  
 | 
            return AjaxResult.success(); 
 | 
        } else { 
 | 
            return AjaxResult.error(HttpStatus.NO_CONTENT, "费用编号不正确"); 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 审核费用 
 | 
     */ 
 | 
    @ApiOperation("审核费用") 
 | 
    @Log(title = "审核费用", businessType = BusinessType.OTHER) 
 | 
    @PostMapping("/checkfund") 
 | 
    public AjaxResult checkFund(@RequestBody CheckFundVO checkFundVO) { 
 | 
        log.info("审核费用的入参 : {}", checkFundVO); 
 | 
        Map<String, String> map = serviceReimbursementService.checkFund(getLoginUser(), checkFundVO); 
 | 
        Set<String> keys = map.keySet(); 
 | 
        for (String s : keys) { 
 | 
            if (!s.equals("200")) return AjaxResult.error(map.get(s)); 
 | 
        } 
 | 
        return AjaxResult.success(); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 修改报销申请 
 | 
     */ 
 | 
    @ApiOperation("修改报销申请") 
 | 
    //// @PreAuthorize("@ss.hasPermi('project:reimbursement:edit')") 
 | 
    @Log(title = "报销申请", businessType = BusinessType.UPDATE) 
 | 
    @PostMapping("/reimbursementEdit") 
 | 
    @RepeatSubmit 
 | 
    public AjaxResult edit(@RequestBody ServiceReimbursement serviceReimbursement) { 
 | 
        boolean b = serviceReimbursementService.updateById(serviceReimbursement); 
 | 
//        if (b) { 
 | 
//            addReiSharedDatd(serviceReimbursement, 2); 
 | 
//        } 
 | 
        return toAjax(b); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 修改报销申请 
 | 
     */ 
 | 
    @ApiOperation("修改报销申请") 
 | 
    //// @PreAuthorize("@ss.hasPermi('project:reimbursement:edit')") 
 | 
    @Log(title = "审核费用", businessType = BusinessType.OTHER) 
 | 
    @PostMapping("/editMoney") 
 | 
    public AjaxResult editMoney(@RequestBody List<ReimbursementService> serviceReimbursement) { 
 | 
        boolean b = serviceReimbursementService.updateById(null); 
 | 
//        if (b) { 
 | 
//            addReiSharedDatd(null, 2); 
 | 
//        } 
 | 
        return toAjax(b); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 删除报销申请 
 | 
     */ 
 | 
    @ApiOperation("删除报销申请") 
 | 
    //// @PreAuthorize("@ss.hasPermi('project:reimbursement:remove')") 
 | 
    @Log(title = "报销申请") 
 | 
    @GetMapping("/remove/{ids}") 
 | 
    public AjaxResult remove(@PathVariable Long[] ids) { 
 | 
        return toAjax(serviceReimbursementService.removeByIds(Arrays.asList(ids))); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 下载工作人员差旅费报销单 
 | 
     */ 
 | 
    @ApiOperation("差旅费报销申请单") 
 | 
    @GetMapping(value = "/download/{id}") 
 | 
    public Map downloadInfo(@PathVariable("id") Long id) throws IOException { 
 | 
        Map dataMap = new HashMap(); 
 | 
        getData(dataMap, id); 
 | 
        String filePath = getClass().getResource("/template/").getPath(); 
 | 
        log.info("下载地址是啥???{}", filePath); 
 | 
        System.out.println(filePath); 
 | 
        //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库教程装载, 
 | 
        configuration.setDirectoryForTemplateLoading(new File(filePath)); 
 | 
  
 | 
        Template t = null; 
 | 
        try { 
 | 
            //捐献表.ftl为要装载的模板 
 | 
            t = configuration.getTemplate("差旅费报销申请单.ftl"); 
 | 
        } catch (IOException e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        String newTime = String.valueOf(Calendar.getInstance().getTimeInMillis()); 
 | 
        String name = "差旅费报销申请单_" + dataMap.get("JSR") + "_" + newTime; 
 | 
  
 | 
        //输出文档路径及名称 
 | 
        File outFile = new File(RuoYiConfig.getProfile() + "/download/wordtemplate/" + name + ".doc"); 
 | 
  
 | 
        //创建文件夹 
 | 
        File folderPath = new File(RuoYiConfig.getProfile() + "/download/wordtemplate"); 
 | 
        if (!folderPath.exists()) { 
 | 
            boolean success = folderPath.mkdirs(); 
 | 
            if (success) { 
 | 
                System.out.println("目录创建成功"); 
 | 
            } else { 
 | 
                System.out.println("目录创建失败"); 
 | 
            } 
 | 
        } else { 
 | 
            System.out.println("目录已存在"); 
 | 
        } 
 | 
  
 | 
        Writer out = null; 
 | 
  
 | 
        try { 
 | 
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8")); 
 | 
  
 | 
        } catch (FileNotFoundException e1) { 
 | 
            e1.printStackTrace(); 
 | 
        } 
 | 
        try { 
 | 
            t.process(dataMap, out); 
 | 
        } catch (TemplateException e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        Map<String, Object> map = new HashMap<>(); 
 | 
        map.put("downloadUrl", "/profile/download/wordtemplate/" + name + ".doc"); 
 | 
        map.put("downloadName", name + ".doc"); 
 | 
        return map; 
 | 
    } 
 | 
  
 | 
    private void getData(Map dataMap, Long id) { 
 | 
  
 | 
        //ServiceReimbursement serviceReimbursement = serviceReimbursementService.getById(id); 
 | 
        ServiceReimbursement serviceReimbursement = null; 
 | 
        ServiceReimbursementEo serviceReimbursementEo = new ServiceReimbursementEo(); 
 | 
        serviceReimbursementEo.setId(id); 
 | 
        List<ServiceReimbursementEo> rdInfoByItem = serviceReimbursementService.getRDInfoByItem(serviceReimbursementEo); 
 | 
        log.info("rdInfoByItem是否为空 :{}", CollectionUtils.isEmpty(rdInfoByItem) ? null : rdInfoByItem.size()); 
 | 
        for (int i = 0; i < rdInfoByItem.size(); i++) { 
 | 
            ServiceReimbursementEo serviceReimbursementEo1 = rdInfoByItem.get(i); 
 | 
            String codeByInfo = PersonType.getCodeByInfo(serviceReimbursementEo1.getPersontype()); 
 | 
            serviceReimbursementEo1.setPersontype(codeByInfo); 
 | 
        } 
 | 
        //获取报销支付信息 
 | 
        List<ServiceReimbursementpayee> reimbursementpayeeInfo = reimbursementpayeeService.getReimbursementpayeeInfo(serviceReimbursementEo); 
 | 
        log.info("reimbursementpayeeInfo是否为空 :{}", CollectionUtils.isEmpty(reimbursementpayeeInfo) ? null : reimbursementpayeeInfo.size()); 
 | 
        Map<String, List<ServiceReimbursementEo>> listMap = rdInfoByItem.stream().collect(Collectors.groupingBy(ServiceReimbursementEo::getPersontype)); 
 | 
        List<Map<String, BigDecimal>> list = new ArrayList<>(); 
 | 
        StringBuffer FYXM1 = new StringBuffer(); 
 | 
        StringBuffer FYXM2 = new StringBuffer(); 
 | 
        StringBuffer FYXM3 = new StringBuffer(); 
 | 
        int flag = 0; 
 | 
        String key1 = null; 
 | 
        BigDecimal allMoney = new BigDecimal(0.00); 
 | 
        BigDecimal otherMoneyall = new BigDecimal(0.00); 
 | 
        for (String key : listMap.keySet()) { 
 | 
            Map<String, BigDecimal> map = new HashMap<>(); 
 | 
            List<ServiceReimbursementEo> values = listMap.get(key); 
 | 
            BigDecimal otherMoney = new BigDecimal(0.00); 
 | 
            BigDecimal keyOneMoney = new BigDecimal(0.00); 
 | 
            BigDecimal keyTwoMoney = new BigDecimal(0.00); 
 | 
            for (ServiceReimbursementEo serviceReimbursementEo1 : values) { 
 | 
                otherMoney = otherMoney.add(serviceReimbursementEo1.getTrafficexpense()).add(serviceReimbursementEo1.getHotelexpense()).add(serviceReimbursementEo1.getCityfee()).add(serviceReimbursementEo1.getFoodexpenses()).add(serviceReimbursementEo1.getFoodallowance()).add(serviceReimbursementEo1.getOtherexpense()).add(serviceReimbursementEo1.getOtherfeeamount()); 
 | 
            } 
 | 
            map.put(key, otherMoney); 
 | 
            list.add(map); 
 | 
            // 不为专家或家属,key有可能是数字,有可能是汉字 
 | 
            Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$"); 
 | 
            boolean matches = pattern.matcher(key).matches(); 
 | 
            if (matches) { 
 | 
                if (!key.equals("3") && !key.equals("4")) { 
 | 
                    //将上一次的清空 
 | 
                    FYXM1.delete(0, FYXM1.length()); 
 | 
                    //再新增 
 | 
                    otherMoneyall = otherMoneyall.add(otherMoney); 
 | 
                    FYXM1.append("OP0 工作人员报销差旅费" + ":" + otherMoneyall + " "); 
 | 
                } else { 
 | 
                    if (flag == 0) { 
 | 
                        key1 = key; 
 | 
                        flag = 1; 
 | 
                    } 
 | 
                    if (key1 == key) { 
 | 
                        if (key.equals("3")) { 
 | 
//                        FYXM2.append(PersonType.getInfoByCode(key) + ":" + otherMoney); 
 | 
                            FYXM2.append("专家报销差旅费 :" + otherMoney); 
 | 
                            allMoney = allMoney.add(otherMoney); 
 | 
                        } else { 
 | 
                            FYXM2.append("家属报销差旅费及误工费用 : " + otherMoney); 
 | 
                            allMoney = allMoney.add(otherMoney); 
 | 
                        } 
 | 
                    } else { 
 | 
                        if (key.equals("3")) { 
 | 
//                        FYXM2.append(PersonType.getInfoByCode(key) + ":" + otherMoney); 
 | 
                            FYXM3.append("专家报销差旅费 :" + otherMoney); 
 | 
                            allMoney = allMoney.add(otherMoney); 
 | 
                        } else { 
 | 
                            FYXM3.append("家属报销差旅费及误工费用 : " + otherMoney); 
 | 
                            allMoney = allMoney.add(otherMoney); 
 | 
                        } 
 | 
                    } 
 | 
                } 
 | 
            } else { 
 | 
                if (!key.equals("专家") && !key.equals("家属")) { 
 | 
                    //将上一次的清空 
 | 
                    FYXM1.delete(0, FYXM1.length()); 
 | 
                    //再新增 
 | 
                    otherMoneyall = otherMoneyall.add(otherMoney); 
 | 
                    FYXM1.append("OP0 工作人员报销差旅费" + ":" + otherMoneyall + " "); 
 | 
                } else { 
 | 
                    if (flag == 0) { 
 | 
                        key1 = key; 
 | 
                        flag = 1; 
 | 
                    } 
 | 
                    if (key1 == key) { 
 | 
                        if (key.equals("专家")) { 
 | 
//                        FYXM2.append(PersonType.getInfoByCode(key) + ":" + otherMoney); 
 | 
                            FYXM2.append("专家报销差旅费 :" + otherMoney); 
 | 
                            allMoney = allMoney.add(otherMoney); 
 | 
                        } else { 
 | 
                            FYXM2.append("家属报销差旅费及误工费用 : " + otherMoney); 
 | 
                            allMoney = allMoney.add(otherMoney); 
 | 
                        } 
 | 
                    } else { 
 | 
                        if (key.equals("专家")) { 
 | 
//                        FYXM2.append(PersonType.getInfoByCode(key) + ":" + otherMoney); 
 | 
                            FYXM3.append("专家报销差旅费 :" + otherMoney); 
 | 
                            allMoney = allMoney.add(otherMoney); 
 | 
                        } else { 
 | 
                            FYXM3.append("家属报销差旅费及误工费用 : " + otherMoney); 
 | 
                            allMoney = allMoney.add(otherMoney); 
 | 
                        } 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        allMoney = allMoney.add(otherMoneyall); 
 | 
        if (FYXM1.length() == 0) { 
 | 
            if (FYXM2.length() != 0 && FYXM3.length() != 0) { 
 | 
                FYXM1.append(FYXM3); 
 | 
                FYXM3.setLength(0); 
 | 
            } else if (FYXM2.length() != 0 && FYXM3.length() == 0) { 
 | 
                FYXM1.append(FYXM2); 
 | 
                FYXM2.setLength(0); 
 | 
            } 
 | 
        } else if (FYXM2.length() == 0) { 
 | 
            if (FYXM3.length() != 0) { 
 | 
                FYXM2.append(FYXM3); 
 | 
                FYXM3.setLength(0); 
 | 
            } 
 | 
        } 
 | 
  
 | 
  
 | 
        if (rdInfoByItem == null || rdInfoByItem.size() == 0) { 
 | 
            throw new ServiceException("下载失败,用户信息出错", HttpStatus.NO_CONTENT); 
 | 
        } 
 | 
  
 | 
        Date dt = rdInfoByItem.get(0).getApplyTime(); 
 | 
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
 | 
        String date = formatter.format(dt); 
 | 
        String time = date.substring(0, 10); 
 | 
  
 | 
        dataMap.put("ZB", rdInfoByItem.get(0).getDeptmentname() == null ? "" : rdInfoByItem.get(0).getDeptmentname()); 
 | 
        dataMap.put("XZBH", rdInfoByItem.get(0).getBh() == null ? "" : rdInfoByItem.get(0).getBh()); 
 | 
        dataMap.put("TBYYMMDD", time); 
 | 
        dataMap.put("BXDFJ", rdInfoByItem.get(0).getAttachcount() == null ? "   " : "" + rdInfoByItem.get(0).getAttachcount()); 
 | 
        dataMap.put("JXZXM", rdInfoByItem.get(0).getDonorname() == null ? "" : rdInfoByItem.get(0).getDonorname()); 
 | 
        dataMap.put("JSR", rdInfoByItem.get(0).getUsername() == null ? "" : rdInfoByItem.get(0).getUsername()); 
 | 
        if (FYXM1.length() != 0) { 
 | 
            dataMap.put("FYXM1", FYXM1.toString() + "元  "); 
 | 
        } else { 
 | 
            dataMap.put("FYXM1", ""); 
 | 
        } 
 | 
        if (FYXM2.length() != 0) { 
 | 
            dataMap.put("FYXM2", FYXM2.toString() + "元  "); 
 | 
        } else { 
 | 
            dataMap.put("FYXM2", ""); 
 | 
        } 
 | 
        if (FYXM3.length() != 0) { 
 | 
            dataMap.put("FYXM3", FYXM3.toString() + "元  "); 
 | 
        } else { 
 | 
            dataMap.put("FYXM3", ""); 
 | 
        } 
 | 
        dataMap.put("JEXS", allMoney); 
 | 
        dataMap.put("JEDS", convert(allMoney.doubleValue()) + "整"); 
 | 
  
 | 
        String remark = ""; 
 | 
        for (ServiceReimbursementpayee serviceReimbursementpayee : reimbursementpayeeInfo) { 
 | 
            remark += "<w:br/> " + serviceReimbursementpayee.getPersonname() + " " + serviceReimbursementpayee.getAmount(); 
 | 
            remark += " 元; "; 
 | 
            if (!StringUtils.isEmpty(serviceReimbursementpayee.getBankname())) { 
 | 
                remark += serviceReimbursementpayee.getBankname() + " ( " + serviceReimbursementpayee.getBankcardno() + ")"; 
 | 
            } 
 | 
            remark += " 备注: " + serviceReimbursementpayee.getPersontype(); 
 | 
            if (!StringUtils.isEmpty(serviceReimbursementpayee.getRemark())) { 
 | 
                remark += serviceReimbursementpayee.getRemark(); 
 | 
            } 
 | 
        } 
 | 
        dataMap.put("BXBZ", remark); 
 | 
  
 | 
        dataMap.put("ZXFZR", StringUtils.isEmpty(rdInfoByItem.get(0).getOpochecker()) ? "" : rdInfoByItem.get(0).getOpochecker()); 
 | 
// 
 | 
        dataMap.put("CWFYZ", StringUtils.isEmpty(rdInfoByItem.get(0).getFinvicepresident()) ? "" : rdInfoByItem.get(0).getFinvicepresident()); 
 | 
        dataMap.put("YWFYZ", StringUtils.isEmpty(rdInfoByItem.get(0).getBusvicepresident()) ? "" : rdInfoByItem.get(0).getBusvicepresident()); 
 | 
        dataMap.put("BGSZR", StringUtils.isEmpty(rdInfoByItem.get(0).getOfficedirector()) ? "" : rdInfoByItem.get(0).getOfficedirector()); 
 | 
        dataMap.put("CWBZR", StringUtils.isEmpty(rdInfoByItem.get(0).getFinancedirector()) ? "" : rdInfoByItem.get(0).getFinancedirector()); 
 | 
        dataMap.put("CWSH", StringUtils.isEmpty(rdInfoByItem.get(0).getFinancechecher()) ? "" : rdInfoByItem.get(0).getFinancechecher()); 
 | 
  
 | 
  
 | 
        dataMap.put("YYMMDD", time); 
 | 
  
 | 
        dataMap.put("FJ", rdInfoByItem.get(0).getAttachcount() == null ? "   " : "" + rdInfoByItem.get(0).getAttachcount()); 
 | 
        dataMap.put("FP", rdInfoByItem.get(0).getInvoicecount() == null ? "   " : "" + rdInfoByItem.get(0).getInvoicecount()); 
 | 
        dataMap.put("XM", rdInfoByItem.get(0).getTravelers() == null ? "" : rdInfoByItem.get(0).getTravelers()); 
 | 
        dataMap.put("BXR", rdInfoByItem.get(0).getUsername() == null ? "" : rdInfoByItem.get(0).getUsername()); 
 | 
        dataMap.put("QYZZ", rdInfoByItem.get(0).getManagername() == null ? "" : rdInfoByItem.get(0).getManagername()); 
 | 
        dataMap.put("CCSY", rdInfoByItem.get(0).getReason() == null ? "" : rdInfoByItem.get(0).getReason()); 
 | 
  
 | 
  
 | 
        List<ServiceReimbursementdetail> rd = serviceReimbursementdetailService.getAllDetailsByRBID(id); 
 | 
        if (rd == null) { 
 | 
            throw new ServiceException("下载失败,没有对应信息", HttpStatus.NO_CONTENT); 
 | 
        } 
 | 
        List<Map<String, Object>> newsList = new ArrayList<Map<String, Object>>(); 
 | 
        int days = 0; 
 | 
        BigDecimal te = BigDecimal.ZERO; 
 | 
        BigDecimal cf = BigDecimal.ZERO; 
 | 
        BigDecimal he = BigDecimal.ZERO; 
 | 
        BigDecimal oe = BigDecimal.ZERO; 
 | 
        BigDecimal fe = BigDecimal.ZERO; 
 | 
        BigDecimal fa = BigDecimal.ZERO; 
 | 
        BigDecimal hj = BigDecimal.ZERO; 
 | 
        BigDecimal qt = BigDecimal.ZERO; 
 | 
        for (ServiceReimbursementdetail s : rd) { 
 | 
            Map<String, Object> map = new HashMap<String, Object>(); 
 | 
  
 | 
            Date st = s.getStarttime(); 
 | 
            SimpleDateFormat formatter_st = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
 | 
            String date_st = formatter_st.format(st); 
 | 
            String year_st = date_st.substring(0, 4); 
 | 
            String month_st = date_st.substring(5, 7); 
 | 
            String day_st = date_st.substring(8, 10); 
 | 
  
 | 
            map.put("DY", year_st == null ? "" : year_st); 
 | 
            map.put("DM", month_st == null ? "" : month_st); 
 | 
            map.put("DDD", day_st == null ? "" : day_st); 
 | 
            map.put("DA", s.getDeparture() == null ? "" : s.getDeparture()); 
 | 
  
 | 
            Date et = s.getEndtime(); 
 | 
            String year_et = null; 
 | 
            String month_et = null; 
 | 
            String day_et = null; 
 | 
            if (et != null) { 
 | 
                SimpleDateFormat formatter_et = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
 | 
                String date_et = formatter_et.format(et); 
 | 
                year_et = date_et.substring(0, 4); 
 | 
                month_et = date_et.substring(5, 7); 
 | 
                day_et = date_et.substring(8, 10); 
 | 
            } 
 | 
  
 | 
            map.put("AY", year_et == null ? "" : year_et); 
 | 
            map.put("AM", month_et == null ? "" : month_et); 
 | 
            map.put("AD", day_et == null ? "" : day_et); 
 | 
            map.put("AA", s.getDestination() == null ? "" : s.getDestination()); 
 | 
  
 | 
            map.put("ND", s.getDays() == 0 ? "" : s.getDays() + ""); 
 | 
            days += s.getDays(); 
 | 
            map.put("JT", s.getTraffictype() == null ? "" : s.getTraffictype()); 
 | 
            map.put("QTFSM", s.getOtherfeedesc() == null ? "" : s.getOtherfeedesc()); 
 | 
            map.put("JTF", s.getTrafficexpense().equals(BigDecimal.ZERO) ? "" : String.format("%.2f", s.getTrafficexpense()).toString() + ""); 
 | 
            te = te.add(s.getTrafficexpense()); 
 | 
            map.put("SNJT", s.getCityfee().equals(BigDecimal.ZERO) ? "" : String.format("%.2f", s.getCityfee()).toString() + ""); 
 | 
            cf = cf.add(s.getCityfee()); 
 | 
            map.put("ZSF", s.getHotelexpense().equals(BigDecimal.ZERO) ? "" : String.format("%.2f", s.getHotelexpense()).toString() + ""); 
 | 
            he = he.add(s.getHotelexpense()); 
 | 
            map.put("ZF", s.getOtherexpense().equals(BigDecimal.ZERO) ? "" : String.format("%.2f", s.getOtherexpense()).toString() + ""); 
 | 
            oe = oe.add(s.getOtherexpense()); 
 | 
            map.put("HSBX", s.getFoodexpenses().equals(BigDecimal.ZERO) ? "" : String.format("%.2f", s.getFoodexpenses()).toString() + ""); 
 | 
            fe = fe.add(s.getFoodexpenses()); 
 | 
            map.put("HSBZ", s.getFoodallowance().equals(BigDecimal.ZERO) ? "" : String.format("%.2f", s.getFoodallowance()).toString() + ""); 
 | 
            fa = fa.add(s.getFoodallowance()); 
 | 
            map.put("QTF", s.getOtherfeeamount().equals(BigDecimal.ZERO) ? "" : String.format("%.2f", s.getOtherfeeamount()).toString() + ""); 
 | 
            qt = qt.add(s.getOtherfeeamount()); 
 | 
            map.put("HJ", String.format("%.2f", s.getTrafficexpense().add(s.getCityfee()).add(s.getHotelexpense()).add(s.getOtherexpense()).add(s.getFoodexpenses()).add(s.getFoodallowance()).add(s.getOtherfeeamount())).toString() + ""); 
 | 
            hj = hj.add(s.getTrafficexpense().add(s.getCityfee()).add(s.getHotelexpense()).add(s.getOtherexpense()).add(s.getFoodexpenses()).add(s.getFoodallowance()).add(s.getOtherfeeamount())); 
 | 
            //hj = Math.round(hj * 100) * 0.01d; 
 | 
//            DecimalFormat df = new DecimalFormat("0.00"); 
 | 
  
 | 
            //  hj = new Double(df.format(hj).toString()); 
 | 
            newsList.add(map); 
 | 
        } 
 | 
  
 | 
        dataMap.put("list", newsList); 
 | 
  
 | 
        dataMap.put("TND", "" + days); 
 | 
        dataMap.put("TJT", ""); 
 | 
        dataMap.put("TJTF", "" + String.format("%.2f", te).toString() + ""); 
 | 
        dataMap.put("TSNJT", "" + String.format("%.2f", cf).toString() + ""); 
 | 
        dataMap.put("TZSF", "" + String.format("%.2f", he).toString() + ""); 
 | 
        dataMap.put("TZF", "" + String.format("%.2f", oe).toString() + ""); 
 | 
        dataMap.put("THSBX", "" + String.format("%.2f", fe).toString() + ""); 
 | 
        dataMap.put("THSBZ", "" + String.format("%.2f", fa).toString() + ""); 
 | 
        dataMap.put("TQTF", "" + String.format("%.2f", qt).toString() + ""); 
 | 
        dataMap.put("THJ", "" + String.format("%.2f", hj).toString() + ""); 
 | 
  
 | 
        dataMap.put("DS", convert(hj.doubleValue()) + "整"); 
 | 
        //dataMap.put("DS", "整"); 
 | 
        dataMap.put("XS", String.format("%.2f", hj).toString() + ""); 
 | 
  
 | 
        dataMap.put("R", StringUtils.isEmpty(rdInfoByItem.get(0).getCosttypename()) ? "" : rdInfoByItem.get(0).getCosttypename()); 
 | 
  
 | 
    } 
 | 
  
 | 
    public static String convert(Double money) { 
 | 
        String smoney = money.toString(); 
 | 
        try { 
 | 
            if (smoney.indexOf(".") != -1) {                        //把数值分为整数型和带小数的数值分开处理。 
 | 
                String left = smoney.substring(0, smoney.indexOf(".")); 
 | 
                String right = smoney.substring(smoney.indexOf(".") + 1); 
 | 
                String result = convertLeft(left) + convertRight(right); 
 | 
  
 | 
                return result; 
 | 
            } else { 
 | 
                return convertLeft(smoney); 
 | 
            } 
 | 
        } catch (IllegalArgumentException e) { 
 | 
            System.out.println(e.getMessage()); 
 | 
            System.out.println("请输入转换范围内现金"); 
 | 
            return null; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private static String convertLeft(String left) {                //处理整数部分。 
 | 
  
 | 
        int length = left.length();                                    //根据单位'亿','万','元',把整数部分分为3种情况处理。 
 | 
  
 | 
        if (length <= 4) {                                            //金额在千元以内。 
 | 
            if (length == 1 && Integer.valueOf(left) == 0)            //金额为'0'元时的特殊情况。 
 | 
                return "零元"; 
 | 
            return convertPart(left, length); 
 | 
        } else if (length <= 8) {                                    //金额在千万元以内。 
 | 
  
 | 
            String part1 = left.substring(0, length - 4); 
 | 
            String part2 = left.substring(length - 4, length); 
 | 
  
 | 
            String result1 = convertPart(part1, length); 
 | 
            String result2 = convertPart(part2, 4); 
 | 
  
 | 
            return result1 + result2; 
 | 
        } else if (length <= 12) {                                    //金额在千亿元以内。 
 | 
  
 | 
            String part1 = left.substring(0, length - 8);            //截取单位为'亿'部分数值。 
 | 
            String part2 = left.substring(length - 8, length - 4);    //截取单位为'万'部分数值。 
 | 
            String part3 = left.substring(length - 4, length);        //截取单位为'元'部分数值。 
 | 
  
 | 
            String result1 = convertPart(part1, length);            //转换单位为'亿'部分数值。 
 | 
            String result2 = convertPart(part2, 8);                    //转换单位为'万'部分数值。 
 | 
            String result3 = convertPart(part3, 4);                    //转换单位为'元'部分数值。 
 | 
  
 | 
            String result = result1 + result2 + result3; 
 | 
            return result; 
 | 
        } else { 
 | 
            throw new IllegalArgumentException("超出转换数值范围!"); 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    private static String convertRight(String right) {                //处理小数部分。 
 | 
  
 | 
        String result = ""; 
 | 
        String number = ""; 
 | 
        String unit = ""; 
 | 
  
 | 
        int length = right.length(); 
 | 
  
 | 
        for (int i = 0; i < length; i++) { 
 | 
            String detail = right.substring(i, i + 1); 
 | 
            int value = Integer.valueOf(detail); 
 | 
            number = upperNumber[value]; 
 | 
            unit = cashUnitRight[i]; 
 | 
            result = result.concat(number).concat(unit); 
 | 
        } 
 | 
  
 | 
        result = result.replaceAll("零角", "").replaceAll("零分", "").replaceAll("零厘", ""); 
 | 
        return result; 
 | 
    } 
 | 
  
 | 
    private static String convertPart(String part, int position) { 
 | 
  
 | 
        String result = ""; 
 | 
        String number = ""; 
 | 
        String unit = ""; 
 | 
  
 | 
        if (part.equals("0000") && position == 8)                            //用于排除单位为'万'时,四位数值均为'0'的情况。 
 | 
            return ""; 
 | 
        for (int i = 0; i < part.length(); i++) { 
 | 
            int value = Integer.valueOf(String.valueOf(part.charAt(i))); 
 | 
            number = upperNumber[value]; 
 | 
            unit = cashUnitLeft[position - 1 - i]; 
 | 
            result = result.concat(number).concat(unit); 
 | 
        } 
 | 
  
 | 
        result = result.replaceAll("零仟", "零").replaceAll("零佰", "零")        //把单位'亿','万','元'放到最后替换。 
 | 
                .replaceAll("零拾", "零").replaceAll("零零", "零").replaceAll("零零", "零").replaceAll("零亿", "亿").replaceAll("零万", "万").replaceAll("零元", "元"); 
 | 
        //        result = result.replaceAll("零仟", "零"); 
 | 
        //        result = result.replaceAll("零佰", "零"); 
 | 
        //        result = result.replaceAll("零拾", "零"); 
 | 
        //        result = result.replaceAll("零零", "零"); 
 | 
        //        result = result.replaceAll("零零", "零"); 
 | 
        //        result = result.replaceAll("零亿", "亿"); 
 | 
        //        result = result.replaceAll("零万", "万"); 
 | 
        //        result = result.replaceAll("零元", "元"); 
 | 
  
 | 
        System.out.println(result); 
 | 
        return result; 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |