ClassitemImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. package nc.impl.wa.rpt;
  2. import java.sql.ResultSet;
  3. import java.sql.SQLException;
  4. import java.util.List;
  5. import java.util.Vector;
  6. import nc.bs.dao.BaseDAO;
  7. import nc.hr.utils.PubEnv;
  8. import nc.hr.utils.SQLHelper;
  9. import nc.itf.hr.wa.IClassitemQry;
  10. import nc.itf.org.IOrgConst;
  11. import nc.jdbc.framework.SQLParameter;
  12. import nc.jdbc.framework.processor.BeanListProcessor;
  13. import nc.jdbc.framework.processor.ResultSetProcessor;
  14. import nc.vo.hr.pub.FormatVO;
  15. import nc.vo.pub.BusinessException;
  16. import nc.vo.wa.classitem.WaClassItemVO;
  17. import nc.vo.wa.func.WherePartUtil;
  18. import nc.vo.wa.item.WaItemVO;
  19. import nc.vo.wa.paydata.WaPaydataDspVO;
  20. import nc.vo.wa.pub.WaLoginContext;
  21. import nc.vo.wa.pub.WaLoginVO;
  22. import nc.wa.smartmodel.provider.util.WaGlobalVO;
  23. import nccloud.commons.lang.StringUtils;
  24. /**
  25. * 薪资项目 查询 实现类
  26. *
  27. * @author suihang
  28. * @version 最后修改日期 2011-1-4
  29. * @see
  30. * @since
  31. */
  32. public class ClassitemImpl implements IClassitemQry{
  33. private final BaseDAO dao = new BaseDAO();
  34. /**
  35. * 根据单条薪资类别参数查询薪资项目
  36. * @param waGlobalVO 薪资类别参数
  37. * @return ItemVO[] 薪资项目
  38. * @throws BusinessException
  39. */
  40. public WaItemVO[] queryItemInfoWithPower(WaGlobalVO waGlobalVO,int type) throws BusinessException{
  41. if(waGlobalVO==null){
  42. //当薪资类别参数为空时,不进行查询。即默认薪资项目集合也为空。
  43. return null;
  44. }
  45. StringBuffer sqlB = new StringBuffer();
  46. sqlB.append(" select distinct wa_item.pk_wa_item, ");
  47. sqlB.append(" "+ SQLHelper.getMultiLangNameColumn("wa_classitem.name")+ " , ");
  48. sqlB.append(" wa_item.code, ");
  49. sqlB.append(" wa_item.itemkey, ");
  50. sqlB.append(" wa_classitemdsp.displayseq, ");
  51. sqlB.append(" wa_classitem.idisplayseq ");
  52. sqlB.append(" from wa_classitem ");
  53. sqlB.append(" left outer join wa_classitemdsp ");
  54. sqlB.append(" on wa_classitem.pk_wa_class = wa_classitemdsp.pk_wa_class ");
  55. sqlB.append(" and wa_classitem.cyear = wa_classitemdsp.cyear ");
  56. sqlB.append(" and wa_classitem.cperiod = wa_classitemdsp.cperiod ");
  57. sqlB.append(" and wa_classitem.pk_wa_classitem = wa_classitemdsp.pk_wa_classitem ");
  58. sqlB.append(" and wa_classitemdsp.pk_user = '" + waGlobalVO.getCurUserid() + "' ,");
  59. sqlB.append(" wa_item ");
  60. sqlB.append(" where wa_classitem.pk_wa_item = wa_item.pk_wa_item");
  61. sqlB.append(" and wa_classitem.pk_wa_class = '" + waGlobalVO.getWaClassPK() + "' ");
  62. sqlB.append(" and wa_classitem.cyear = '" + waGlobalVO.getWaYear() + "' ");
  63. sqlB.append(" and wa_classitem.cperiod = '" + waGlobalVO.getWaPeriod() + "' ");
  64. sqlB.append(" and wa_item.pk_wa_item in (");
  65. // 根据薪资期间、薪资类别、所选组织以及登录人权限筛选
  66. sqlB.append(getItemPkSqlByUseridClassid( new WaGlobalVO[] { waGlobalVO }));
  67. sqlB.append(" )");
  68. if(type==0){
  69. sqlB.append(" and wa_item.iitemtype = 0 ");
  70. }
  71. // 与薪资发放项目顺序保持一致20200225
  72. //sqlB.append(" order by wa_classitemdsp.displayseq asc");
  73. sqlB.append(" order by wa_classitem.idisplayseq ");
  74. return (WaItemVO[]) dao.executeQuery(sqlB.toString(), new ResultSetProcessor() {
  75. private static final long serialVersionUID = 3623741235217336426L;
  76. /**
  77. * 封装结果集,返回WaItemVO[]形式结果
  78. */
  79. public Object handleResultSet(ResultSet rs) throws SQLException {
  80. Vector<WaItemVO> vector = new Vector<WaItemVO>();
  81. while (rs.next()) {
  82. WaItemVO itemVO = new WaItemVO();
  83. itemVO.setPk_wa_item(rs.getString(1));
  84. itemVO.setName(rs.getString(2));
  85. itemVO.setCode(rs.getString(3));
  86. itemVO.setItemkey(rs.getString(4));
  87. vector.add(itemVO);
  88. }
  89. return vector.size() > 0 ? vector.toArray(new WaItemVO[vector.size()]) : null;
  90. }
  91. });
  92. }
  93. @Override
  94. public WaItemVO[] queryItemInfoWithCondition(WaGlobalVO waGlobalVO,String condition)
  95. throws BusinessException {
  96. if(waGlobalVO==null){
  97. //当薪资类别参数为空时,不进行查询。即默认薪资项目集合也为空。
  98. return null;
  99. }
  100. StringBuffer sqlB = new StringBuffer();
  101. sqlB.append(" select distinct wa_item.pk_wa_item, ");
  102. sqlB.append(" "+ SQLHelper.getMultiLangNameColumn("wa_classitem.name")+ " , ");
  103. sqlB.append(" wa_item.code, ");
  104. sqlB.append(" wa_item.itemkey, ");
  105. sqlB.append(" wa_item.idisplayseq ");
  106. sqlB.append(" from wa_classitem ,wa_item");
  107. sqlB.append(" where wa_classitem.pk_wa_item = wa_item.pk_wa_item");
  108. sqlB.append(" and wa_classitem.pk_wa_class = '" + waGlobalVO.getWaClassPK() + "' ");
  109. sqlB.append(" and wa_classitem.cyear = '" + waGlobalVO.getWaYear() + "' ");
  110. sqlB.append(" and wa_classitem.cperiod = '" + waGlobalVO.getWaPeriod() + "' ");
  111. if(!StringUtils.isEmpty(condition)){
  112. sqlB.append(" and wa_item."+condition);
  113. }
  114. sqlB.append(" order by wa_item.idisplayseq ,code");
  115. return (WaItemVO[]) dao.executeQuery(sqlB.toString(), new ResultSetProcessor() {
  116. private static final long serialVersionUID = 3623741235217336426L;
  117. /**
  118. * 封装结果集,返回WaItemVO[]形式结果
  119. */
  120. public Object handleResultSet(ResultSet rs) throws SQLException {
  121. Vector<WaItemVO> vector = new Vector<WaItemVO>();
  122. while (rs.next()) {
  123. WaItemVO itemVO = new WaItemVO();
  124. itemVO.setPk_wa_item(rs.getString(1));
  125. itemVO.setName(rs.getString(2));
  126. itemVO.setCode(rs.getString(3));
  127. itemVO.setItemkey(rs.getString(4));
  128. vector.add(itemVO);
  129. }
  130. return vector.size() > 0 ? vector.toArray(new WaItemVO[vector.size()]) : null;
  131. }
  132. });
  133. }
  134. @Override
  135. public WaItemVO[] queryItemInfoWithClass(WaGlobalVO waGlobalVO,int type)
  136. throws BusinessException {
  137. if(waGlobalVO==null){
  138. //当薪资类别参数为空时,不进行查询。即默认薪资项目集合也为空。
  139. return null;
  140. }
  141. StringBuffer sqlB = new StringBuffer();
  142. sqlB.append(" select distinct wa_item.pk_wa_item, ");
  143. sqlB.append(" "+ SQLHelper.getMultiLangNameColumn("wa_item.name")+ " , ");
  144. sqlB.append(" wa_item.code, ");
  145. sqlB.append(" wa_item.itemkey, ");
  146. sqlB.append(" wa_item.idisplayseq ");
  147. sqlB.append(" from wa_classitem ,wa_item");
  148. sqlB.append(" where wa_classitem.pk_wa_item = wa_item.pk_wa_item");
  149. sqlB.append(" and wa_classitem.pk_wa_class = '" + waGlobalVO.getWaClassPK() + "' ");
  150. sqlB.append(" and wa_classitem.cyear = '" + waGlobalVO.getWaYear() + "' ");
  151. if(type==0){
  152. sqlB.append(" and wa_item.iitemtype = 0 ");
  153. }
  154. sqlB.append(" order by wa_item.idisplayseq asc");
  155. return (WaItemVO[]) dao.executeQuery(sqlB.toString(), new ResultSetProcessor() {
  156. private static final long serialVersionUID = 3623741235217336426L;
  157. /**
  158. * 封装结果集,返回WaItemVO[]形式结果
  159. */
  160. public Object handleResultSet(ResultSet rs) throws SQLException {
  161. Vector<WaItemVO> vector = new Vector<WaItemVO>();
  162. while (rs.next()) {
  163. WaItemVO itemVO = new WaItemVO();
  164. itemVO.setPk_wa_item(rs.getString(1));
  165. itemVO.setName(rs.getString(2));
  166. itemVO.setCode(rs.getString(3));
  167. itemVO.setItemkey(rs.getString(4));
  168. vector.add(itemVO);
  169. }
  170. return vector.size() > 0 ? vector.toArray(new WaItemVO[vector.size()]) : null;
  171. }
  172. });
  173. }
  174. /**
  175. * 根据多条薪资类别参数查询薪资项目
  176. * @param waGlobalVOs 薪资类别参数
  177. * @return ItemVO[] 薪资项目
  178. * @throws BusinessException
  179. */
  180. public WaItemVO[] queryItemInfoWithPowerForMutiClasses(WaGlobalVO[] waGlobalVOs,int type) throws BusinessException{
  181. if(waGlobalVOs==null){
  182. return null;
  183. }
  184. WaGlobalVO waGlobalVO = waGlobalVOs[0];
  185. StringBuffer sqlB = new StringBuffer();
  186. sqlB.append(" select distinct wa_item.pk_wa_item, ");
  187. sqlB.append(" "+ SQLHelper.getMultiLangNameColumn("wa_item.name")+ " , ");
  188. sqlB.append(" wa_item.code, ");
  189. sqlB.append(" wa_item.itemkey ");
  190. sqlB.append(" from wa_item where ");
  191. if (waGlobalVO.getWaClassPK() == null) {
  192. //没有薪资类别 就显示所选组织的所有薪资项目
  193. sqlB.append(" (wa_item.pk_org= '"+waGlobalVO.getCurPk_org()+"' or wa_item.pk_org='"+waGlobalVO.getCurPk_group()+"' or wa_item.pk_org='"+IOrgConst.GLOBEORGTYPE+"' ) " );
  194. }else{
  195. //如果有薪资类别,根据薪资期间、薪资类别、所选组织以及登录人权限筛选
  196. sqlB.append(" wa_item.pk_wa_item in (");
  197. sqlB.append(getItemPkSqlByUseridClassid(waGlobalVOs));
  198. sqlB.append(" )");
  199. }
  200. if(type==0){
  201. sqlB.append(" and wa_item.iitemtype = 0 ");
  202. }
  203. return (WaItemVO[]) dao.executeQuery(sqlB.toString(), new ResultSetProcessor() {
  204. private static final long serialVersionUID = 3623741235217336426L;
  205. /**
  206. * 封装结果集,返回WaItemVO[]形式结果
  207. */
  208. public Object handleResultSet(ResultSet rs) throws SQLException {
  209. Vector<WaItemVO> vector = new Vector<WaItemVO>();
  210. while (rs.next()) {
  211. WaItemVO itemVO = new WaItemVO();
  212. itemVO.setPk_wa_item(rs.getString(1));
  213. itemVO.setName(rs.getString(2));
  214. itemVO.setCode(rs.getString(3));
  215. itemVO.setItemkey(rs.getString(4));
  216. vector.add(itemVO);
  217. }
  218. return vector.size() > 0 ? vector.toArray(new WaItemVO[vector.size()]) : null;
  219. }
  220. });
  221. }
  222. /**
  223. * 根据薪资期间和薪资类别找出登录人的项目权限 suihang 2010-12-23
  224. *
  225. * @param waGlobalVOs
  226. * @return
  227. */
  228. private String getItemPkSqlByUseridClassid(WaGlobalVO[] waGlobalVOs) {
  229. String userid = waGlobalVOs[0].getCurUserid();
  230. String pk_org = waGlobalVOs[0].getCurPk_org();
  231. String cyear = waGlobalVOs[0].getWaYear();
  232. String cperiod = waGlobalVOs[0].getWaPeriod();
  233. StringBuffer sqlB = new StringBuffer();
  234. sqlB.append(" select wa_item.pk_wa_item ");
  235. sqlB.append(" from wa_item ");
  236. sqlB.append(" where wa_item.pk_wa_item in ");
  237. /**
  238. * 关联wa_itempower表(即与登录人员角色关联)
  239. */
  240. sqlB.append(" ( select distinct wa_itempower.pk_wa_item from wa_itempower ,wa_classitem where wa_itempower.pk_wa_item = wa_classitem.pk_wa_item ");
  241. sqlB.append(" and ( wa_itempower.pk_subject in ( select pk_role from sm_user_role where cuserid = '"+userid+"' ) or pk_subject = '"+userid+"' )");
  242. sqlB.append(" and wa_classitem.pk_org = '"+pk_org+"' ");
  243. sqlB.append(" and wa_classitem.pk_wa_class in (" + FormatVO.formatArrayToString(waGlobalVOs, WaGlobalVO.WACLASSPK) + ") ");
  244. sqlB.append(" and wa_classitem.cyear = '" + cyear + "' ");
  245. sqlB.append(" and wa_classitem.cperiod = '" + cperiod + "' )");
  246. /*sqlB.append(" ( select distinct wa_classitem.pk_wa_item from wa_classitem where wa_item.pk_wa_item = wa_classitem.pk_wa_item ");
  247. sqlB.append(" and wa_classitem.pk_wa_class in (" + FormatVO.formatArrayToString(waGlobalVOs, WaGlobalVO.WACLASSPK) + ") ");
  248. sqlB.append(" and wa_classitem.pk_org = '"+pk_org+"' ");
  249. sqlB.append(" and wa_classitem.cyear = '" + cyear + "' ");
  250. sqlB.append(" and wa_classitem.cperiod = '" + cperiod + "' )");*/
  251. return sqlB.toString();
  252. }
  253. /**
  254. * 根据方案主键查询薪资发放设置为通用项目的数据
  255. * @param pk_wa_class
  256. * @return
  257. * @throws BusinessException
  258. */
  259. @Override
  260. public List<WaPaydataDspVO> queryWaPaydataDspVOByPkWaClass(String pk_wa_class) throws BusinessException {
  261. String sql = "select * from wa_paydatadsp where type = 0 and pk_wa_class = '"+pk_wa_class+"' and bshow = 'Y' and iswaitem = 'Y' order by displayseq";
  262. List<WaPaydataDspVO> list = (List<WaPaydataDspVO>) dao.executeQuery(sql, new BeanListProcessor(WaPaydataDspVO.class));
  263. return list;
  264. }
  265. /**
  266. * 查询用户设置显示的项目
  267. *
  268. * wa_classitemdsp 该表已经不用了
  269. *
  270. * @author liangxr on 2010-7-2
  271. * @param loginVO
  272. * @return
  273. * @throws BusinessException
  274. */
  275. public WaClassItemVO[] getUserShowClassItemVOs(WaLoginContext loginVO) throws BusinessException {
  276. String condition = " wa_classitem.pk_wa_classitem not in (select pk_wa_classitem from wa_classitemdsp "
  277. + "where pk_wa_class = '" + loginVO.getWaLoginVO().getPk_wa_class() + "' and cyear = '" + loginVO.getWaLoginVO().getCyear()
  278. + "' and cperiod = '" + loginVO.getWaLoginVO().getCperiod()+ "' and pk_user = '" + PubEnv.getPk_user()
  279. + "' and bshow = 'N' )";
  280. WaClassItemVO[] classitems = testgetRoleClassItemVOs(loginVO.getWaLoginVO(), condition);
  281. return classitems;
  282. }
  283. /**
  284. * 获取薪资发放项目
  285. *
  286. * @author liangxr on 2010-5-13
  287. * @param waLoginVO
  288. * @return
  289. * @throws BusinessException
  290. */
  291. private WaClassItemVO[] testgetRoleClassItemVOs(WaLoginVO waLoginVO, String condition) throws BusinessException {
  292. StringBuffer sqlBuffer = new StringBuffer();
  293. sqlBuffer.append(" select wa_item.itemkey, wa_item.iitemtype,wa_item.defaultflag, ");
  294. sqlBuffer.append(" wa_item.ifldwidth,wa_item.category_id, ");
  295. sqlBuffer.append(" wa_classitem.*, 'Y' editflag,");
  296. sqlBuffer.append(" 'Y' as showflag,");
  297. sqlBuffer.append(" wa_classitem.idisplayseq as idisplayseq, ");
  298. sqlBuffer.append("itempower.editflag ");
  299. sqlBuffer.append("from wa_classitem , wa_item,");
  300. sqlBuffer.append("(SELECT pk_wa_item,MAX(editflag) as editflag");
  301. sqlBuffer.append(" FROM wa_itempower ");
  302. // 判断是否是多次发放
  303. // WaClassVO parentvo = NCLocator.getInstance().lookup(IWaClass.class)
  304. // .queryParentClass(waLoginVO.getPk_wa_class(),
  305. // waLoginVO.getCyear(), waLoginVO.getCperiod());
  306. sqlBuffer.append(" WHERE pk_wa_class = '" + waLoginVO.getPk_prnt_class() + "'");
  307. sqlBuffer.append(" AND pk_group ='" + waLoginVO.getPk_group() + "'");
  308. // 20160104 shenliangc NCdp205568081 已审批通过的发放申请通知消息,打开单据后,单据子表的审批项目丢失
  309. // 历史遗留问题,通知消息双击打开发放申请节点,查询审批项目时waLoginVO.getPk_org()得到的是系统默认主组织,而不是正确的方案主组织。
  310. sqlBuffer.append(" AND pk_org = (select pk_org from wa_waclass where pk_wa_class = '"
  311. + waLoginVO.getPk_prnt_class() + "')");
  312. // sqlBuffer.append(" AND pk_org = '"+waLoginVO.getPk_org()+"'");
  313. sqlBuffer.append(" AND ( pk_subject IN(SELECT pk_role ");
  314. sqlBuffer.append(" FROM sm_user_role ");
  315. sqlBuffer.append(" WHERE cuserid = '" + PubEnv.getPk_user() + "'");
  316. sqlBuffer.append(" ) or pk_subject = '" + PubEnv.getPk_user() + "') ");
  317. sqlBuffer.append(" GROUP BY pk_wa_item ) as itempower");
  318. sqlBuffer.append(" where wa_classitem.pk_wa_item = wa_item.pk_wa_item ");
  319. sqlBuffer.append(" and wa_classitem.pk_wa_item = itempower.pk_wa_item ");
  320. sqlBuffer.append(" and wa_classitem.pk_wa_class = ? ");
  321. sqlBuffer.append(" and wa_classitem.cyear = ? and wa_classitem.cperiod = ? ");
  322. sqlBuffer.append(WherePartUtil.formatAddtionalWhere(condition));
  323. sqlBuffer.append(" order by wa_classitem.idisplayseq");
  324. SQLParameter parameter = this.getCommonParameter(waLoginVO);
  325. List<WaClassItemVO> list = (List<WaClassItemVO>) dao.executeQuery(sqlBuffer.toString(), parameter, new BeanListProcessor(WaClassItemVO.class));
  326. return list.toArray(new WaClassItemVO[0]);
  327. }
  328. /**
  329. * pk_wa_class year, period
  330. *
  331. * @author zhangg on 2009-12-2
  332. * @param waLoginVO
  333. * @return
  334. */
  335. public SQLParameter getCommonParameter(WaLoginVO waLoginVO) {
  336. SQLParameter parameter = new SQLParameter();
  337. parameter.addParam(waLoginVO.getPk_wa_class());
  338. parameter.addParam(waLoginVO.getCyear());
  339. parameter.addParam(waLoginVO.getCperiod());
  340. return parameter;
  341. }
  342. }