Java tutorial
/** * OpenCPS is the open source Core Public Services software * Copyright (C) 2016-present OpenCPS community * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/> */ package org.opencps.usermgt.service.impl; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.opencps.usermgt.NoSuchEmployeeException; import org.opencps.usermgt.model.Employee; import org.opencps.usermgt.model.JobPos; import org.opencps.usermgt.model.WorkingUnit; import org.opencps.usermgt.service.base.EmployeeLocalServiceBaseImpl; import org.opencps.util.DateTimeUtil; import org.opencps.util.PortletConstants; import org.opencps.util.PortletUtil; import org.opencps.util.WebKeys; import com.liferay.counter.service.CounterLocalServiceUtil; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.util.ArrayUtil; import com.liferay.portal.kernel.util.LocaleUtil; import com.liferay.portal.kernel.util.OrderByComparator; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.kernel.workflow.WorkflowConstants; import com.liferay.portal.model.Address; import com.liferay.portal.model.Contact; import com.liferay.portal.model.EmailAddress; import com.liferay.portal.model.Phone; import com.liferay.portal.model.Role; import com.liferay.portal.model.User; import com.liferay.portal.model.Website; import com.liferay.portal.service.ContactLocalServiceUtil; import com.liferay.portal.service.RoleLocalServiceUtil; import com.liferay.portal.service.ServiceContext; import com.liferay.portlet.announcements.model.AnnouncementsDelivery; /** * The implementation of the employee local service. * <p> * All custom service methods should be put in this class. Whenever methods are * added, rerun ServiceBuilder to copy their definitions into the * {@link org.opencps.usermgt.service.EmployeeLocalService} interface. * <p> * This is a local service. Methods of this service will not have security * checks based on the propagated JAAS credentials because this service can only * be accessed from within the same VM. * </p> * * @author khoavd * @author trungnt * @see org.opencps.usermgt.service.base.EmployeeLocalServiceBaseImpl * @see org.opencps.usermgt.service.EmployeeLocalServiceUtil */ public class EmployeeLocalServiceImpl extends EmployeeLocalServiceBaseImpl { /* * NOTE FOR DEVELOPERS: Never reference this interface directly. Always use * {@link org.opencps.usermgt.service.EmployeeLocalServiceUtil} to access * the employee local service. */ @SuppressWarnings("null") public Employee addEmployee(long userId, String employeeNo, String fullName, int gender, String telNo, String mobile, String email, long workingUnitId, int workingStatus, long mainJobPosId, long[] jobPosIds, boolean isAddUser, String accountEmail, String screenName, int birthDateDay, int birthDateMonth, int birthDateYear, String password, String reTypePassword, long[] groupIds, long[] userGroupIds, ServiceContext serviceContext) throws SystemException, PortalException { long employeeId = CounterLocalServiceUtil.increment(Employee.class.getName()); Employee employee = employeePersistence.create(employeeId); // Get main JobPos JobPos jobPos = null; if (mainJobPosId > 0) { jobPos = jobPosPersistence.findByPrimaryKey(mainJobPosId); } // Get Working Unit WorkingUnit workingUnit = null; if (workingUnitId > 0) { workingUnit = workingUnitPersistence.findByPrimaryKey(workingUnitId); } // Get OrganizationId long[] organizationIds = null; if (workingUnit != null) { organizationIds = new long[] { workingUnit.getMappingOrganisationId() }; } List<Long> roleIds = new ArrayList<Long>(); List<Long> distinctJobPosIds = new ArrayList<Long>(); if (jobPosIds != null && jobPosIds.length > 0) { for (int job = 0; job < jobPosIds.length; job++) { if (jobPosIds[job] > 0) { JobPos jobPosTemp = jobPosPersistence.findByPrimaryKey(jobPosIds[job]); if (jobPosTemp != null) { if (!roleIds.contains(jobPosTemp.getMappingRoleId())) { roleIds.add(jobPosTemp.getMappingRoleId()); } if (!distinctJobPosIds.contains(jobPosTemp.getJobPosId())) { distinctJobPosIds.add(jobPosTemp.getJobPosId()); } } } } } Date now = new Date(); PortletUtil.SplitName spn = PortletUtil.splitName(fullName); Date birthDate = DateTimeUtil.getDate(birthDateDay, birthDateMonth, birthDateYear); User user = null; roleIds.add(jobPos.getMappingRoleId()); long[] listRoles = null; Role defaultRole = null; try { defaultRole = RoleLocalServiceUtil.getRole(serviceContext.getCompanyId(), WebKeys.EMPLOYEE_ROLE_NAME); } catch (Exception e) { _log.info("role OPCS_EMPLOYEE null"); } if (!roleIds.isEmpty()) { listRoles = new long[roleIds.size() + 1]; if (Validator.isNotNull(defaultRole)) { listRoles[roleIds.size()] = defaultRole.getRoleId(); } for (int i = 0; i < roleIds.size(); i++) { listRoles[i] = roleIds.get(i); } } else { if (Validator.isNotNull(defaultRole)) { listRoles = new long[] { defaultRole.getRoleId() }; } } if (isAddUser) { user = userService.addUserWithWorkflow(serviceContext.getCompanyId(), false, password, reTypePassword, false, screenName, accountEmail, 0L, StringPool.BLANK, LocaleUtil.getDefault(), spn.getFirstName(), spn.getMidName(), spn.getLastName(), 0, 0, (gender == 1), birthDateMonth, birthDateDay, birthDateYear, jobPos != null ? jobPos.getTitle() : StringPool.BLANK, groupIds, organizationIds, listRoles, userGroupIds, new ArrayList<Address>(), new ArrayList<EmailAddress>(), new ArrayList<Phone>(), new ArrayList<Website>(), new ArrayList<AnnouncementsDelivery>(), false, serviceContext); } employee.setUserId(userId); employee.setGroupId(serviceContext.getScopeGroupId()); employee.setCompanyId(serviceContext.getCompanyId()); employee.setCreateDate(now); employee.setModifiedDate(now); employee.setWorkingUnitId(workingUnitId); employee.setEmployeeNo(employeeNo); employee.setFullName(fullName); employee.setGender(gender); employee.setBirthdate(birthDate); employee.setTelNo(telNo); employee.setMobile(mobile); employee.setEmail(email); employee.setWorkingStatus(workingStatus); employee.setMainJobPosId(mainJobPosId); employee.setMappingUserId(user != null ? user.getUserId() : 0); employeePersistence.addJobPoses(employeeId, ArrayUtil.toLongArray(distinctJobPosIds)); return employeePersistence.update(employee); } public int countEmployees(long groupId) throws SystemException { return employeePersistence.countByGroupId(groupId); } public int countEmployees(long groupId, long workingUnitId) throws SystemException { return employeePersistence.countByG_W(groupId, workingUnitId); } public int countEmployees(long groupId, String[] fullNames) throws SystemException { return employeePersistence.countByG_N(groupId, fullNames); } public int countEmployees(long groupId, String[] fullNames, long workingUnitId) throws SystemException { return employeePersistence.countByG_N_W(groupId, fullNames, workingUnitId); } public void deletedPermanently(long employeeId) throws SystemException, PortalException { Employee employee = employeePersistence.findByPrimaryKey(employeeId); long mappingUserId = employee.getMappingUserId(); if (mappingUserId > 0) { userLocalService.deleteUser(mappingUserId); } employeePersistence.remove(employeeId); } public Employee getEmployeeByEmail(long groupId, String email) throws NoSuchEmployeeException, SystemException { return employeePersistence.findByG_E(groupId, email); } public Employee getEmployeeByEmployeeNo(long groupId, String employeeNo) throws NoSuchEmployeeException, SystemException { return employeePersistence.findByG_ENO(groupId, employeeNo); } public Employee getEmployeeByMappingUserId(long groupId, long mappingUserId) throws NoSuchEmployeeException, SystemException { return employeePersistence.findByG_U(groupId, mappingUserId); } public List<Employee> getEmployees(long groupId) throws SystemException { return employeePersistence.findByGroupId(groupId); } public List<Employee> getEmployees(long groupId, int start, int end, OrderByComparator orderByComparator) throws SystemException { return employeePersistence.findByGroupId(groupId, start, end, orderByComparator); } public List<Employee> getEmployees(long groupId, long workingUnitId) throws SystemException { return employeePersistence.findByG_W(groupId, workingUnitId); } public List<Employee> getEmployees(long groupId, long workingUnitId, int start, int end, OrderByComparator orderByComparator) throws SystemException { return employeePersistence.findByG_W(groupId, workingUnitId, start, end, orderByComparator); } public List<Employee> getEmployees(long groupId, long workingUnitId, long mainJobPosId) throws SystemException { return employeePersistence.findByG_W_MJP(groupId, workingUnitId, mainJobPosId); } public List<Employee> getEmployeesByMainJobPosId(long mainJobPosId) throws SystemException { return employeePersistence.findByMainJobPosId(mainJobPosId); } public List<Employee> getEmployees(long groupId, long workingUnitId, long mainJobPosId, int start, int end, OrderByComparator orderByComparator) throws SystemException { return employeePersistence.findByG_W_MJP(groupId, workingUnitId, mainJobPosId, start, end, orderByComparator); } public List<Employee> getEmployees(long groupId, String[] fullNames) throws SystemException { return employeePersistence.findByG_N(groupId, fullNames); } public List<Employee> getEmployees(long groupId, String[] fullNames, int start, int end, OrderByComparator orderByComparator) throws SystemException { return employeePersistence.findByG_N(groupId, fullNames, start, end, orderByComparator); } public List<Employee> getEmployees(long groupId, String[] fullNames, long workingUnitId, int start, int end, OrderByComparator orderByComparator) throws SystemException { return employeePersistence.findByG_N_W(groupId, fullNames, workingUnitId, start, end, orderByComparator); } public void updateProfile(long userId, long employeeId, String fullName, int gender, String telNo, String mobile, String email, boolean isChangePassWord, int birthDateDay, int birthDateMonth, int birthDateYear, String password, String reTypePassword, ServiceContext serviceContext) throws SystemException, PortalException { Employee employee = employeePersistence.findByPrimaryKey(employeeId); Date now = new Date(); PortletUtil.SplitName spn = PortletUtil.splitName(fullName); User mappingUser = null; Date birthDate = DateTimeUtil.getDate(birthDateDay, birthDateMonth, birthDateYear); try { mappingUser = userLocalService.getUserById(employee.getMappingUserId()); } catch (Exception e) { _log.error(e); } if (mappingUser != null) { // Reset password if (isChangePassWord) { mappingUser = userLocalService.updatePassword(mappingUser.getUserId(), password, reTypePassword, false); } // Change user name if (!fullName.equals(employee.getFullName())) { mappingUser.setFirstName(spn.getFirstName()); mappingUser.setLastName(spn.getLastName()); mappingUser.setMiddleName(spn.getMidName()); } mappingUser = userLocalService.updateUser(mappingUser); // update birth date Contact contact = ContactLocalServiceUtil.getContact(mappingUser.getContactId()); if (contact != null) { contact.setBirthday(birthDate); contact = ContactLocalServiceUtil.updateContact(contact); } } employee.setUserId(serviceContext.getUserId()); employee.setGroupId(serviceContext.getScopeGroupId()); employee.setCompanyId(serviceContext.getCompanyId()); employee.setModifiedDate(now); employee.setFullName(fullName); employee.setGender(gender); employee.setBirthdate(birthDate); employee.setTelNo(telNo); employee.setMobile(mobile); employeePersistence.update(employee); } public void updateEmployee(long employeeId, int workingStatus, ServiceContext serviceContext) throws SystemException, PortalException { Employee employee = employeePersistence.findByPrimaryKey(employeeId); long mappingUserId = employee.getMappingUserId(); Date now = new Date(); if (mappingUserId > 0) { if (workingStatus == PortletConstants.WORKING_STATUS_ACTIVATE || workingStatus == PortletConstants.WORKING_STATUS_DEACTIVATE) { int status = WorkflowConstants.STATUS_APPROVED; if (workingStatus == PortletConstants.WORKING_STATUS_ACTIVATE) { status = WorkflowConstants.STATUS_INACTIVE; } userLocalService.updateStatus(mappingUserId, status); } } workingStatus = workingStatus == PortletConstants.WORKING_STATUS_ACTIVATE ? 0 : 1; employee.setWorkingStatus(workingStatus); employee.setUserId(serviceContext.getUserId()); employee.setGroupId(serviceContext.getScopeGroupId()); employee.setCompanyId(serviceContext.getCompanyId()); employee.setModifiedDate(now); employeePersistence.update(employee); } public Employee updateEmployee(long userId, long employeeId, String employeeNo, String fullName, int gender, String telNo, String mobile, String email, long workingUnitId, int workingStatus, long mainJobPosId, long[] jobPosIds, boolean isAddUser, boolean isResetPassWord, String accountEmail, String screenName, int birthDateDay, int birthDateMonth, int birthDateYear, String password, String reTypePassword, long[] groupIds, long[] userGroupIds, ServiceContext serviceContext) throws SystemException, PortalException { Employee employee = employeePersistence.findByPrimaryKey(employeeId); // Get main JobPos JobPos jobPos = null; if (mainJobPosId > 0) { jobPos = jobPosPersistence.findByPrimaryKey(mainJobPosId); } Date now = new Date(); PortletUtil.SplitName spn = PortletUtil.splitName(fullName); Date birthDate = DateTimeUtil.getDate(birthDateDay, birthDateMonth, birthDateYear); User mappingUser = null; List<Long> roleIds = new ArrayList<Long>(); List<Long> distinctJobPosIds = new ArrayList<Long>(); if (jobPosIds != null && jobPosIds.length > 0) { for (int job = 0; job < jobPosIds.length; job++) { if (jobPosIds[job] > 0) { JobPos jobPosTemp = jobPosPersistence.findByPrimaryKey(jobPosIds[job]); if (jobPosTemp != null) { if (!roleIds.contains(jobPosTemp.getMappingRoleId())) { roleIds.add(jobPosTemp.getMappingRoleId()); } if (!distinctJobPosIds.contains(jobPosTemp.getJobPosId())) { distinctJobPosIds.add(jobPosTemp.getJobPosId()); } } } } } long userIdMapping = employee.getMappingUserId(); if (isAddUser) { // Get Working Unit WorkingUnit workingUnit = null; if (workingUnitId > 0) { workingUnit = workingUnitPersistence.findByPrimaryKey(workingUnitId); } // Get OrganizationId long[] organizationIds = null; if (workingUnit != null) { organizationIds = new long[] { workingUnit.getMappingOrganisationId() }; } // delete all mapping user with multiply roles List<Role> roles = new ArrayList<Role>(); try { roles = RoleLocalServiceUtil.getUserRoles(userIdMapping); } catch (Exception e) { // TODO: handle exception } if (!roles.isEmpty()) { RoleLocalServiceUtil.deleteUserRoles(userIdMapping, roles); } // add new roles after delete Role defaultRole = null; try { defaultRole = RoleLocalServiceUtil.getRole(serviceContext.getCompanyId(), WebKeys.EMPLOYEE_ROLE_NAME); } catch (Exception e) { } roleIds.add(jobPos.getMappingRoleId()); long[] listRoles = null; if (!roleIds.isEmpty()) { listRoles = new long[roleIds.size() + 1]; if (Validator.isNotNull(defaultRole)) { listRoles[roleIds.size()] = defaultRole.getRoleId(); } for (int i = 0; i < roleIds.size(); i++) { listRoles[i] = roleIds.get(i); } } else { if (Validator.isNotNull(defaultRole)) { listRoles = new long[] { defaultRole.getRoleId() }; } } mappingUser = userService.addUserWithWorkflow(serviceContext.getCompanyId(), false, password, reTypePassword, false, screenName, accountEmail, 0L, StringPool.BLANK, LocaleUtil.getDefault(), spn.getFirstName(), spn.getMidName(), spn.getLastName(), 0, 0, (gender == 1), birthDateMonth, birthDateDay, birthDateYear, jobPos != null ? jobPos.getTitle() : StringPool.BLANK, groupIds, organizationIds, listRoles, userGroupIds, new ArrayList<Address>(), new ArrayList<EmailAddress>(), new ArrayList<Phone>(), new ArrayList<Website>(), new ArrayList<AnnouncementsDelivery>(), false, serviceContext); } else { try { mappingUser = userLocalService.getUserById(employee.getMappingUserId()); } catch (Exception e) { _log.error(e); } if (mappingUser != null) { // Reset password if (isResetPassWord) { mappingUser = userLocalService.updatePassword(mappingUser.getUserId(), password, reTypePassword, false); } // Change user name if (!fullName.equals(employee.getFullName())) { mappingUser.setFirstName(spn.getFirstName()); mappingUser.setLastName(spn.getLastName()); mappingUser.setMiddleName(spn.getMidName()); } // update job title if (jobPos != null && !jobPos.getTitle().equals(mappingUser.getJobTitle())) { mappingUser.setJobTitle(jobPos.getTitle()); } // userLocalService.setRoleUsers for (Long roleId : roleIds) { userLocalService.setRoleUsers(roleId, new long[] { mappingUser.getUserId() }); } // delete all mapping user with multiply roles List<Role> roles = new ArrayList<Role>(); try { roles = RoleLocalServiceUtil.getUserRoles(userIdMapping); } catch (Exception e) { // TODO: handle exception } if (!roles.isEmpty()) { RoleLocalServiceUtil.deleteUserRoles(userIdMapping, roles); } // add new roles after delete Role defaultRole = null; try { defaultRole = RoleLocalServiceUtil.getRole(serviceContext.getCompanyId(), WebKeys.EMPLOYEE_ROLE_NAME); } catch (Exception e) { } roleIds.add(jobPos.getMappingRoleId()); long[] listRoles = null; if (!roleIds.isEmpty()) { listRoles = new long[roleIds.size() + 1]; if (Validator.isNotNull(defaultRole)) { listRoles[roleIds.size()] = defaultRole.getRoleId(); } for (int i = 0; i < roleIds.size(); i++) { listRoles[i] = roleIds.get(i); } } else { if (Validator.isNotNull(defaultRole)) { listRoles = new long[] { defaultRole.getRoleId() }; } } RoleLocalServiceUtil.addUserRoles(userIdMapping, listRoles); mappingUser = userLocalService.updateUser(mappingUser); // update birth date Contact contact = ContactLocalServiceUtil.getContact(mappingUser.getContactId()); if (contact != null) { contact.setBirthday(birthDate); contact = ContactLocalServiceUtil.updateContact(contact); } } } // update employee employee.setUserId(userId); employee.setGroupId(serviceContext.getScopeGroupId()); employee.setCompanyId(serviceContext.getCompanyId()); employee.setModifiedDate(now); employee.setEmployeeNo(employeeNo); employee.setFullName(fullName); employee.setGender(gender); employee.setBirthdate(birthDate); employee.setTelNo(telNo); employee.setMobile(mobile); employee.setWorkingUnitId(workingUnitId); employee.setMainJobPosId(mainJobPosId); employeePersistence.setJobPoses(employeeId, ArrayUtil.toLongArray(distinctJobPosIds)); if (isAddUser && mappingUser != null) { employee.setMappingUserId(mappingUser.getUserId()); } return employeePersistence.update(employee); } private Log _log = LogFactoryUtil.getLog(EmployeeLocalServiceImpl.class.getName()); }