YYC
2023-11-01 b04a7e554c7d7c5ffb6305915bb142ed26d0cabf
igds-recir/src/main/java/com/ld/igds/drug/service/HDrugService.java
@@ -1,369 +1,241 @@
package com.ld.igds.drug.service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import com.bstek.bdf2.core.model.DefaultDept;
import com.bstek.bdf2.core.orm.hibernate.HibernateDao;
import com.bstek.bdf2.core.orm.jdbc.JdbcDao;
import com.bstek.dorado.data.provider.Page;
import com.ld.igds.constant.RedisConst;
import com.ld.igds.models.Drug;
import com.ld.igds.models.DrugApply;
import com.ld.igds.models.DrugInout;
import com.ld.igds.models.DrugLog;
import com.ld.igds.sys.service.SysDeptService;
import com.ld.igds.util.ContextUtil;
import com.ld.igds.util.RedisUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * 后期调整为Hibernate
 * @author Andy
 * 药剂管理
 *
 * @author Andy
 */
@Repository
public class HDrugService extends JdbcDao {
@Service
public class HDrugService extends HibernateDao {
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private SysDeptService sysDeptService;
   public void pageDrug(Page<Drug> page, Map<String, Object> param)
         throws Exception {
    /**
     * 缓存 药剂ID
     */
    public static final String CACHE_DRUG_ID = "DRUG_ID";
      List<Object> args = new ArrayList<Object>();
    /**
     * 分页查询药剂信息
     *
     * @param page
     * @param param
     * @throws Exception
     */
    public void pageDrug(Page<Drug> page, Map<String, Object> param) throws Exception {
        StringBuffer hql = new StringBuffer();
        Map<String, Object> args = new HashMap<>();
        hql.append(" from " + Drug.class.getName() + " where companyId=:companyId");
        args.put("companyId", ContextUtil.getCompanyId());
        if (null != param) {
            buildHql(hql, param, args);
        }
        hql.append(" order by id ");
        String countHql = "select count(*) " + hql.toString();
        this.pagingQuery(page, String.valueOf(hql), countHql, args);
    }
      args.add(ContextUtil.getCompanyId());
    /**
     * 获取药剂列表
     *
     * @param companyId
     * @return
     */
    public List<Drug> listDrug(String companyId, Map<String, Object> param) {
        StringBuffer hql = new StringBuffer(" from " + Drug.class.getName() + " where companyId=:companyId");
        Map<String, Object> args = new HashMap<>();
        args.put("companyId", companyId);
        if (null != param) {
            buildHql(hql, param, args);
        }
        hql.append(" order by id desc");
        return this.query(hql.toString(), args);
      String sql = "select * from D_DRUG where company_id_ =? ";
    }
      if (null != param) {
         String str = (String) param.get("name");
         if (StringUtils.isNotEmpty(str)) {
            sql += " and name_ like ?";
            args.add("%" + str + "%");
         }
      }
      sql += " order by name_ ";
    /**
     * 更新或添加药剂信息
     *
     * @param data
     * @return
     */
    public String saveDrug(Drug data) {
        if (null == data.getCompanyId()) {
            data.setCompanyId(ContextUtil.getCompanyId());
        }
        if (null == data.getDeptId()) {
            data.setDeptId(ContextUtil.subDeptId(null));
        }
        DefaultDept dept = sysDeptService.getDeptById(data.getDeptId());
        data.setDeptName(dept.getName());
        Session session = this.getSessionFactory().openSession();
        data.setUpdateTime(new Date());
        data.setUpdateUser(ContextUtil.getLoginUserCName());
        try {
            if (null == data.getId()) {
                String id = createId(data.getCompanyId(), data.getCgrq());
                data.setId(id);
                session.save(data);
            } else {
                session.saveOrUpdate(data);
            }
      this.pagingQuery(page, sql, args.toArray(), new DrugRowMapper());
   }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.flush();
            session.close();
        }
        return null;
    }
   public List<Drug> listDrug(String name) {
    /**
     * 删除药剂信息
     *
     * @param data
     * @return
     */
    public String delDrug(Drug data) {
        Session session = this.getSessionFactory().openSession();
        try {
            if (null != data.getId()) {
                session.delete(data);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.flush();
            session.close();
        }
        return null;
    }
      String sql = "select * from D_DRUG where company_id_ =? ";
      List<Object> args = new ArrayList<Object>();
    public void pageDrugInout(Page<DrugInout> page, Map<String, Object> param) {
      args.add(ContextUtil.getCompanyId());
    }
      if (StringUtils.isNotEmpty(name)) {
         sql += " and name_ like ?";
         args.add("%" + name + "%");
      }
    public String delDrugInout(DrugInout data) {
      sql += " order by name_ ";
        return null;
    }
      return this.getJdbcTemplate().query(sql, args.toArray(),
            new DrugRowMapper());
   }
    public String updateDrugInout(DrugInout data) {
   public String delDrug(Drug data) {
        return null;
    }
      if (null == data.getId()) {
         return null;
      }
    private String addDrugInout(DrugInout data) {
        return null;
    }
      String sql = " delete from D_DRUG where ID_ =?";
      this.getJdbcTemplate().update(sql, new Object[] { data.getId() });
    public String auditDrugApply(DrugApply data) {
      return null;
   }
        if (null == data.getAuditUser()) {
            data.setAuditUser(ContextUtil.getLoginUserCName());
        }
        if (null == data.getAuditTime()) {
            data.setApplyTime(new Date());
        }
   public String updateDrug(Drug data) {
      data.setUpdateTime(new Date());
      data.setUpdateUser(ContextUtil.getLoginUserCName());
      if (null == data.getId()) {
         return this.addDrug(data);
      }
        if (data.getApplyUser().equals(data.getAuditUser())) {
            return "系统:审核人和申请人不可为同一个人。";
        }
      String sql = " update D_DRUG set name_=?," + "spec_=?," + "dosage_=?,"
            + "count_=?," + "update_User_=?," + "update_Time_=?,"
            + "remarks_=? where id_=?";
        return updateDrugApply(data);
      this.getJdbcTemplate().update(
            sql,
            new Object[] { data.getName(), data.getSpec(),
                  data.getDosage(), data.getCount(),
                  data.getUpdateUser(), data.getUpdateTime(),
                  data.getRemarks(), data.getId() });
    }
      return null;
   }
    public String updateDrugApply(DrugApply data) {
   private String addDrug(Drug data) {
      data.setId(ContextUtil.getUUID());
      data.setCompanyId(ContextUtil.getCompanyId());
        return null;
    }
      String sql = " insert into D_DRUG(id_,company_ID_,name_,spec_,dosage_,count_,update_User_,update_Time_,remarks_) "
            + " values(?,?,?,?,?,?,?,?,?)";
    private String addDrugApply(DrugApply data) {
        return null;
    }
      this.getJdbcTemplate().update(
            sql,
            new Object[] { data.getId(), data.getCompanyId(),
                  data.getName(), data.getSpec(), data.getDosage(),
                  data.getCount(), data.getUpdateUser(),
                  data.getUpdateTime(), data.getRemarks() });
    public String delDrugApply(DrugApply data) {
        return null;
    }
      return null;
   }
    public void pageDrugApply(Page<DrugApply> page, Map<String, Object> param) {
   public void pageDrugInout(Page<DrugInout> page, Map<String, Object> param) {
      List<Object> args = new ArrayList<Object>();
    }
      args.add(ContextUtil.getCompanyId());
    public String createId(String companyId, Date time) {
      String sql = "select * from D_DRUG_INOUT where company_id_ =? ";
        String timeKey = DateFormatUtils.format(time, "yyyyMMdd");
        // 从缓存中获取已有的组织编码
        String cacheKey = RedisConst.buildKey(companyId, HDrugService.CACHE_DRUG_ID);
      if (null != param) {
         String str = (String) param.get("name");
        String cacheId = (String) redisUtil.get(cacheKey);
         if (StringUtils.isNotEmpty(str)) {
            sql += " and person_ like ?";
            args.add("%" + str + "%");
         }
        if (null != cacheId && cacheId.indexOf(timeKey) >= 0) {
            String temp = cacheId.substring(cacheId.length() - 3);
            Integer i = Integer.valueOf(temp);
            cacheId = timeKey + String.format("%03d", ++i);
        } else {
            List<Drug> result = listDrug(companyId, null);
            if (null == result || result.size() == 0) {
                cacheId = timeKey + "001";
            } else {
                Drug drug = result.get(0);
                String temp = drug.getId().substring(drug.getId().length() - 3);
                Integer i = Integer.valueOf(temp);
                cacheId = timeKey + String.format("%03d", ++i);
            }
        }
        // 更新缓存
        redisUtil.set(cacheKey, cacheId);
         str = (String) param.get("type");
         if (StringUtils.isNotEmpty(str)) {
            sql += " and type_ = ?";
            args.add(str);
         }
      }
        return cacheId;
    }
      sql += " order by update_time_ desc ";
      this.pagingQuery(page, sql, args.toArray(), new DrugInoutRowMapper());
   }
   public String delDrugInout(DrugInout data) {
      if (null == data.getId()) {
         return null;
      }
      String sql = " delete from D_DRUG_INOUT where ID_ =?";
      this.getJdbcTemplate().update(sql, new Object[] { data.getId() });
      return null;
   }
   public String updateDrugInout(DrugInout data) {
      data.setUpdateTime(new Date());
      data.setUpdateUser(ContextUtil.getLoginUserCName());
      if (null == data.getId()) {
         return this.addDrugInout(data);
      }
      String sql = " update D_DRUG_INOUT set DRUG_ID_=?," + "TIME_=?,"
            + "PERSON_=?," + "REASON_=?," + "COUNT_=?," + "TYPE_=?,"
            + "UPDATE_USER_=?,UPDATE_TIME_=?,REMARKS_=? where id_=?";
      this.getJdbcTemplate()
            .update(sql,
                  new Object[] { data.getDrugId(), data.getTime(),
                        data.getPerson(), data.getReason(),
                        data.getCount(), data.getType(),
                        data.getUpdateUser(), data.getUpdateTime(),
                        data.getRemarks(), data.getId() });
      return null;
   }
   private String addDrugInout(DrugInout data) {
      data.setId(ContextUtil.getUUID());
      data.setCompanyId(ContextUtil.getCompanyId());
      String sql = "insert into D_DRUG_INOUT(ID_,COMPANY_ID_,DRUG_ID_,TIME_,PERSON_,REASON_,COUNT_,TYPE_,UPDATE_USER_,UPDATE_TIME_,REMARKS_)"
            + " values(?,?,?,?,?,?,?,?,?,?,?)";
      this.getJdbcTemplate().update(
            sql,
            new Object[] { data.getId(), data.getCompanyId(),
                  data.getDrugId(), data.getTime(), data.getPerson(),
                  data.getReason(), data.getCount(), data.getType(),
                  data.getUpdateUser(), data.getUpdateTime(),
                  data.getRemarks() });
      return null;
   }
   public String delDrugLog(DrugLog data) {
      if (null == data.getId()) {
         return null;
      }
      String sql = " delete from D_DRUG_LOG where ID_ =?";
      this.getJdbcTemplate().update(sql, new Object[] { data.getId() });
      return null;
   }
   public String updateDrugLog(DrugLog data) {
      data.setUpdateTime(new Date());
      data.setUpdateUser(ContextUtil.getLoginUserCName());
      if (null == data.getId()) {
         return this.addDrugLog(data);
      }
      String sql = " update D_DRUG_LOG set DEPOT_ID_=?,"
            + "START_=?,"
            + "END_=?,"
            + "USER_=?,"
            + "UPDATE_USER_=?,UPDATE_TIME_=?,REMARKS_=?,DOSE_=? where ID_=?";
      this.getJdbcTemplate().update(
            sql,
            new Object[] { data.getDepotId(), data.getStart(),
                  data.getEnd(), data.getUser(), data.getUpdateUser(),
                  data.getUpdateTime(), data.getRemarks(),
                  data.getDose(), data.getId() });
      return null;
   }
   private String addDrugLog(DrugLog data) {
      data.setId(ContextUtil.getUUID());
      data.setCompanyId(ContextUtil.getCompanyId());
      String sql = "insert into D_DRUG_LOG(ID_,COMPANY_ID_,DEPOT_ID_,START_,END_,USER_,UPDATE_USER_,UPDATE_TIME_,REMARKS_,DOSE_)"
            + " values(?,?,?,?,?,?,?,?,?,?)";
      this.getJdbcTemplate()
            .update(sql,
                  new Object[] { data.getId(), data.getCompanyId(),
                        data.getDepotId(), data.getStart(),
                        data.getEnd(), data.getUser(),
                        data.getUpdateUser(), data.getUpdateTime(),
                        data.getRemarks(), data.getDose() });
      return null;
   }
   public void pageDrugLog(Page<DrugLog> page, Map<String, Object> param) {
      List<Object> args = new ArrayList<Object>();
      args.add(ContextUtil.getCompanyId());
      String sql = "select * from D_DRUG_LOG where company_id_ =? ";
      if (null != param) {
         String str = (String) param.get("name");
         if (StringUtils.isNotEmpty(str)) {
            sql += " and user_ = ?";
            args.add(str);
         }
      }
      sql += " order by start_ desc ";
      this.pagingQuery(page, sql, args.toArray(), new DrugLogRowMapper());
   }
   public String auditDrugApply(DrugApply data) {
      if (null == data.getAuditUser()) {
         data.setAuditUser(ContextUtil.getLoginUserCName());
      }
      if (null == data.getAuditTime()) {
         data.setApplyTime(new Date());
      }
      if (data.getApplyUser().equals(data.getAuditUser())) {
         return "系统:审核人和申请人不可为同一个人。";
      }
      return updateDrugApply(data);
   }
   public String updateDrugApply(DrugApply data) {
      if (null == data.getApplyTime()) {
         data.setAuditTime(new Date());
      }
      if (null == data.getApplyUser()) {
         data.setApplyUser(ContextUtil.getLoginUserCName());
      }
      if (null == data.getId()) {
         return this.addDrugApply(data);
      }
      String sql = " update D_DRUG_APPLY set " + "APPLY_TIME_=?,"
            + "APPLY_USER_=?," + "APPLY_REASON_=?," + "DRUG_NAME_=?,"
            + "COUNT_=?," + "AUDIT_TIME_=?," + "AUDIT_USER_=?,"
            + "AUDIT_REASON_=?," + "STATUS_=?," + "REMARKS_=? "
            + "where ID_=?";
      this.getJdbcTemplate().update(
            sql,
            new Object[] { data.getApplyTime(), data.getApplyUser(),
                  data.getApplyReason(), data.getDrugName(),
                  data.getCount(), data.getAuditTime(),
                  data.getAuditUser(), data.getAuditReason(),
                  data.getStatus(), data.getRemarks(), data.getId() });
      return null;
   }
   private String addDrugApply(DrugApply data) {
      data.setId(ContextUtil.getUUID());
      data.setCompanyId(ContextUtil.getCompanyId());
      data.setStatus(DrugApply.STATUS_APPLY);
      String sql = "INSERT INTO D_DRUG_APPLY(ID_,COMPANY_ID_,APPLY_TIME_,APPLY_USER_,APPLY_REASON_,DRUG_NAME_,COUNT_,AUDIT_TIME_,AUDIT_USER_,AUDIT_REASON_,"
            + "STATUS_,REMARKS_) values(?,?,?,?,?,?,?,?,?,?,?,?)";
      this.getJdbcTemplate().update(
            sql,
            new Object[] { data.getId(), data.getCompanyId(),
                  data.getApplyTime(), data.getApplyUser(),
                  data.getApplyReason(), data.getDrugName(),
                  data.getCount(), data.getAuditTime(),
                  data.getAuditUser(), data.getAuditReason(),
                  data.getStatus(), data.getRemarks() });
      return null;
   }
   public String delDrugApply(DrugApply data) {
      if (null == data.getId()) {
         return null;
      }
      String sql = " delete from D_DRUG_APPLY where ID_ =?";
      this.getJdbcTemplate().update(sql, new Object[] { data.getId() });
      return null;
   }
   public void pageDrugApply(Page<DrugApply> page, Map<String, Object> param) {
      List<Object> args = new ArrayList<Object>();
      args.add(ContextUtil.getCompanyId());
      String sql = "select * from D_DRUG_APPLY where company_id_ =? ";
      if (null != param) {
         String str = (String) param.get("name");
         if (StringUtils.isNotEmpty(str)) {
            sql += " and APPLY_USER_ like ?";
            args.add("%" + str + "%");
         }
      }
      sql += " order by APPLY_TIME_ desc ";
      this.pagingQuery(page, sql, args.toArray(), new DrugApplyRowMapper());
   }
    public void buildHql(StringBuffer hql, Map<String, Object> param, Map<String, Object> args) {
        String str = (String) param.get("id");
        if (StringUtils.isNotEmpty(str)) {
            hql.append(" and id =:id");
            args.put("id", str);
        }
        str = (String) param.get("name");
        if (StringUtils.isNotEmpty(str)) {
            hql.append(" and name like :name");
            args.put("name", "%" + str + "%");
        }
        Date date = (Date) param.get("start");
        if (null != date) {
            hql.append(" and cgrq >=:start");
            args.put("start", date);
        }
        date = (Date) param.get("end");
        if (null != date) {
            hql.append(" and cgrq <=:end");
            args.put("end", date);
        }
    }
}