AjaxFlushAction.java

// Decompiled by DJ v2.8.8.54 Copyright 2000 Atanas Neshkov  Date: 2002-9-6 11:15:32
// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: packimports(3)
package com.mycim.webapp.actions.ajaxflush;

import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.context.spring.SpringContext;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.server.carrier.service.CarrierService;
import com.mycim.server.wip.service.LotQueryService;
import com.mycim.server.wip.service.WipQueryService;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.bas.NamedObject;
import com.mycim.valueobject.bas.Relation;
import com.mycim.valueobject.security.User;
import com.mycim.valueobject.security.UserGroup;
import com.mycim.valueobject.sys.ReferenceFileDetail;
import com.mycim.webapp.WebUtils;
import com.mycim.webapp.actions.AbstractAction;

import javax.servlet.http.HttpServletRequest;
import java.util.*;

/**
 * ajax无刷新更新,下拉菜单联动
 *
 * @author Mark
 */
public class AjaxFlushAction extends AbstractAction {

    private CarrierService carrierService = SpringContext.getBean(CarrierService.class);

    private WipQueryService wipQueryService = SpringContext.getBean(WipQueryService.class);

    private LotQueryService lotQueryService = SpringContext.getBean(LotQueryService.class);

    public Map checkButtonPermission(Map map) {
        long userRrn = LocalContext.getUserRrn();
        Map button = null;
        String markId = map.get("markId").toString();
        Map result = new HashMap();
        Collection<Long> roles = securityService.getUserRoleList(userRrn);
        if (StringUtils.isNotBlank(markId)) {
            button = securityService.getButtonInfoWithRoles(roles, markId);
        }
        if (MapUtils.isNotEmpty(button) || StringUtils.isBlank(markId)) {
            result.put("success", "1");
        } else {
            result.put("failed", "1");
        }
        return result;
    }

    public void checkUserInDept4PCD(Map map) {
        long userRrn = LocalContext.getUserRrn();
        long facilityRrn = LocalContext.getFacilityRrn();
        User currentUser = securityService.getUser(userRrn);
        NamedObject pcd = baseService
                .isExisted(map.get("instanceId").toString(), getNamedSpace(ObjectList.ENTITY_KEY, facilityRrn),
                           ObjectList.ENTITY_KEY);
        List<Map> holdReasons = carrierService.getHoldReasons(pcd.getInstanceRrn());
        Object[] holdReasonArrays = holdReasons.toArray();
        boolean state = true;
        if (isUserInAdministrator(currentUser)) {
            state = true;
        } else {
            String[] fieldFlag = map.get("fieldFlags").toString().split(",");
            for (int i = 0; i < holdReasonArrays.length; i++) {
                Map holdReason = (HashMap) holdReasonArrays[i];
                if (StringUtils.equals(fieldFlag[i], "0")) {
                    if (MapUtils.getLongValue(holdReason, "holdRrn") != userRrn) {
                        String reasonCode = MapUtils.getString(holdReason, "reasonCode");
                        String releaseGroups = sysService
                                .getRefFileValue("$HOLD_CARRIER_CODE", reasonCode, "DATA_4_VALUE");
                        if (MapUtils.getLongValue(holdReason, "holdByRrn") > 0 &&
                                !StringUtils.equalsIgnoreCase(releaseGroups, "ALL")) {
                            state = securityService
                                    .checkUserExistedUserGroups(currentUser.getInstanceRrn(), releaseGroups);
                            if (!state) {
                                break;
                            }
                        } else if (MapUtils.getLongValue(holdReason, "holdByRrn") == 0) {
                            state = true;
                        }
                    }
                }
            }
        }
    }

    public Map carrierHoldReasonCodes(Map map) {
        long userRrn = LocalContext.getUserRrn();
        String holdReasonGroupID = map.get("holdReasonGroupID").toString();
        User currentUser = securityService.getUser(userRrn);
        List<String> holdReasonRoles = sysService
                .getRefFileKeys("$REASON_GROUP_CARRIER_DEPARTMENT", "key_1_value", currentUser.getShiftId());
        holdReasonRoles.add("ALL");

        List<Map> holdReasonCodes = carrierService
                .getHoldReasonCodes(holdReasonGroupID, holdReasonRoles, "$HOLD_CARRIER_CODE");
        Map options = new LinkedHashMap();
        for (Map obj : holdReasonCodes) {
            if (obj != null && !obj.isEmpty()) {
                options.put(obj.get("holdCode"), obj.get("holdDesc"));
            }
        }
        return options;
    }

    public Map carrierHoldDept(Map map) {
        String reasonCode = map.get("reasonCodeId").toString();
        StringBuffer departmentStr = new StringBuffer("");
        List<Map> releaseGroups = carrierService.getReleaseGroup(reasonCode, "$HOLD_CARRIER_CODE");

        for (Map releaseGroup : releaseGroups) {
            String groups = MapUtils.getString(releaseGroup, "releaseGroup");
            List<String> departs = securityService.getDepartmentIds("$REASON_GROUP_DEPARTMENT", groups, "data_1_value");
            for (String departmentId : departs) {
                departmentStr.append(departmentId);
                departmentStr.append(",");
            }
        }
        String departments = StringUtils.substringBeforeLast(departmentStr.toString(), ",");
        Map reponseMap = new HashMap();
        reponseMap.put("department", departments);
        return reponseMap;
    }

    public Map carrierReleaseReasonCodes(Map map) {
        String releaseReasonGroupID = map.get("releaseReasonGroupID").toString();
        List releaseRoles = new ArrayList();
        releaseRoles.add("ALL");
        List<Map> releaseReasonCodes = carrierService
                .getReleaseReasonCodes(releaseReasonGroupID, releaseRoles, "$RELEASE_CARRIER_CODE");

        Map options = new HashMap();
        for (Map obj : releaseReasonCodes) {
            if (obj != null && !obj.isEmpty()) {
                options.put(obj.get("releaseCode"), obj.get("releaseDesc"));
            }
        }
        return options;
    }

    public Map lotHoldReasonCodes(Map map) {
        long userRrn = LocalContext.getUserRrn();
        String holdReasonGroupID = MapUtils.getString(map, "holdReasonGroupID");
        User currentUser = securityService.getUser(userRrn);
        List<String> holdReasonRoles = sysService
                .getRefFileKeys("$REASON_GROUP_DEPARTMENT", "key_1_value", currentUser.getShiftId());
        holdReasonRoles.add("ALL");

        List<Map> holdReasonCodes = wipQueryService
                .getHoldReasonCodes(holdReasonGroupID, holdReasonRoles, "$HOLD_CODE");
        List<Relation> userGroups = securityService.getUserGroups(userRrn);
        Map options = new LinkedHashMap();
        for (Map obj : holdReasonCodes) {
            if (obj != null && !obj.isEmpty()) {
                options.put(obj.get("holdCode"), obj.get("holdDesc"));
            }
        }
        //新增需求,要求暂停批次时Hold Code可以选择$HOLD_CODE类表中hold code group所有配置ALL的hold code。故新增以下方法,查询所有配置ALL的hold code
        //List<Map> holdReasonCodes4All = wipQueryService.getHoldReasonCodes4HoldCodeGroupAll("$HOLD_CODE");
        //holdReasonCodes.addAll(holdReasonCodes4All);
        return options;
    }

    public Map lotReleaseReasonCodes(Map map) {
        String releaseReasonGroupID = map.get("releaseReasonGroupID").toString();
        List releaseRoles = new ArrayList();
        releaseRoles.add("ALL");
        long userRrn = LocalContext.getUserRrn();
        User currentUser = securityService.getUser(userRrn);
        releaseRoles.add(currentUser.getShiftId());
        List<Map> releaseReasonCodes = wipQueryService
                .getReleaseReasonCodes(releaseReasonGroupID, releaseRoles, "$RELEASE_CODE");

        Map options = new HashMap();
        for (Map obj : releaseReasonCodes) {
            if (obj != null && !obj.isEmpty()) {
                options.put(obj.get("releaseCode"), obj.get("releaseDesc"));
            }
        }
        return options;
    }

    public Map lotHoldDept(Map map) {
        String reasonCode = MapUtils.getString(map, "reasonCodeId");
        StringBuffer departmentStr = new StringBuffer("");
        List<Map> releaseGroups = wipQueryService.getReleaseGroup(reasonCode, "$HOLD_CODE");

        for (Map releaseGroup : releaseGroups) {
            String groups = MapUtils.getString(releaseGroup, "releaseGroup");
            List<String> departs = securityService.getDepartmentIds("$REASON_GROUP_DEPARTMENT", groups, "data_1_value");
            for (String departmentId : departs) {
                departmentStr.append(departmentId);
                departmentStr.append(",");
            }
        }
        String departments = StringUtils.substringBeforeLast(departmentStr.toString(), ",");
        Map reponseMap = new HashMap();
        reponseMap.put("department", departments);
        return reponseMap;
    }

    public Boolean checkUserInDept(Map map) {
        String lotId = (String) map.get("lotId");
        long lotRrn = lotQueryService.getLotRrn(lotId);

        List<String> fieldFlags = (List<String>) map.get("fieldFlags");

        List<Map<String, Object>> holdReasonList = buildSelectedHoldReasonList(lotRrn, fieldFlags);

        return wipQueryService
                .hasChangeOrReleaseHoldPermissionForBatch(LocalContext.getFacilityRrn(), LocalContext.getUserRrn(),
                                                          holdReasonList);

    }

    public Map findUserByDeptId(HttpServletRequest request, Map<String, String> map) {
        String deptId = request.getParameter("dept");
        if (map != null) {
            deptId = deptId == null ? map.get("dept") : deptId;
        }
        List<Map> users = securityService.getUsers(deptId);
        Map options = new HashMap();
        for (Map option : users) {
            options.put(option.get("userRrn"), option.get("userName"));
        }
        return options;
    }

    public Map findUserByUserGroup(HttpServletRequest request) {
        long facilityRrn = LocalContext.getFacilityRrn();
        String userGroupId = WebUtils.getParameter("userGroup", request);
        long userGroupRrn = getInstanceRrn(userGroupId, facilityRrn, ObjectList.USERGROUP_KEY);
        Map options = new HashMap();
        if (StringUtils.isNotEmpty(userGroupId) && userGroupRrn > 0) {
            UserGroup userGroup = new UserGroup(userGroupRrn);
            userGroup.setInstanceId(userGroupId);
            List<Relation> userRrnList = securityService.getUsers(userGroup);
            for (Relation relation : userRrnList) {
                long userRrn = relation.getFromRrn();
                String userName = securityService.getUserName(userRrn);
                if (StringUtils.isNotBlank(userName)) {
                    options.put(userRrn, userName);
                }
            }
        }
        return options;
    }

    public String getTel(HttpServletRequest request, Map<String, String> map) {
        String deptId = request.getParameter("dept");
        String user = request.getParameter("user");
        if (map != null) {
            deptId = deptId == null ? map.get("dept") : deptId;
            user = user == null ? map.get("user") : user;
        }
        return securityService.getTel(deptId, user);
    }

    public Map getReworkCodes(HttpServletRequest request) {
        String deptId = request.getParameter("deptId");
        long refRrn = getInstanceRrn("$$REWORK_CODE", LocalContext.getFacilityRrn(), ObjectList.REFERENCE_FILE_KEY);
        List<ReferenceFileDetail> referenceFileDetails = sysService.getReferenceFileDetails(refRrn);
        Map options = new HashMap();
        for (ReferenceFileDetail detail : referenceFileDetails) {
            String key1Value = detail.getKey1Value();
            if (key1Value.equals(deptId)) {
                String rework_code = detail.getKey2Value();
                String rework_desc = detail.getData1Value();
                options.put(rework_code, rework_desc);
            }
        }
        return options;
    }

    public Map getHoldGroups(HttpServletRequest request) {
        long refRrn = getInstanceRrn("$HOLD_GROUP", LocalContext.getFacilityRrn(), ObjectList.REFERENCE_FILE_KEY);
        List<ReferenceFileDetail> referenceFileDetails = sysService.getReferenceFileDetails(refRrn);
        Map options = new HashMap();
        for (ReferenceFileDetail detail : referenceFileDetails) {
            options.put(detail.getKey1Value(), detail.getData1Value());
        }
        return options;
    }

    public Map getDepartment(HttpServletRequest request) {
        long refRrn = getInstanceRrn("$DEPARTMENT", LocalContext.getFacilityRrn(), ObjectList.REFERENCE_FILE_KEY);
        List<ReferenceFileDetail> referenceFileDetails = sysService.getReferenceFileDetails(refRrn);
        Map options = new HashMap();
        for (ReferenceFileDetail detail : referenceFileDetails) {
            options.put(detail.getKey1Value(), detail.getData1Value());
        }
        return options;
    }

    public List getRefFileValues(Map params) {
        String referenceId = MapUtils.getString(params, "referenceId");
        List<ReferenceFileDetail> resultList = sysService.getRefFileValues(referenceId, LocalContext.getFacilityRrn());
        if (resultList == null) {
            resultList = new ArrayList<>();
        }
        return resultList;
    }

    private boolean isUserInAdministrator(User user) {
        boolean state = false;
        List<Relation> userGroups = securityService.getUserGroups(user);
        for (Relation relation : userGroups) {
            if (StringUtils.equals(relation.getInstanceId(), "ADMINISTRATORS")) {
                state = true;
                break;
            }
        }
        return state;
    }

    private List<Map<String, Object>> buildSelectedHoldReasonList(long lotRrn, List<String> fieldFlags) {
        List<Map<String, Object>> holdReasonList = new ArrayList<>();

        List<Map> holdReasons = wipQueryService.getHoldReasons(lotRrn);
        for (int i = 0; i < holdReasons.size(); i++) {
            Map<String, Object> holdReason = (HashMap<String, Object>) holdReasons.get(i);
            if (StringUtils.equals(fieldFlags.get(i), "0")) {
                holdReasonList.add(holdReason);
            }
        }
        return holdReasonList;
    }

    private String buildGroups(String groupString) {
        String[] releases = StringUtils.split(groupString, ",");
        String str = "(";
        for (int i = 0; i < releases.length; i++) {
            if (i == releases.length - 1) {
                str += "'" + releases[i] + "')";
            } else {
                str += "'" + releases[i] + "',";
            }
        }
        return str;
    }

}