package com.yc.service.upload; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Map; import org.springframework.dao.DataAccessException; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.support.rowset.SqlRowSet; import org.springframework.stereotype.Service; import com.yc.action.grid.GridUtils; import com.yc.entity.attachment.AttachmentPermissionEntity; import com.yc.service.BaseService; @Service("AttachmentPermissionImpl") public class AttachmentPermissionImpl extends BaseService implements AttachmentPermissionIfc { //读取是否有unid的附件信息 private static final String EXISTS_ATTAC_COMP_INFO="set nocount on ; select top 1 unid from _sys_AttachmentPermission where unid=? and seq = ? "; //下载后更新下载次数 private static final String UPDATE_DOWNLOAD_NUM="set nocount on ; UPDATE _sys_AttachmentPermission SET DownNums=isnull(DownNums,0)+1 where unid=? and seq = ? and usercode=? "; //查看附件后更新ViewNums(查看)次数 private static final String UPDATE_VIEW_NUM="set nocount on ; UPDATE _sys_AttachmentPermission SET ViewNums=isnull(ViewNums,0)+1 where unid=? and seq = ? and usercode=? "; //更新附件后更新UpdateNums(更新)次数 private static final String UPDATE_UPDATE_NUM="set nocount on ; UPDATE _sys_AttachmentPermission SET UpdateNums=isnull(UpdateNums,0)+1 where unid=? and seq = ? and usercode=? "; //删除文件后删除所有附件权限信息 private static final String DELETE_COMPE_INFO="set nocount on ; DELETE _sys_AttachmentPermission where unid=? and seq = ? "; @Override public AttachmentPermissionEntity getAttachmentPermissionEntity(AttachmentPermissionEntity uploadPermissionEntity,String usercode,String readerUserCodes,String type) { if (uploadPermissionEntity == null) return null; String tableName = ""; if (type != null && (type.equals("0") || type.equals("1"))) { tableName = "_sys_Attachment9"; } else { tableName = "_sys_Attachment"; } String sql = "set nocount on \n" + " declare @unid varchar(100) ,@seq int ,@usercode varchar(50) \n" + " declare @formid int,@headflag int,@fieldid varchar(50),@AllowMaxFileSize int,@AllowFileTypes varchar(200) ; \n" + " declare @AuthorAllowDelete varchar(50),@AuthorAllowUpdate varchar(50); \n" + " declare @AuthorCode varchar(50),@UserName varchar(50),@totalViewNums int = 0,@totalDownNums int = 0 ,@totalUpdateNums int = 0 ;\n" + " declare @readerUserCodes varchar(2000) ,@hasPermission int = 0;\n" + " select @unid = ? , @seq = ? ,@usercode = ? \n" + " select @formid = ?,@headflag = ?,@fieldid = ? \n" + " select @readerUserCodes = ? \n" + " select @AllowMaxFileSize = fileSize,@AllowFileTypes = FileType,@AuthorAllowDelete = authorallowdelete,@AuthorAllowUpdate = authorallowupdate \n" + " from _sys_AttachmentParameter where formid=@formid and headflag = @headflag and fieldid=@fieldid \n" + " select @AuthorCode = AuthorCode,@totalViewNums=viewNums,@totalDownNums=downNums,@totalUpdateNums = updateNums from " + tableName + " where unid = @unid and seq = @seq \n" + " select @UserName = UserName from _sys_loginuser where usercode = @usercode \n" + " if isnull(@AuthorCode,'') = isnull(@usercode,'') \n" + " begin \n" + " select @unid as unid,@seq as seq,@usercode as UserCode,@UserName as UserName,1 as HasView,1 as HasDownload, \n" + " 1 as HasDelete,1 as HasUpdate,convert(datetime,'1901-01-01',120) as StartDate,convert(datetime,'9999-12-31',120) as EndDate,\n" + " 2 as DateFlag,0 as AllowDownnums,0 as AllowViewNums,0 as AllowUpdateNums,@hasPermission as hasPermission,\n " + " 0 as viewnums,0 as downnums,@totalViewNums as totalViewNums,@totalDownNums as totalDownNums,@totalUpdateNums as totalUpdateNums, \n" + " @AllowMaxFileSize as AllowMaxFileSize,@AllowFileTypes as AllowFileTypes,@AuthorAllowDelete as AuthorAllowDelete,@AuthorAllowUpdate as AuthorAllowUpdate\n" + " return ; \n" + " end \n" + " if exists(select top 1 1 from _sys_AttachmentPermission \n" + " where unid= @unid and seq = @seq and ISNULL(usercode,'')= @usercode ) \n " + " begin \n" + " set @hasPermission = 1 \n"//设置有权限 xin 2022-12-6 08:45:57 + " select unid,seq,UserCode,UserName,HasView,HasDownload, \n" + " HasDelete,HasUpdate,StartDate,EndDate,DateFlag,AllowDownnums,AllowViewNums,AllowUpdateNums,@hasPermission as hasPermission,\n" + " viewnums,downnums,@totalViewNums as totalViewNums,@totalDownNums as totalDownNums,@totalUpdateNums as totalUpdateNums,\n" + " @AllowMaxFileSize as AllowMaxFileSize,@AllowFileTypes as AllowFileTypes,@AuthorAllowDelete as AuthorAllowDelete,@AuthorAllowUpdate as AuthorAllowUpdate \n" + " from _sys_AttachmentPermission \n" + " where unid= @unid and seq = @seq and usercode= @usercode ; \n" + " return ;" + " end \n" + " if exists(select top 1 1 from _sys_AttachmentPermission \n" + " where unid= @unid and seq = @seq and ISNULL(usercode,'') <> @usercode) \n " + " begin \n" + " select @unid as unid,@seq as seq,@usercode as UserCode,@UserName as UserName,1 as HasView,0 as HasDownload, \n" + " 0 as HasDelete,0 as HasUpdate,convert(datetime,'9999-12-31',120) as StartDate,convert(datetime,'9999-12-31',120) as EndDate,\n" + " 1 as DateFlag,0 as AllowDownnums,0 as AllowViewNums,0 as AllowUpdateNums, @hasPermission as hasPermission,\n " + " 0 as viewnums,0 as downnums,@totalViewNums as totalViewNums,@totalDownNums as totalDownNums,@totalUpdateNums as totalUpdateNums,\n" + " @AllowMaxFileSize as AllowMaxFileSize,@AllowFileTypes as AllowFileTypes,@AuthorAllowDelete as AuthorAllowDelete,@AuthorAllowUpdate as AuthorAllowUpdate \n" + " return ; \n" + " end \n" + " if isnull(@readerUserCodes,'') = '' \n" + " or (isnull(@readerUserCodes,'') <> '' \n" + " and exists(select top 1 1 from getinstr(@readerUserCodes) a \n" + " where list = @usercode )) \n" + " begin \n" + " select @unid as unid,@seq as seq,@usercode as UserCode,@UserName as UserName,1 as HasView,1 as HasDownload, \n" + " 1 as HasDelete,1 as HasUpdate,convert(datetime,'1901-01-01',120) as StartDate,convert(datetime,'9999-12-31',120) as EndDate,\n" + " 2 as DateFlag,0 as AllowDownnums,0 as AllowViewNums,0 as AllowUpdateNums,@hasPermission as hasPermission,\n " + " 0 as viewnums,0 as downnums,@totalViewNums as totalViewNums,@totalDownNums as totalDownNums,@totalUpdateNums as totalUpdateNums, \n" + " @AllowMaxFileSize as AllowMaxFileSize,@AllowFileTypes as AllowFileTypes,@AuthorAllowDelete as AuthorAllowDelete,@AuthorAllowUpdate as AuthorAllowUpdate \n" + " return ; \n" + " end else \n" + " begin \n" + " select @unid as unid,@seq as seq,@usercode as UserCode,@UserName as UserName,1 as HasView,0 as HasDownload, \n" + " 0 as HasDelete,0 as HasUpdate,convert(datetime,'9999-12-31',120) as StartDate,convert(datetime,'9999-12-31',120) as EndDate, \n" + " 1 as DateFlag,0 as AllowDownnums,0 as AllowViewNums,0 as AllowUpdateNums, @hasPermission as hasPermission,\n " + " 0 as viewnums,0 as downnums,@totalViewNums as totalViewNums,@totalDownNums as totalDownNums,@totalUpdateNums as totalUpdateNums, \n" + " @AllowMaxFileSize as AllowMaxFileSize,@AllowFileTypes as AllowFileTypes,@AuthorAllowDelete as AuthorAllowDelete,@AuthorAllowUpdate as AuthorAllowUpdate \n" + " return ; \n" + " end \n"; SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); try { Map map=this.jdbcTemplate.queryForMap(sql, new Object[]{uploadPermissionEntity.getUnid() ,uploadPermissionEntity.getSeq() ,usercode, uploadPermissionEntity.getFormid(),uploadPermissionEntity.getHeadFlag(),uploadPermissionEntity.getFieldid(), readerUserCodes}); uploadPermissionEntity.setUserCode(usercode); uploadPermissionEntity.setHasView(map.get("HasView")!=null&&map.get("HasView").equals(1)?true:false); uploadPermissionEntity.setHasDownload(map.get("HasDownload")!=null&&map.get("HasDownload").equals(1)?true:false); uploadPermissionEntity.setHasDelete(map.get("HasDelete")!=null&&map.get("HasDelete").equals(1)?true:false); uploadPermissionEntity.setHasUpdate(map.get("HasUpdate")!=null&&map.get("HasUpdate").equals(1)?true:false); uploadPermissionEntity.setStartDate(map.get("StartDate")==null?formatter.parse("1901-01-01"):(Date)map.get("StartDate")); uploadPermissionEntity.setEndDate(map.get("EndDate")==null?formatter.parse("9999-12-31"):(Date)map.get("EndDate")); uploadPermissionEntity.setStartTime(map.get("StartDate")==null?"":format.format((Date) map.get("StartDate"))); uploadPermissionEntity.setEndTime(map.get("EndDate")==null?"":format.format((Date) map.get("EndDate"))); uploadPermissionEntity.setDateFlag(map.get("DateFlag")==null?0:(Integer)map.get("DateFlag")); uploadPermissionEntity.setAllowDownNums(map.get("AllowDownNums")==null?0:(Integer)map.get("AllowDownNums")); uploadPermissionEntity.setAllowViewNums(map.get("AllowViewNums")==null?0:(Integer)map.get("AllowViewNums")); uploadPermissionEntity.setAllowUpdateNums(map.get("AllowUpdateNums")==null?0:(Integer)map.get("AllowUpdateNums")); uploadPermissionEntity.setDownNums(map.get("DownNums")==null?0:(Integer)map.get("DownNums")); uploadPermissionEntity.setTotalDownNums(map.get("totalDownNums")==null?0:(Integer)map.get("totalDownNums")); uploadPermissionEntity.setViewNums(map.get("ViewNums")==null?0:(Integer)map.get("ViewNums")); uploadPermissionEntity.setTotalViewNums(map.get("totalViewNums")==null?0:(Integer)map.get("totalViewNums")); uploadPermissionEntity.setUpdateNums(map.get("UpdateNums")==null?0:(Integer)map.get("UpdateNums")); uploadPermissionEntity.setAuthorAllowDelete(map.get("AuthorAllowDelete")==null?"":(String)map.get("AuthorAllowDelete")); uploadPermissionEntity.setAuthorAllowUpdate(map.get("AuthorAllowUpdate")==null?"":(String)map.get("AuthorAllowUpdate")); uploadPermissionEntity.setAllowMaxFileSize(GridUtils.prossRowSetDataType_String(map, "AllowMaxFileSize")); uploadPermissionEntity.setAllowFileTypes(map.get("AllowFileTypes")==null?"":(String)map.get("AllowFileTypes")); uploadPermissionEntity.setHasPermission(map.get("hasPermission")==null?false:((Integer)map.get("hasPermission")==1?true:false)); initPermission(uploadPermissionEntity) ; return uploadPermissionEntity ; }catch (DataAccessException e ) { if (e instanceof EmptyResultDataAccessException){ uploadPermissionEntity.setUserCode(usercode); uploadPermissionEntity.setHasView(true); uploadPermissionEntity.setHasDownload(true); //is Author if (uploadPermissionEntity.getAuthorCode().equals(usercode)) { uploadPermissionEntity.setHasDelete(true); uploadPermissionEntity.setHasUpdate(true); }else { uploadPermissionEntity.setHasDelete(false); uploadPermissionEntity.setHasUpdate(false); } try { uploadPermissionEntity.setStartDate(formatter.parse("1901-01-01")); uploadPermissionEntity.setEndDate(formatter.parse("9999-12-31")); } catch (ParseException e1) { e1.printStackTrace(); } //DateFlag 权限|时间控制方式 :0 按每天时间段授权,1 按连续时间授权,2 无时间限制 uploadPermissionEntity.setDateFlag(2); uploadPermissionEntity.setAllowDownNums(0); uploadPermissionEntity.setAllowViewNums(0); uploadPermissionEntity.setAllowUpdateNums(0); uploadPermissionEntity.setDownNums(0); uploadPermissionEntity.setViewNums(0); uploadPermissionEntity.setUpdateNums(0); uploadPermissionEntity.setAuthorAllowDelete(""); uploadPermissionEntity.setAuthorAllowUpdate(""); initPermission(uploadPermissionEntity) ; return uploadPermissionEntity ; }else { e.printStackTrace(); throw e; } }catch(Exception e) { e.printStackTrace(); } return null ; } private void initPermission(AttachmentPermissionEntity uploadPermissionEntity) { Date now = new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(uploadPermissionEntity.getStartDate()); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); int startMinute = hour * 60 + minute ; //当天开始分钟数 hour = 0;minute = 0 ; calendar.setTime(uploadPermissionEntity.getEndDate()); hour = calendar.get(Calendar.HOUR_OF_DAY); minute = calendar.get(Calendar.MINUTE); int endMinute = hour * 60 + minute ; //当天结束分钟数 hour = 0;minute = 0 ; calendar.setTime(now); hour = calendar.get(Calendar.HOUR_OF_DAY); minute = calendar.get(Calendar.MINUTE); int nowMinute = hour * 60 + minute ; //当前分钟数 //check date //dateflag : //权限|时间控制方式 :0 按每天时间段授权,1 按连续时间授权,2 无时间限制 boolean validate = false ; if (uploadPermissionEntity.getDateFlag().equals(2)|| (uploadPermissionEntity.getDateFlag().equals(1) && uploadPermissionEntity.getStartDate().getTime() <= now.getTime() && uploadPermissionEntity.getEndDate().getTime() >= now.getTime()) || uploadPermissionEntity.getDateFlag().equals(0) && startMinute <= nowMinute && endMinute >= nowMinute ) { validate = true ; } //view 查看 if (validate && (uploadPermissionEntity.isHasView()) && (uploadPermissionEntity.getAllowViewNums().equals(0) || uploadPermissionEntity.getAllowViewNums().intValue() > uploadPermissionEntity.getViewNums().intValue())) { uploadPermissionEntity.setAllowView(true); } //update if (validate && (uploadPermissionEntity.isHasUpdate()) && (uploadPermissionEntity.getAllowUpdateNums().equals(0) || uploadPermissionEntity.getAllowUpdateNums().intValue() > uploadPermissionEntity.getUpdateNums().intValue()) && (uploadPermissionEntity.getAuthorAllowUpdate().equals("") || uploadPermissionEntity.getDocStatus() == null || (";"+uploadPermissionEntity.getAuthorAllowUpdate()+";") .contains(";"+ uploadPermissionEntity.getDocStatus() +";")) && (uploadPermissionEntity.getEditStatus()==null || uploadPermissionEntity.getEditStatus().equals("") || (";"+uploadPermissionEntity.getEditStatus()+";") .contains(";"+ uploadPermissionEntity.getDocStatus() +";")) && (uploadPermissionEntity.getAuthorAllowUpdate() == null || uploadPermissionEntity.getAuthorAllowUpdate().equals("") || (";"+uploadPermissionEntity.getAuthorAllowUpdate()+";") .contains(";"+ uploadPermissionEntity.getDocStatus() +";"))) { uploadPermissionEntity.setAllowUpdate(true); } //delete 删除 if (validate && (uploadPermissionEntity.isHasDelete()) && (uploadPermissionEntity.getAuthorAllowDelete().equals("") || uploadPermissionEntity.getDocStatus() == null || (";"+uploadPermissionEntity.getAuthorAllowDelete()+";") .contains(";"+ uploadPermissionEntity.getDocStatus() +";")) && (uploadPermissionEntity.getEditStatus()==null || uploadPermissionEntity.getEditStatus().equals("") || (";"+uploadPermissionEntity.getEditStatus()+";") .contains(";"+ uploadPermissionEntity.getDocStatus() +";")) && (uploadPermissionEntity.getAuthorAllowDelete() == null || uploadPermissionEntity.getAuthorAllowDelete().equals("") || (";"+uploadPermissionEntity.getAuthorAllowDelete()+";") .contains(";"+ uploadPermissionEntity.getDocStatus() +";"))) { uploadPermissionEntity.setAllowDelete(true); } //download 下载 if (validate && (uploadPermissionEntity.isHasDownload()) && (uploadPermissionEntity.getAllowDownNums().equals(0) || uploadPermissionEntity.getAllowDownNums().intValue() > uploadPermissionEntity.getDownNums().intValue())) { uploadPermissionEntity.setAllowDownload(true); } } @Override public boolean existsCompInfo(String unid) { SqlRowSet rs=this.jdbcTemplate.queryForRowSet(EXISTS_ATTAC_COMP_INFO,unid); if(rs.next()){ return true; } return false; } @Override public void updateDownNumber(String userCode,String unid) { this.jdbcTemplate.update(UPDATE_DOWNLOAD_NUM,userCode,unid); } @Override public void updateUpdateNumber(String userCode,String unid) { this.jdbcTemplate.update(UPDATE_UPDATE_NUM,userCode,unid); } public void updateViewNumber(String userCode,String unid) { this.jdbcTemplate.update(UPDATE_VIEW_NUM,userCode,unid); } @Override public void deleteFileCompInfo(String unid) { this.jdbcTemplate.update(DELETE_COMPE_INFO,unid); } }