|
@@ -0,0 +1,838 @@
|
|
|
+package com.xt.jygl.ggfwxxgl.jdtxxx.ctl;
|
|
|
+
|
|
|
+import java.io.File;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+import javax.persistence.criteria.CriteriaBuilder;
|
|
|
+import javax.persistence.criteria.CriteriaBuilder.In;
|
|
|
+import javax.persistence.criteria.CriteriaQuery;
|
|
|
+import javax.persistence.criteria.Predicate;
|
|
|
+import javax.persistence.criteria.Root;
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.data.domain.Page;
|
|
|
+import org.springframework.data.jpa.domain.Specification;
|
|
|
+import org.springframework.stereotype.Controller;
|
|
|
+import org.springframework.ui.Model;
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestParam;
|
|
|
+import org.springframework.web.bind.annotation.ResponseBody;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
+
|
|
|
+import cache.CacheSearchCondition;
|
|
|
+
|
|
|
+import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
+import com.xt.jygl.accessory.entity.AccessoryEntity;
|
|
|
+import com.xt.jygl.accessory.service.AccessoryService;
|
|
|
+import com.xt.jygl.common.BaseWebCtl;
|
|
|
+import com.xt.jygl.common.Constants;
|
|
|
+import com.xt.jygl.common.GlobalData;
|
|
|
+import com.xt.jygl.common.Utils;
|
|
|
+import com.xt.jygl.ggfwxxgl.jdjc.entity.JdjcfjEntity;
|
|
|
+import com.xt.jygl.ggfwxxgl.jdjc.service.JdjcfjService;
|
|
|
+import com.xt.jygl.ggfwxxgl.jdtxxx.entity.JdtxxxEntity;
|
|
|
+import com.xt.jygl.ggfwxxgl.jdtxxx.service.JdtxxxService;
|
|
|
+import com.xt.jygl.ggfwxxgl.jdtxxx.vo.JdtxxxVo;
|
|
|
+import com.xt.jygl.gkjcxx.gk.entity.GkEntity;
|
|
|
+import com.xt.jygl.gkjcxx.gk.service.GkService;
|
|
|
+import com.xt.jygl.gkjcxx.gq.entity.GqEntity;
|
|
|
+import com.xt.jygl.gkjygl.gkjyr.jyrjbxx.entity.GkjyrEntity;
|
|
|
+import com.xt.jygl.workflow.entity.TaskInfoEntity;
|
|
|
+import com.xt.jygl.workflow.service.TaskInfoService;
|
|
|
+import com.xtframe.core.base.ctl.WebJsonResult;
|
|
|
+import com.xtframe.core.support.SecurityMgr;
|
|
|
+import com.xtframe.sec.code.entity.CodeEntity;
|
|
|
+import com.xtframe.sec.common.BaseEntity;
|
|
|
+import com.xtframe.sec.common.QueryService;
|
|
|
+import com.xtframe.sec.common.SimplePageRequest;
|
|
|
+import com.xtframe.sec.user.entity.UserEntity;
|
|
|
+import com.xtframe.sec.utils.SecUtils;
|
|
|
+import com.xtframe.util.StringUtils;
|
|
|
+
|
|
|
+@Controller
|
|
|
+@RequestMapping("/jdtxxx")
|
|
|
+public class JdtxxxCtl extends BaseWebCtl {
|
|
|
+ @Autowired
|
|
|
+ private SecurityMgr securityMgr;
|
|
|
+ @Autowired
|
|
|
+ private QueryService query;
|
|
|
+ @Autowired
|
|
|
+ private JdtxxxService jdtxxxService;
|
|
|
+ @Autowired
|
|
|
+ private GkService gkService;
|
|
|
+ @Autowired
|
|
|
+ private TaskInfoService taskInfoService;
|
|
|
+ @Autowired
|
|
|
+ private AccessoryService accessoryService;
|
|
|
+ @Autowired
|
|
|
+ private JdjcfjService jdjcfjService;
|
|
|
+
|
|
|
+ @RequestMapping(value = "/main")
|
|
|
+ public String main(SimplePageRequest page, Model model, final HttpServletRequest request, final String ssjyr, final String szdid, final String szgkid, final String szgqid, final String menuid) throws JsonProcessingException {
|
|
|
+ final Map<String, Object> cacheSCmap = CacheSearchCondition.cacheSCmap(request, "jdjc");
|
|
|
+ Specification<JdtxxxEntity> spec = new Specification<JdtxxxEntity>() {
|
|
|
+ // 查询条件
|
|
|
+ @Override
|
|
|
+ public Predicate toPredicate(Root<JdtxxxEntity> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
|
|
|
+ List<Predicate> list = new ArrayList<Predicate>();
|
|
|
+
|
|
|
+ if (StringUtils.isNotEmpty(szdid)) {
|
|
|
+ list.add(cb.like(root.get("szd").get("id").as(String.class), "%" + szdid + "%"));
|
|
|
+ } else if (isGET(request)) {
|
|
|
+ String v = (String) CacheSearchCondition.cacheSCmapVal(cacheSCmap, "szdid");
|
|
|
+ if (StringUtils.isNotEmpty(v)) {
|
|
|
+ list.add(cb.like(root.get("szd").get("id").as(String.class), "%" + v + "%"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(szgkid)) {
|
|
|
+ list.add(cb.like(root.get("szgk").get("id").as(String.class), "%" + szgkid + "%"));
|
|
|
+ } else if (isGET(request)) {
|
|
|
+ String v = (String) CacheSearchCondition.cacheSCmapVal(cacheSCmap, "szgkid");
|
|
|
+ if (StringUtils.isNotEmpty(v)) {
|
|
|
+ list.add(cb.like(root.get("szgk").get("id").as(String.class), "%" + v + "%"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(szgqid)) {
|
|
|
+ list.add(cb.like(root.get("szgq").get("id").as(String.class), "%" + szgqid + "%"));
|
|
|
+ } else if (isGET(request)) {
|
|
|
+ String v = (String) CacheSearchCondition.cacheSCmapVal(cacheSCmap, "szgqid");
|
|
|
+ if (StringUtils.isNotEmpty(v)) {
|
|
|
+ list.add(cb.like(root.get("szgq").get("id").as(String.class), "%" + v + "%"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(ssjyr)) {
|
|
|
+ list.add(cb.like(root.get("gkjyr").get("gkjyr").as(String.class), "%" + ssjyr + "%"));
|
|
|
+ } else if (isGET(request)) {
|
|
|
+ String v = (String) CacheSearchCondition.cacheSCmapVal(cacheSCmap, "ssjyr");
|
|
|
+ if (StringUtils.isNotEmpty(v)) {
|
|
|
+ list.add(cb.like(root.get("gkjyr").get("gkjyr").as(String.class), "%" + v + "%"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 经营人只能查看自己企业下的数据,非经营人只能查看自己所在地的数据
|
|
|
+ if (GlobalData.DEPLOY_MODE.equals(Constants.DEPLOY_MODE_CITY)) {
|
|
|
+ if (isJyr()) {
|
|
|
+ list.add(cb.like(root.get("gkjyr").get("id").as(String.class), "%" + getSsjyr().getId() + "%"));
|
|
|
+ list.add(cb.notEqual(root.get("recordStatus").as(Integer.class), BaseEntity.RECORD_STATE_VALID));
|
|
|
+ } else {
|
|
|
+ In<String> in = cb.in(root.get("szgq").get("id").as(String.class));
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ List<String> gqlist = (List<String>) Utils.getSession().getAttribute("gqList");
|
|
|
+ if (gqlist != null && gqlist.size() > 0) {
|
|
|
+ for (int i = 0; i < gqlist.size(); i++) {
|
|
|
+ in.value(gqlist.get(i));
|
|
|
+ }
|
|
|
+ list.add(in);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ list.add(cb.notEqual(root.get("recordStatus").as(Integer.class), BaseEntity.RECORD_STATE_DELETE));
|
|
|
+ return cb.and(list.toArray(new Predicate[] {}));
|
|
|
+ }
|
|
|
+ };
|
|
|
+ if (page.getPage() < 1) {
|
|
|
+ Object jdtxpage = CacheSearchCondition.cacheSCmapVal(cacheSCmap, "jdtxpage");
|
|
|
+ if (StringUtils.isEmpty(jdtxpage) || !org.apache.commons.lang.StringUtils.isNumeric(String.valueOf(jdtxpage))) {
|
|
|
+ jdtxpage = "1";
|
|
|
+ }
|
|
|
+ page.setPage(Integer.valueOf(String.valueOf(jdtxpage)));
|
|
|
+ }
|
|
|
+
|
|
|
+ Page<JdtxxxEntity> list = query.findAll(spec, toPageRequest(page), JdtxxxEntity.class);
|
|
|
+ List<JdtxxxVo> voList = new ArrayList<JdtxxxVo>();
|
|
|
+ for (JdtxxxEntity entity : list) {
|
|
|
+ JdtxxxVo vo = new JdtxxxVo();
|
|
|
+ if (null != entity) {
|
|
|
+ BeanUtils.copyProperties(entity, vo);
|
|
|
+ if (entity.getRecordStatus() != 9) {
|
|
|
+ // 获取流程最新步骤
|
|
|
+ TaskInfoEntity info = taskInfoService.findByStep(entity.getId(), JdtxxxEntity.PROCESS_DEFINITION_KEY);
|
|
|
+ if (info != null) {
|
|
|
+ vo.setCurrentname(info.getCurrName());
|
|
|
+ }
|
|
|
+ if ((jdtxxxService.getTaskByUserAndBusKey(SecUtils.getCurrUser().getId().toString(), entity.getId().toString()) != null) || jdtxxxService.getCandidateTaskByUserAndBusKey(SecUtils.getCurrUser().getId().toString(), entity.getId().toString()) != null) {
|
|
|
+ List<TaskInfoEntity> lists = taskInfoService.findByBusIdAndBusKeyAndRecordStatus(entity.getId(), JdtxxxEntity.PROCESS_DEFINITION_KEY);
|
|
|
+ if (lists != null & lists.size() > 0) {
|
|
|
+ TaskInfoEntity taskinfo = lists.get(0);
|
|
|
+ if ("申请".equals(taskinfo.getCurrName())) {
|
|
|
+ vo.setTaskState("TH");
|
|
|
+ } else {
|
|
|
+ vo.setTaskState(Constants.IS_MY_TASK);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (entity.getRecordStatus() == BaseEntity.RECORD_STATE_VALID) {
|
|
|
+ if (GlobalData.DEPLOY_MODE.equals(Constants.DEPLOY_MODE_CITY)) {
|
|
|
+ if ("0".equals(entity.getFlowstatus())) {
|
|
|
+ vo.setCurrentname("下发");
|
|
|
+ } else if ("1".equals(entity.getFlowstatus())) {
|
|
|
+ vo.setCurrentname("地市已同步到省");
|
|
|
+ } else {
|
|
|
+ vo.setCurrentname("");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if ("0".equals(entity.getFlowstatus())) {
|
|
|
+ vo.setCurrentname("已下发地市");
|
|
|
+ } else if ("1".equals(entity.getFlowstatus())) {
|
|
|
+ vo.setCurrentname("地市已同步到省");
|
|
|
+ } else {
|
|
|
+ vo.setCurrentname("未下发");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ vo.setSzd(entity.getSzd() != null ? entity.getSzd().getId() : "");
|
|
|
+ vo.setSzgk(entity.getSzgk() != null ? entity.getSzgk().getId() : "");
|
|
|
+ vo.setSzgq(entity.getSzgq() != null ? entity.getSzgq().getId() : "");
|
|
|
+ vo.setSzgkmc(entity.getSzgk() != null ? entity.getSzgk().getGkmc() : "");
|
|
|
+ vo.setSzgqmc(entity.getSzgq() != null ? entity.getSzgq().getGqmc() : "");
|
|
|
+ vo.setGkjyr(entity.getGkjyr() != null ? entity.getGkjyr().getId() : "");
|
|
|
+ vo.setGkjyrmc(entity.getGkjyr() != null ? entity.getGkjyr().getGkjyr() : "");
|
|
|
+ voList.add(vo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (isPOST(request)) {
|
|
|
+ cacheSCmap.put("jdtxpage", page.getPage());
|
|
|
+ CacheSearchCondition.putCacheSCmap(request.getParameterMap(), cacheSCmap);
|
|
|
+ }
|
|
|
+ model.addAttribute("list", voList);
|
|
|
+ model.addAttribute("menuid", menuid);
|
|
|
+ model.addAttribute("ssjyr", CacheSearchCondition.cacheSCmapVal(cacheSCmap, "ssjyr"));
|
|
|
+ model.addAttribute("szd", CacheSearchCondition.cacheSCmapVal(cacheSCmap, "szdid"));
|
|
|
+ model.addAttribute("szgk", CacheSearchCondition.cacheSCmapVal(cacheSCmap, "szgkid"));
|
|
|
+ model.addAttribute("szgq", CacheSearchCondition.cacheSCmapVal(cacheSCmap, "szgqid"));
|
|
|
+ int flag = 0;
|
|
|
+ if (GlobalData.CITY_CODE.length() > 3) {
|
|
|
+ flag = 1;
|
|
|
+ }
|
|
|
+ model.addAttribute("flag", flag);
|
|
|
+ // 翻页共通
|
|
|
+ putPageInfo(model, page, list);
|
|
|
+ return "ggfwxxgl/jdtxxx/jdtxxxmain";
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/delete")
|
|
|
+ @ResponseBody
|
|
|
+ public WebJsonResult delete(Model model, String id) {
|
|
|
+ WebJsonResult wr = success();
|
|
|
+ try {
|
|
|
+ jdtxxxService.logicDelete(id);
|
|
|
+ } catch (Exception e) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("删除失败!");
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/save")
|
|
|
+ @ResponseBody
|
|
|
+ public WebJsonResult save(Model model, JdtxxxEntity code, String szdid, String szgkid, String accid, String szgqid, String jyrid) {
|
|
|
+ // how:如果是新增直接保存,如果更新,先取出数据库中记录,然后更新页面传过来的字段
|
|
|
+ // why:这样的话一些在前台无需显示的字段保证不会丢失,同时一个个字段设置有助于bug排查
|
|
|
+ WebJsonResult wr = success();
|
|
|
+ if (StringUtils.isEmpty(szdid)) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("请选择所在地");
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(szgkid)) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("请选择所在港口");
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(szgqid)) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("请选择所在港区");
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(jyrid)) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("请选择被督查单位");
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+ JdtxxxEntity entity = new JdtxxxEntity();
|
|
|
+ try {
|
|
|
+ if (!StringUtils.isEmpty(code.getId())) {
|
|
|
+ // 修改
|
|
|
+ entity = jdtxxxService.findOne(code.getId());
|
|
|
+ entity.setBdcdwcjry(code.getBdcdwcjry());
|
|
|
+ entity.setBdcdwfzr(code.getBdcdwfzr());
|
|
|
+ entity.setCjdcry(code.getCjdcry());
|
|
|
+ entity.setYhmc(code.getYhmc());
|
|
|
+ entity.setZgcsyq(code.getZgcsyq());
|
|
|
+ entity.setZgqx(code.getZgqx());
|
|
|
+ entity.setZgsm(code.getZgsm());
|
|
|
+ entity.setYhdl(code.getYhdl());
|
|
|
+ entity.setYhzl(code.getYhzl());
|
|
|
+ entity.setYhfl(code.getYhfl());
|
|
|
+ entity.setYhqy(code.getYhqy());
|
|
|
+ entity.setYhjb(code.getYhjb());
|
|
|
+ entity.setZghtzje(code.getZghtzje());
|
|
|
+ entity.setDqzt(code.getDqzt());
|
|
|
+ entity.setSftb(Constants.NO);
|
|
|
+ entity = jdtxxxService.save(entity);
|
|
|
+ } else {
|
|
|
+ CodeEntity szd = new CodeEntity(szdid);
|
|
|
+ code.setSzd(szd);
|
|
|
+
|
|
|
+ GkEntity szgk = new GkEntity();
|
|
|
+ szgk.setId(szgkid);
|
|
|
+ code.setSzgk(szgk);
|
|
|
+
|
|
|
+ GqEntity szgq = new GqEntity();
|
|
|
+ szgq.setId(szgqid);
|
|
|
+ code.setSzgq(szgq);
|
|
|
+
|
|
|
+ GkjyrEntity ssjyr = new GkjyrEntity();
|
|
|
+ ssjyr.setId(jyrid);
|
|
|
+ code.setGkjyr(ssjyr);
|
|
|
+ code.setSftb(Constants.NO);
|
|
|
+ entity = jdtxxxService.save(code);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!StringUtils.isEmpty(accid)) {
|
|
|
+ // 关联附件
|
|
|
+ String[] ssids = accid.split(",");
|
|
|
+ for (String ssid : ssids) {
|
|
|
+ JdjcfjEntity jdjcfj = jdjcfjService.findOne(ssid);
|
|
|
+ if (jdjcfj != null) {
|
|
|
+ jdjcfj.setJdtxid(entity.getId());
|
|
|
+ jdjcfjService.save(jdjcfj);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("操作失败!");
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/savexf")
|
|
|
+ @ResponseBody
|
|
|
+ public WebJsonResult savexf(Model model, JdtxxxEntity code, String szdid, String szgkid, String accid, String szgqid, String jyrid) {
|
|
|
+ // how:如果是新增直接保存,如果更新,先取出数据库中记录,然后更新页面传过来的字段
|
|
|
+ // why:这样的话一些在前台无需显示的字段保证不会丢失,同时一个个字段设置有助于bug排查
|
|
|
+ WebJsonResult wr = success();
|
|
|
+ if (StringUtils.isEmpty(szdid)) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("请选择所在地");
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(szgkid)) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("请选择所在港口");
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(szgqid)) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("请选择所在港区");
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(jyrid)) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("请选择被督查单位");
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+ JdtxxxEntity entity = new JdtxxxEntity();
|
|
|
+ try {
|
|
|
+ if (!StringUtils.isEmpty(code.getId())) {
|
|
|
+ // 修改
|
|
|
+ entity = jdtxxxService.findOne(code.getId());
|
|
|
+ entity.setBdcdwcjry(code.getBdcdwcjry());
|
|
|
+ entity.setBdcdwfzr(code.getBdcdwfzr());
|
|
|
+ entity.setCjdcry(code.getCjdcry());
|
|
|
+ entity.setYhmc(code.getYhmc());
|
|
|
+ entity.setZgcsyq(code.getZgcsyq());
|
|
|
+ entity.setZgqx(code.getZgqx());
|
|
|
+ entity.setZgsm(code.getZgsm());
|
|
|
+ entity.setYhdl(code.getYhdl());
|
|
|
+ entity.setYhzl(code.getYhzl());
|
|
|
+ entity.setYhfl(code.getYhfl());
|
|
|
+ entity.setYhqy(code.getYhqy());
|
|
|
+ entity.setYhjb(code.getYhjb());
|
|
|
+ entity.setZghtzje(code.getZghtzje());
|
|
|
+ entity.setDqzt(code.getDqzt());
|
|
|
+ entity.setSftb(Constants.NO);
|
|
|
+ entity = jdtxxxService.save(entity);
|
|
|
+ } else {
|
|
|
+ CodeEntity szd = new CodeEntity(szdid);
|
|
|
+ code.setSzd(szd);
|
|
|
+
|
|
|
+ GkEntity szgk = new GkEntity();
|
|
|
+ szgk.setId(szgkid);
|
|
|
+ code.setSzgk(szgk);
|
|
|
+
|
|
|
+ GqEntity szgq = new GqEntity();
|
|
|
+ szgq.setId(szgqid);
|
|
|
+ code.setSzgq(szgq);
|
|
|
+
|
|
|
+ GkjyrEntity ssjyr = new GkjyrEntity();
|
|
|
+ ssjyr.setId(jyrid);
|
|
|
+ code.setGkjyr(ssjyr);
|
|
|
+ code.setSftb(Constants.NO);
|
|
|
+ entity = jdtxxxService.save(code);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!StringUtils.isEmpty(accid)) {
|
|
|
+ // 关联附件
|
|
|
+ String[] ssids = accid.split(",");
|
|
|
+ for (String ssid : ssids) {
|
|
|
+ JdjcfjEntity jdjcfj = jdjcfjService.findOne(ssid);
|
|
|
+ if (jdjcfj != null) {
|
|
|
+ jdjcfj.setJdtxid(entity.getId());
|
|
|
+ jdjcfjService.save(jdjcfj);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ wr = saveTb(model, entity.getId());
|
|
|
+ } catch (Exception e) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("操作失败!");
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/saveTb")
|
|
|
+ @ResponseBody
|
|
|
+ public WebJsonResult saveTb(Model model, String id) {
|
|
|
+ WebJsonResult wr = success();
|
|
|
+ JdtxxxEntity entity = jdtxxxService.findOne(id);
|
|
|
+
|
|
|
+ entity.setSftb(Constants.YES);
|
|
|
+ jdtxxxService.save(entity);
|
|
|
+
|
|
|
+ List<JdjcfjEntity> fjlist = jdjcfjService.findByJdjcid(id, "1");
|
|
|
+ fjlist.addAll(jdjcfjService.findByJdjcid(id, "2"));
|
|
|
+ String fjid = "";
|
|
|
+ if (fjlist != null && fjlist.size() > 0) {
|
|
|
+ for (JdjcfjEntity fj : fjlist) {
|
|
|
+ fjid = fjid + fj.getFjid() + ",";
|
|
|
+ }
|
|
|
+ fjid = fjid.substring(0, fjid.length() - 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ String url = "GK_OPERATION_JSJY_JDTXXX_ONE_PC?condition=ID=" + id + ";FJID=" + fjid;
|
|
|
+
|
|
|
+ boolean flag = getTbStatus(url, entity.getSzd().getId());
|
|
|
+ if (flag) {
|
|
|
+ entity.setFlowstatus("0");
|
|
|
+ entity.setTbzt(Constants.YES);
|
|
|
+ jdtxxxService.save(entity);
|
|
|
+ } else {
|
|
|
+ entity.setFlowstatus(null);
|
|
|
+ entity.setSftb(Constants.NO);
|
|
|
+ jdtxxxService.save(entity);
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("下发地市失败");
|
|
|
+ }
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/submit")
|
|
|
+ @ResponseBody
|
|
|
+ public WebJsonResult submit(Model model, JdtxxxEntity code, String accid, String szdid, String szgkid, String szgqid, String jyrid) {
|
|
|
+ // how:如果是新增直接保存,如果更新,先取出数据库中记录,然后更新页面传过来的字段
|
|
|
+ // why:这样的话一些在前台无需显示的字段保证不会丢失,同时一个个字段设置有助于bug排查
|
|
|
+ WebJsonResult wr = success();
|
|
|
+ if (StringUtils.isEmpty(szdid)) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("请选择所在地");
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(szgkid)) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("请选择所在港口");
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(szgqid)) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("请选择所在港区");
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(jyrid)) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("请选择被督查单位");
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+ JdtxxxEntity entity = new JdtxxxEntity();
|
|
|
+ try {
|
|
|
+ if (!StringUtils.isEmpty(code.getId())) {
|
|
|
+ // 修改
|
|
|
+ entity = jdtxxxService.findOne(code.getId());
|
|
|
+ entity.setBdcdwcjry(code.getBdcdwcjry());
|
|
|
+ entity.setBdcdwfzr(code.getBdcdwfzr());
|
|
|
+ entity.setCjdcry(code.getCjdcry());
|
|
|
+ entity.setYhmc(code.getYhmc());
|
|
|
+ entity.setZgcsyq(code.getZgcsyq());
|
|
|
+ entity.setZgqx(code.getZgqx());
|
|
|
+ entity.setZgsm(code.getZgsm());
|
|
|
+ entity.setYhdl(code.getYhdl());
|
|
|
+ entity.setYhzl(code.getYhzl());
|
|
|
+ entity.setYhfl(code.getYhfl());
|
|
|
+ entity.setYhqy(code.getYhqy());
|
|
|
+ entity.setYhjb(code.getYhjb());
|
|
|
+ entity.setZghtzje(code.getZghtzje());
|
|
|
+ entity.setDqzt(code.getDqzt());
|
|
|
+ entity.setSftb(Constants.NO);
|
|
|
+ entity = jdtxxxService.submit(entity);
|
|
|
+ } else {
|
|
|
+ CodeEntity szd = new CodeEntity(szdid);
|
|
|
+ code.setSzd(szd);
|
|
|
+
|
|
|
+ GkEntity szgk = new GkEntity();
|
|
|
+ szgk.setId(szgkid);
|
|
|
+ code.setSzgk(szgk);
|
|
|
+
|
|
|
+ GqEntity szgq = new GqEntity();
|
|
|
+ szgq.setId(szgqid);
|
|
|
+ code.setSzgq(szgq);
|
|
|
+
|
|
|
+ GkjyrEntity ssjyr = new GkjyrEntity();
|
|
|
+ ssjyr.setId(jyrid);
|
|
|
+ code.setGkjyr(ssjyr);
|
|
|
+ code.setSftb(Constants.NO);
|
|
|
+ entity = jdtxxxService.submit(code);
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(accid)) {
|
|
|
+ // 关联附件
|
|
|
+ String[] ssids = accid.split(",");
|
|
|
+ for (String ssid : ssids) {
|
|
|
+ JdjcfjEntity jdjcfj = jdjcfjService.findOne(ssid);
|
|
|
+ if (jdjcfj != null) {
|
|
|
+ jdjcfj.setJdtxid(entity.getId());
|
|
|
+ jdjcfjService.save(jdjcfj);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("操作失败!");
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/submitAudit")
|
|
|
+ @ResponseBody
|
|
|
+ public WebJsonResult submitAudit(JdtxxxEntity code, String accid) {
|
|
|
+ WebJsonResult wr = success();
|
|
|
+ JdtxxxEntity entity = new JdtxxxEntity();
|
|
|
+ try {
|
|
|
+ if (!StringUtils.isEmpty(code.getId())) {
|
|
|
+ entity = jdtxxxService.findOne(code.getId());
|
|
|
+ entity.setBdcdwcjry(code.getBdcdwcjry());
|
|
|
+ entity.setBdcdwfzr(code.getBdcdwfzr());
|
|
|
+ entity.setCjdcry(code.getCjdcry());
|
|
|
+ entity.setYhmc(code.getYhmc());
|
|
|
+ entity.setZgcsyq(code.getZgcsyq());
|
|
|
+ entity.setZgqx(code.getZgqx());
|
|
|
+ entity.setZgsm(code.getZgsm());
|
|
|
+ entity = jdtxxxService.submit(entity);
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(accid)) {
|
|
|
+ // 关联附件
|
|
|
+ String[] ssids = accid.split(",");
|
|
|
+ for (String ssid : ssids) {
|
|
|
+ JdjcfjEntity jdjcfj = jdjcfjService.findOne(ssid);
|
|
|
+ if (jdjcfj != null) {
|
|
|
+ jdjcfj.setJdtxid(entity.getId());
|
|
|
+ jdjcfjService.save(jdjcfj);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("操作失败!");
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/audit")
|
|
|
+ @ResponseBody
|
|
|
+ public WebJsonResult audit(String shyj, String id, String dqzt, String zghtzje, String flag, String accid) {
|
|
|
+ WebJsonResult wr = success();
|
|
|
+ JdtxxxEntity entity = jdtxxxService.findOne(id);
|
|
|
+ if (!StringUtils.isEmpty(dqzt)) {
|
|
|
+ entity.setDqzt(dqzt);
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(zghtzje)) {
|
|
|
+ entity.setZghtzje(zghtzje);
|
|
|
+ }
|
|
|
+ entity = jdtxxxService.save(entity);
|
|
|
+ if (!StringUtils.isEmpty(accid)) {
|
|
|
+ // 关联附件
|
|
|
+ String[] ssids = accid.split(",");
|
|
|
+ for (String ssid : ssids) {
|
|
|
+ JdjcfjEntity jdjcfj = jdjcfjService.findOne(ssid);
|
|
|
+ if (jdjcfj != null) {
|
|
|
+ jdjcfj.setJdtxid(entity.getId());
|
|
|
+ jdjcfjService.save(jdjcfj);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ if (jdtxxxService.getCandidateTaskByUserAndBusKey(SecUtils.getCurrUser().getId().toString(), id) != null) {
|
|
|
+ jdtxxxService.claim(id, SecUtils.getCurrUser().getId().toString());
|
|
|
+ }
|
|
|
+ boolean jflag = true;
|
|
|
+ if ("Y".equals(flag)) {
|
|
|
+ jflag = jdtxxxService.changeAudit(shyj, entity, true);
|
|
|
+ } else if ("N".equals(flag)) {
|
|
|
+ jflag = jdtxxxService.changeAudit(shyj, entity, false);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (jflag) {
|
|
|
+ entity.setFlowstatus("1");
|
|
|
+ entity.setSftb(Constants.YES);
|
|
|
+ entity = jdtxxxService.save(entity);
|
|
|
+ List<JdjcfjEntity> fjlist = jdjcfjService.findByJdjcid(id, "1");
|
|
|
+ fjlist.addAll(jdjcfjService.findByJdjcid(id, "2"));
|
|
|
+ String fjid = "";
|
|
|
+ if (fjlist != null && fjlist.size() > 0) {
|
|
|
+ for (JdjcfjEntity fj : fjlist) {
|
|
|
+ fjid = fjid + fj.getFjid() + ",";
|
|
|
+ }
|
|
|
+ fjid = fjid.substring(0, fjid.length() - 1);
|
|
|
+ }
|
|
|
+ // 如果是省级审核通过或不通过后同步到市级
|
|
|
+ try {
|
|
|
+ String url = "GK_OPERATION_JSJY_JDTXXX_ONE_CP?condition=ID=" + entity.getId() + ";FJID=" + fjid;
|
|
|
+ boolean tbflag = getTbStatus(url, "");
|
|
|
+ if (tbflag) {
|
|
|
+ entity.setTbzt("Y");
|
|
|
+ jdtxxxService.save(entity);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("操作失败!");
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/edit")
|
|
|
+ public String edit(Model model, String id, String flag) {
|
|
|
+ model.addAttribute("flag", flag);
|
|
|
+ JdtxxxEntity entity = jdtxxxService.findOne(id);
|
|
|
+ JdtxxxVo vo = new JdtxxxVo();
|
|
|
+ BeanUtils.copyProperties(entity, vo);
|
|
|
+ vo.setSzd(entity.getSzd() != null ? entity.getSzd().getId() : "");
|
|
|
+ vo.setSzgk(entity.getSzgk() != null ? entity.getSzgk().getId() : "");
|
|
|
+ vo.setSzgq(entity.getSzgq() != null ? entity.getSzgq().getId() : "");
|
|
|
+ vo.setGkjyr(entity.getGkjyr() != null ? entity.getGkjyr().getId() : "");
|
|
|
+ vo.setGkjyrmc(entity.getGkjyr() != null ? entity.getGkjyr().getGkjyr() : "");
|
|
|
+ model.addAttribute("record", vo);
|
|
|
+
|
|
|
+ List<JdjcfjEntity> list = jdjcfjService.findByJdjcid(id, "1");
|
|
|
+ if (list != null && list.size() > 0) {
|
|
|
+ model.addAttribute("fjlist", list);
|
|
|
+ }
|
|
|
+ if (GlobalData.DEPLOY_MODE.equals(Constants.DEPLOY_MODE_CITY)) {
|
|
|
+ model.addAttribute("ssFlag", "1");
|
|
|
+ } else {
|
|
|
+ model.addAttribute("ssFlag", "0");
|
|
|
+ }
|
|
|
+ return "ggfwxxgl/jdtxxx/jdtxxxedit";
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/view")
|
|
|
+ public String view(Model model, String id, String flag, String opflag) {
|
|
|
+ model.addAttribute("flag", flag);
|
|
|
+ JdtxxxEntity entity = jdtxxxService.findOne(id);
|
|
|
+ JdtxxxVo vo = new JdtxxxVo();
|
|
|
+ BeanUtils.copyProperties(entity, vo);
|
|
|
+ vo.setSzd(entity.getSzd() != null ? entity.getSzd().getId() : "");
|
|
|
+ vo.setSzdzw(entity.getSzd() != null ? entity.getSzd().getText() : "");
|
|
|
+ vo.setSzgk(entity.getSzgk() != null ? entity.getSzgk().getId() : "");
|
|
|
+ vo.setSzgq(entity.getSzgq() != null ? entity.getSzgq().getId() : "");
|
|
|
+ vo.setSzgkmc(entity.getSzgk() != null ? entity.getSzgk().getGkmc() : "");
|
|
|
+ vo.setSzgqmc(entity.getSzgq() != null ? entity.getSzgq().getGqmc() : "");
|
|
|
+ vo.setGkjyr(entity.getGkjyr() != null ? entity.getGkjyr().getId() : "");
|
|
|
+ vo.setGkjyrmc(entity.getGkjyr() != null ? entity.getGkjyr().getGkjyr() : "");
|
|
|
+ if (!StringUtils.isEmpty(entity.getYhdl())) {
|
|
|
+ CodeEntity code = securityMgr.codeService().findOne(entity.getYhdl());
|
|
|
+ vo.setYhdlmc(code.getText());
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(entity.getYhzl())) {
|
|
|
+ CodeEntity code = securityMgr.codeService().findOne(entity.getYhzl());
|
|
|
+ vo.setYhzlmc(code.getText());
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(entity.getYhfl())) {
|
|
|
+ CodeEntity code = securityMgr.codeService().findOne(entity.getYhfl());
|
|
|
+ vo.setYhflmc(code.getText());
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(entity.getYhqy())) {
|
|
|
+ CodeEntity code = securityMgr.codeService().findOne(entity.getYhqy());
|
|
|
+ vo.setYhqymc(code.getText());
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(entity.getYhjb())) {
|
|
|
+ CodeEntity code = securityMgr.codeService().findOne(entity.getYhjb());
|
|
|
+ vo.setYhjbmc(code.getText());
|
|
|
+ }
|
|
|
+ model.addAttribute("record", vo);
|
|
|
+
|
|
|
+ List<TaskInfoEntity> lists = taskInfoService.findByBusIdAndBusKeyAndRecordStatus(id, JdtxxxEntity.PROCESS_DEFINITION_KEY);
|
|
|
+ if (lists != null & lists.size() > 0) {
|
|
|
+ TaskInfoEntity taskinfo = lists.get(0);
|
|
|
+ if ("xzrytjzg".equals(taskinfo.getTaskKey())) {
|
|
|
+ opflag = "1";
|
|
|
+ } else if ("jyrqr".equals(taskinfo.getTaskKey())) {
|
|
|
+ opflag = "2";
|
|
|
+ } else if ("xzrysh".equals(taskinfo.getTaskKey())) {
|
|
|
+ opflag = "3";
|
|
|
+ }
|
|
|
+ model.addAttribute("opflag", opflag);
|
|
|
+ }
|
|
|
+ if (isJyr()) {
|
|
|
+ model.addAttribute("jyrFlag", "1");
|
|
|
+ }
|
|
|
+
|
|
|
+ List<JdjcfjEntity> zgfjlist = jdjcfjService.findByJdjcid(id, "1");
|
|
|
+ if (zgfjlist != null && zgfjlist.size() > 0) {
|
|
|
+ model.addAttribute("zgfjlist", zgfjlist);
|
|
|
+ }
|
|
|
+ List<JdjcfjEntity> zghfjlist = jdjcfjService.findByJdjcid(id, "2");
|
|
|
+ if (zghfjlist != null && zghfjlist.size() > 0) {
|
|
|
+ model.addAttribute("zghfjlist", zghfjlist);
|
|
|
+ }
|
|
|
+ return "ggfwxxgl/jdtxxx/jdtxxxview";
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/add")
|
|
|
+ public String add(Model model) {
|
|
|
+ UserEntity user = securityMgr.getCurrUser();
|
|
|
+ model.addAttribute("user", user);
|
|
|
+
|
|
|
+ if (SecUtils.getCurrUser() != null) {
|
|
|
+ List<CodeEntity> list = securityMgr.codeService().findValidCodesByGroupCodeAndCity(Constants.GROUP_CODE_SZD, GlobalData.CITY_CODE);
|
|
|
+ model.addAttribute("sz", list.size() == 1 ? list.get(0).getId() : "");
|
|
|
+ if (list.size() == 1) {
|
|
|
+ List<GkEntity> gklist = gkService.findBySzd(list.get(0).getId());
|
|
|
+ model.addAttribute("gk", gklist.size() == 1 ? gklist.get(0).getId() : "");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ Date today = new Date();
|
|
|
+ model.addAttribute("sqrq", dateTimeFormat.format(today));
|
|
|
+
|
|
|
+ if (GlobalData.DEPLOY_MODE.equals(Constants.DEPLOY_MODE_CITY)) {
|
|
|
+ model.addAttribute("ssFlag", "1");
|
|
|
+ } else {
|
|
|
+ model.addAttribute("ssFlag", "0");
|
|
|
+ }
|
|
|
+ return "ggfwxxgl/jdtxxx/jdtxxxadd";
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存附件
|
|
|
+ @RequestMapping(value = "/saveFile")
|
|
|
+ @ResponseBody
|
|
|
+ public WebJsonResult saveFile(@RequestParam("file") List<MultipartFile> file, String fjFlag, Model model, HttpServletRequest request, HttpServletResponse response) {
|
|
|
+ WebJsonResult wr = success();
|
|
|
+ if (file != null && file.size() > 0) {
|
|
|
+ JdjcfjEntity fjEntity = new JdjcfjEntity();
|
|
|
+ for (int i = 0; i < file.size(); i++) {
|
|
|
+ MultipartFile f = file.get(i);
|
|
|
+ if (f.getSize() > 0) {
|
|
|
+ AccessoryEntity acc = accessoryService.saveFile(f, "jdtx");
|
|
|
+ if (acc != null) {
|
|
|
+ fjEntity.setFjid(acc.getId());
|
|
|
+ fjEntity.setFjmc(acc.getName());
|
|
|
+ fjEntity.setType(fjFlag);
|
|
|
+ fjEntity = jdjcfjService.save(fjEntity);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ wr.setAttr("acc", fjEntity);
|
|
|
+ } else {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ wr.setMessage("请上传附件或上传的文件不能为空文件!");
|
|
|
+ }
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/delFile")
|
|
|
+ @ResponseBody
|
|
|
+ public WebJsonResult delFile(String accid, Model model) {
|
|
|
+ WebJsonResult wr = success();
|
|
|
+ try {
|
|
|
+ JdjcfjEntity entity = jdjcfjService.findOne(accid);
|
|
|
+ if (entity != null) {
|
|
|
+ AccessoryEntity acc = accessoryService.findOne(entity.getFjid());
|
|
|
+ if (acc != null) {
|
|
|
+ accessoryService.delete(acc);
|
|
|
+ if (entity != null) {
|
|
|
+ String path = acc.getFilepath() + acc.getFilename();
|
|
|
+ File file = new File(path);
|
|
|
+ if (file.isFile() && file.exists()) {
|
|
|
+ file.delete();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ jdjcfjService.delete(entity);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ wr.setSuccess(false);
|
|
|
+ }
|
|
|
+ return wr;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 隐患大类
|
|
|
+ @RequestMapping(value = "/selectYhdl")
|
|
|
+ @ResponseBody
|
|
|
+ public List<CodeEntity> selectYhdl(Model model) {
|
|
|
+ List<CodeEntity> list = securityMgr.codeService().findValidCodesByGroupCode("YHDL");
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 隐患中类
|
|
|
+ @RequestMapping(value = "/selectYhzl")
|
|
|
+ @ResponseBody
|
|
|
+ public List<CodeEntity> selectYhzl(Model model, String dydlid) {
|
|
|
+ List<CodeEntity> list = securityMgr.codeService().findByPid(dydlid);
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 隐患分类
|
|
|
+ @RequestMapping(value = "/selectYhfl")
|
|
|
+ @ResponseBody
|
|
|
+ public List<CodeEntity> selectYhfl(Model model) {
|
|
|
+ List<CodeEntity> list = securityMgr.codeService().findValidCodesByGroupCode("YHFL");
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 隐患区域
|
|
|
+ @RequestMapping(value = "/selectYhqy")
|
|
|
+ @ResponseBody
|
|
|
+ public List<CodeEntity> selectYhqy(Model model) {
|
|
|
+ List<CodeEntity> list = securityMgr.codeService().findValidCodesByGroupCode("YHQY");
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 隐患级别
|
|
|
+ @RequestMapping(value = "/selectYhjb")
|
|
|
+ @ResponseBody
|
|
|
+ public List<CodeEntity> selectYhjb(Model model) {
|
|
|
+ List<CodeEntity> list = securityMgr.codeService().findValidCodesByGroupCode("YHJB");
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|