InformAction.java

package com.mycim.webapp.actions.setting.system.inform;

import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.jdbc.Page;
import com.mycim.framework.utils.beans.BeanUtils;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.framework.utils.lang.time.DateUtils;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.consts.Constants;
import com.mycim.valueobject.consts.ReferenceDetailNames;
import com.mycim.valueobject.consts.TransactionNames;
import com.mycim.valueobject.security.User;
import com.mycim.valueobject.sys.ReferenceFile;
import com.mycim.valueobject.sys.ReferenceFileDetail;
import com.mycim.webapp.actions.CimSetupAction;
import com.mycim.webapp.forms.security.UserInfoForm;
import com.mycim.webapp.websocket.InformSocketServerManager;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.beans.factory.annotation.Autowired;

import javax.print.DocFlavor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public class InformAction extends CimSetupAction {


    @Override
    public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                              HttpServletResponse response) throws Exception {
        return mapping.findForward("initInform");
    }

    public Page getInformUserList(UserInfoForm form, Map params) {

        User user = new User();
        int startRow = MapUtils.getIntValue(params, "start");
        int pageSize = MapUtils.getIntValue(params, "limit");
        int thisPage = (startRow / pageSize) + 1;
        Page page = new Page();
        page.setPageNo(thisPage);
        page.setPageSize(pageSize);
        BeanUtils.copyProperties(form, user);

        page = securityService.getInformUser(user, page);
        page.getResults().stream().map(obj -> {
            User userInform = (User) obj;
            if(StringUtils.isBlank(userInform.getInformFlag())) {
                userInform.setInformFlag(Constants.INFORM_STATUS.NOT_INFORM);
            }
            return userInform;
        }).collect(Collectors.toList());
        return page;
    }


    public void switchInfom(Map map){
        String userRrns = MapUtils.getString(map,"userRrns");
        String informFlag = MapUtils.getString(map, "informFlag");
        List<String> userRrnList = Arrays.asList(StringUtils.split(userRrns,","));
        securityService.releaseOrCancelInformToUser(userRrnList, informFlag);
    }

    public Page getInformHistory(UserInfoForm form, Map params){
        User user = new User();
        int startRow = MapUtils.getIntValue(params, "start");
        int pageSize = MapUtils.getIntValue(params, "limit");
        int thisPage = (startRow / pageSize) + 1;
        Page page = new Page();
        page.setPageNo(thisPage);
        page.setPageSize(pageSize);
        BeanUtils.copyProperties(form, user);

        page = securityService.getInformHistory(user,page);
        return page;
    }

    public List<Map> getDepartmentStore(HttpServletRequest request) {
       List<ReferenceFileDetail> referenceFileDetails = sysService.getRefFileValues(ReferenceDetailNames.USER_DEPARTMENT,LocalContext.getFacilityRrn());
        List<Map> list = new ArrayList();
        for (ReferenceFileDetail ref : referenceFileDetails){
            Map map = new HashMap();
            map.put("key", ref.getKey1Value());
            map.put("value", ref.getData1Value());
            list.add(map);
        }
        return list;
    }

    public Map<String,Object> checkReferenceFileDetail(HttpServletRequest request){
        Map<String,Object> map = new HashMap<>();
        // 判断类表是否存在
        ReferenceFile referenceFile = new ReferenceFile(ReferenceDetailNames.SYSTEM_NOTICE, getNamedSpace(ObjectList.REFERENCE_FILE_KEY, LocalContext.getFacilityRrn()),
                                                        ObjectList.REFERENCE_FILE_KEY);
        referenceFile = (ReferenceFile) getInstance(referenceFile);
        Assert.isFalse(referenceFile.getInstanceRrn() <= 0, Errors.create().key(MessageIdList.REFERENCEFILE_MISSING_ID)
                                                                  .content("Reference File ID is not exist!").build());

        List<ReferenceFileDetail> referenceFileDetails = sysService.getRefFileValues(ReferenceDetailNames.SYSTEM_NOTICE, LocalContext.getFacilityRrn());
        Map<String,String> refMap =
                referenceFileDetails.stream().collect(
                        Collectors.toMap(ReferenceFileDetail::getKey1Value, ReferenceFileDetail::getData1Value));
        map.put("informTitle",refMap.get("MSGTITLE"));
        map.put("informContent",refMap.get("MSGCONTENT"));
        Pattern pattern = Pattern.compile("^\\d{4}\\/\\d{2}\\/\\d{2}\\ \\d{2}\\:\\d{2}:\\d{2}$");
        String msgTime = refMap.get("MSGTIME");
        if(StringUtils.isNotBlank(msgTime) && pattern.matcher(msgTime).matches()){
            String[] str = StringUtils.split(msgTime, " ");
            map.put("informDate", str[0]);
            map.put("informTime", str[1]);
        }else {
            map.put("informDate", null);
            map.put("informTime", null);
        }
        String msgDate = refMap.get("MSGDATE");
        if(StringUtils.isNotBlank(msgDate) && pattern.matcher(msgDate).matches()){
            String[] str = StringUtils.split(msgDate, " ");
            map.put("releaseVersionDate", str[0]);
            map.put("releaseVersionTime", str[1]);
        }else {
            map.put("releaseVersionDate", null);
            map.put("releaseVersionTime", null);
        }
        return map;
    }

    public void saveInformInfo(Map<String,Object> params) {
        StringBuilder msgReleaseDateStr = new StringBuilder();
        msgReleaseDateStr.append(MapUtils.getString(params, "releaseVersionDate")).append(" ")
               .append(MapUtils.getString(params,"releaseVersionTime"));

        StringBuilder msgInformDateStr = new StringBuilder();
        msgInformDateStr.append(MapUtils.getString(params, "informDate")).append(" ")
               .append(MapUtils.getString(params,"informTime"));
        Map<String,Object> maps = new HashMap<>();
        maps.put("MSGCONTENT",MapUtils.getString(params,"informContent"));
        maps.put("MSGTITLE",MapUtils.getString(params,"informTitle"));
        maps.put("MSGDATE",msgReleaseDateStr.toString());
        maps.put("MSGTIME",msgInformDateStr.toString());
        List<ReferenceFileDetail> referenceFileDetailList = new ArrayList<>();
        for (String key : maps.keySet()){
            ReferenceFileDetail referenceFileDetail = new ReferenceFileDetail(ReferenceDetailNames.SYSTEM_NOTICE,
                                                                              getNamedSpace(ObjectList.REFERENCE_FILE_KEY,
                                                                                            LocalContext.getFacilityRrn()),
                                                                              ObjectList.REFERENCE_FILE_KEY);
            referenceFileDetail.setTransId(TransactionNames.MODIFY_KEY);
            referenceFileDetail.setTransPerformedby(LocalContext.getUserId());
            referenceFileDetail.setKey1Value(key);
            referenceFileDetail.setKey2Value(" ");
            referenceFileDetail.setData1Value(MapUtils.getString(maps,key));
            referenceFileDetailList.add(referenceFileDetail);
        }
        sysService.updateReferenceFileDetailList(referenceFileDetailList);
    }
}