package cn.timer.api.controller.htzz; import java.io.*; import java.nio.charset.StandardCharsets; import java.util.*; import cn.timer.api.utils.aliyun.OSSUtil; import com.google.common.base.Strings; import com.google.common.collect.Maps; import io.swagger.models.auth.In; import org.bouncycastle.util.encoders.UrlBase64Encoder; import org.eclipse.jetty.util.StringUtil; import org.eclipse.jetty.util.UrlEncoded; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.DeleteMapping; 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.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Lists; import cn.hutool.core.util.StrUtil; import cn.hutool.cron.CronUtil; import cn.hutool.cron.task.Task; import cn.timer.api.bean.htzz.HtzzAdminZzda; import cn.timer.api.bean.htzz.HtzzAssoHtgx; import cn.timer.api.bean.htzz.HtzzAssoZztx; import cn.timer.api.bean.qyzx.businessService.QyzxRemainingQuantity; import cn.timer.api.bean.yggl.YgglMainEmp; import cn.timer.api.config.annotation.CurrentUser; import cn.timer.api.config.annotation.UserBean; import cn.timer.api.dao.htzz.HtzzAdminZzdaMapper; import cn.timer.api.dto.htzz.HtzzQueryDto; import cn.timer.api.dto.htzz.NotifyPersonDto; import cn.timer.api.utils.Result; import cn.timer.api.utils.ResultUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Api(tags = "7.0合同证照") @RestController @Transactional @RequestMapping(value = "/htzz", produces = {"application/json"}) public class HtzzController { @Autowired private HtzzAdminZzdaMapper htzzAdminZzdaMapper; @Autowired private OSSUtil oss; @Value("${config-8timer.Aliyun.project_package}") private String project_package; @Value("${zip.path}") private String zipPath; @Value("${config-8timer.Aliyun.endpoint}") private String endpoint; @Value("${sftp.client.root}") private String root; @Value("${sftp.client.targetPath}") private String targetPath; @Value("${sftp.client.serverUrl}") private String serverUrl; /** * 新增证件 * * @param userBean * @param htzzAdminZzda 证照档案实体 * @return 新增证件结果 */ @PostMapping("/addzj") @ApiOperation(value = "新增合同证件", httpMethod = "POST", notes = "接口发布说明") public Result<Object> addzj(@CurrentUser UserBean userBean, @RequestBody HtzzAdminZzda zzda) { Integer orgCode = userBean.getOrgCode(); QyzxRemainingQuantity quantity = QyzxRemainingQuantity.builder().build().selectOne( new LambdaQueryWrapper<QyzxRemainingQuantity>().eq(QyzxRemainingQuantity::getOrgCode, orgCode) .eq(QyzxRemainingQuantity::getPmid, 1).gt(QyzxRemainingQuantity::getRemainder, 0)); Date date = null; Integer remainder = null; if (quantity != null) { remainder = quantity.getRemainder(); date = quantity.getExpireDate(); } if (quantity == null || remainder == null || remainder <= 0) { // 判断充了钱没 return ResultUtil.error("请充值后使用短信功能!"); } if (date != null && date.getTime() <= new Date().getTime()) { Logoutput("企业 " + orgCode + " :短信套餐已过期"); // return ResultUtil.error("短信套餐已到期!"); } if (zzda.getId() == null) { zzda.setTxkgType(1);//默认开启提醒 } zzda.setLrrid(userBean.getEmpNum()); zzda.setLrsjTime(new Date()); zzda.setOrgCode(orgCode); zzda.setSendingStatus(0);//0:未发;1:已发 zzda.setTemplateId(zzda.getTemplateId());//消息模板id // zzda.insert(); zzda.insertOrUpdate(); /** * 新增通知关系表,每人一个 */ List<NotifyPersonDto> ids = zzda.getIds();//通知人 用户id+手机号码 List<HtzzAssoHtgx> htgxs = Lists.newArrayList(); for (NotifyPersonDto pre : ids) { // HtzzAssoHtgx.builder().build().delete(new QueryWrapper<HtzzAssoHtgx>().lambda().eq(HtzzAssoHtgx::getOrgCode, orgCode).eq(HtzzAssoHtgx::getTzrid, pre.getEmpNum()) // .eq(HtzzAssoHtgx::getPhone, pre.getPhone())); HtzzAssoHtgx htgx = HtzzAssoHtgx.builder().build().selectOne(new QueryWrapper<HtzzAssoHtgx>().lambda().eq(HtzzAssoHtgx::getOrgCode, orgCode).eq(HtzzAssoHtgx::getTzrid, pre.getEmpNum()) .eq(HtzzAssoHtgx::getPhone, pre.getPhone()).eq(HtzzAssoHtgx::getHtid,zzda.getId())); if (htgx == null) { htgx = HtzzAssoHtgx.builder().build(); } htgx.setHtid(zzda.getId()); htgx.setTzrid(pre.getEmpNum()); htgx.setName(pre.getEmpName()); htgx.setPhone(pre.getPhone()); htgx.setOrgCode(orgCode); htgx.insertOrUpdate(); htgxs.add(htgx); } HtzzAssoZztx zztx = zzda.getZztx(); zztx.setZzdaId(zzda.getId()); zztx.setOrgCode(orgCode); zztx.setLrrid(userBean.getEmpNum()); zztx.setLrsjTime(new Date()); zztx.insertOrUpdate(); return ResultUtil.datas(zzda, htgxs, "新增证件成功!"); } @GetMapping("/modifytx/{id}") @ApiOperation(value = "修改提醒数据", httpMethod = "GET", notes = "接口发布说明") public Result<Object> modifytx(@CurrentUser UserBean userBean, @PathVariable Integer id) { List<NotifyPersonDto> tzids = new ArrayList<NotifyPersonDto>(); List<HtzzAssoHtgx> httxs = HtzzAssoHtgx.builder().build().selectList(new QueryWrapper<HtzzAssoHtgx>().lambda().eq(HtzzAssoHtgx::getHtid, id)); for (HtzzAssoHtgx gx : httxs) { NotifyPersonDto predto = NotifyPersonDto.builder().build(); predto.setEmpName(gx.getName()); predto.setEmpNum(gx.getTzrid()); predto.setPhone(gx.getPhone()); tzids.add(predto); } HtzzAdminZzda zzda = HtzzAdminZzda.builder().id(id).build().selectById(); HtzzAssoZztx zztx = HtzzAssoZztx.builder().build().selectOne(new QueryWrapper<HtzzAssoZztx>().lambda().eq(HtzzAssoZztx::getZzdaId, id)); zzda.setZztx(zztx); zzda.setIds(tzids); return ResultUtil.data(zzda, "新增成功"); } /** * 按条件搜索(关键字、到期时间) * * @param userBean * @return */ @GetMapping("/queryht") @ApiOperation(value = "按条件搜索(关键字、到期时间)", httpMethod = "GET", notes = "接口发布说明") public Result<Object> queryht(@CurrentUser UserBean userBean, HtzzQueryDto htzzQueryDto) { String e = htzzQueryDto.getEndTime(); String q = htzzQueryDto.getQuery(); Page<HtzzAdminZzda> page = new Page<HtzzAdminZzda>( htzzQueryDto.getCurrentPage() == null ? 1 : htzzQueryDto.getCurrentPage(), htzzQueryDto.getTotalPage() == null ? 10 : htzzQueryDto.getTotalPage()); QueryWrapper<HtzzAdminZzda> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("org_code", userBean.getOrgCode()) .select("id", "zjmc", "czry", "fzjg", "fzrq", "yxdqr", "txkg_type").eq("is_delete", 0).eq("document_type", htzzQueryDto.getDocumentType()) .gt(!StrUtil.hasBlank(e), "yxdqr", !StrUtil.hasBlank(e) ? e : "9999-01-01 00:00:00") .and(!StrUtil.hasBlank(q), wq -> wq.like("zjmc", q).or().like("czry", q)).orderByDesc("lrsj_time"); IPage<HtzzAdminZzda> zPage = HtzzAdminZzda.builder().build().selectPage(page, queryWrapper); List<HtzzAdminZzda> zccrkgls = zPage.getRecords(); zPage.getCurrent(); zPage.getPages(); zPage.getTotal(); zPage.getSize(); return ResultUtil.data(zPage, zccrkgls, "搜索成功"); } /** * 根据id查合同 * * @param id * @return */ @PostMapping(value = "/queryHt/{id}") @ApiOperation(value = "根据id查合同", httpMethod = "POST", notes = "接口发布说明") public Result<Object> queryHt(@CurrentUser UserBean userBean, @PathVariable Integer id) { List<Object> list = new ArrayList<Object>(); list.add(HtzzAdminZzda.builder().build().selectOne(new QueryWrapper<HtzzAdminZzda>() .eq("org_code", userBean.getOrgCode()).eq("is_delete", 0).eq("id", id))); QueryWrapper<HtzzAssoHtgx> q = new QueryWrapper<HtzzAssoHtgx>(); q.select("id", "name").eq("htid", id); List<HtzzAssoHtgx> htgx = HtzzAssoHtgx.builder().build().selectList(q); for (HtzzAssoHtgx gx : htgx) { String name = gx.getName(); list.add(name); } return ResultUtil.data(list); } /** * 根据id删除合同 * * @param id * @return */ @DeleteMapping(value = "/delHt") @ApiOperation(value = "根据id删除合同", httpMethod = "DELETE", notes = "接口发布说明") public Result<Object> delHt(@CurrentUser UserBean userBean, @RequestParam Integer htid) { // 删除提醒关系 HtzzAssoHtgx.builder().build().delete(new QueryWrapper<HtzzAssoHtgx>().eq("org_code", userBean.getOrgCode()).eq("htid", htid)); //删除证照提醒表配置 HtzzAssoZztx.builder().build().delete(new QueryWrapper<HtzzAssoZztx>().lambda().eq(HtzzAssoZztx::getZzdaId, htid)); // 设置证照删除状态 return ResultUtil.data(HtzzAdminZzda.builder().id(htid).isDelete(1).build().updateById()); } /** * 修改提醒状态 * * @param id * @return */ @PostMapping(value = "/changeTx") @ApiOperation(value = "修改提醒状态", httpMethod = "POST", notes = "接口发布说明") public Result<Object> changeTx(@CurrentUser UserBean userBean, @RequestParam Integer htid) { QueryWrapper<HtzzAdminZzda> queryWrapper = new QueryWrapper<>(); queryWrapper.select("txkg_type").eq("id", htid); HtzzAdminZzda zzda = HtzzAdminZzda.builder().build().selectOne(queryWrapper); UpdateWrapper<HtzzAdminZzda> updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id", htid); HtzzAdminZzda w = HtzzAdminZzda.builder().orgCode(userBean.getOrgCode()).id(htid) .txkgType(zzda.getTxkgType() == 0 ? 1 : 0).build(); htzzAdminZzdaMapper.update(w, updateWrapper); return ResultUtil.success("修改成功"); } /** * 查詢全部員工id、姓名 * * @param id * @return */ @GetMapping(value = "/queryYg") @ApiOperation(value = "查詢全部員工id、姓名", httpMethod = "GET", notes = "接口发布说明") public Result<Object> queryYg(@CurrentUser UserBean userBean) { return ResultUtil.data(YgglMainEmp.builder().build().selectList( new QueryWrapper<YgglMainEmp>().select("emp_num", "name", "phone").eq("org_code", userBean.getOrgCode()))); } @GetMapping(value = "/test") @ApiOperation(value = "test", httpMethod = "GET", notes = "接口发布说明") public Result<Void> test(String schedulingPattern) { CronUtil.schedule("*/2 * * 24 * *", new Task() { @Override public void execute() { Logoutput("start:" + new Date()); } }); CronUtil.setMatchSecond(true); CronUtil.start(); return ResultUtil.success("操作成功"); } @Value("${config-8timer.environmental-science}") public String environmental_science; public void Logoutput(String science) { if (!("pro").equals(environmental_science)) { System.out.println(science); } else { System.out.println(""); } } /** * @Author wgd * @Description 导出勾选的合同 * @Date 2021/12/2 17:05 **/ @PostMapping(value = "/exportContract") public Result<Object> exportContract(@CurrentUser UserBean userBean, @RequestBody List<Integer> ids, HttpServletRequest request, HttpServletResponse resp) { if (ids.size() <= 0) { return ResultUtil.error("操作失败"); } Map<String, String> url = Maps.newHashMap(); Map<String, String> ftp = Maps.newHashMap(); ids.forEach(i -> { HtzzAdminZzda htzzAdminZzda = HtzzAdminZzda.builder().id(i).build().selectById(); if (StringUtil.isNotBlank(htzzAdminZzda.getZjfj())) { /*格式化获取文字*/ String urla = UrlEncoded.decodeString(htzzAdminZzda.getZjfj()); /*判断是保存在oss还是服务器*/ if (urla.contains(endpoint.replace("http://", "."))) { int index = urla.indexOf(project_package); url.put(htzzAdminZzda.getId() + "_" + htzzAdminZzda.getZjmc(), urla.substring(index)); } else { //TODO 区分出云盘文件暂时不下载 StringBuffer newUrl = new StringBuffer(root).append(targetPath).append(urla.substring(serverUrl.length())); ftp.put(htzzAdminZzda.getId() + "_" + htzzAdminZzda.getZjmc(), newUrl.toString()); } } }); String zipUrl = null; try { zipUrl = oss.createZip(url); return ResultUtil.data(zipUrl); } catch (IOException e) { e.printStackTrace(); return ResultUtil.error("操作失败"); } } @GetMapping(value = "/exportContract") public void exportContract(@CurrentUser UserBean userBean, @RequestParam("url") String url, HttpServletRequest request, HttpServletResponse resp) { FileInputStream fis = null; BufferedInputStream bis = null; OutputStream os; File filePath = null; try { resp.setContentType("application/octet-stream"); resp.setHeader("content-disposition", "attachment; filename=" + new String(url.getBytes("UTF8"), "ISO-8859-1")); resp.setCharacterEncoding("UTF-8"); filePath = new File(zipPath + url); byte[] buffer = new byte[1024]; fis = new FileInputStream(filePath); bis = new BufferedInputStream(fis); os = resp.getOutputStream(); int i = bis.read(buffer); while (i != -1) { os.write(buffer, 0, i); i = bis.read(buffer); } os.flush(); } catch (Exception e) { e.printStackTrace(); } finally { try { bis.close(); } catch (IOException e) { e.printStackTrace(); } try { fis.close(); } catch (IOException e) { e.printStackTrace(); } filePath.delete(); } } }