1
0

2 Ревизии 4eb0625eb6 ... 35e7cf1213

Автор SHA1 Съобщение Дата
  huiwonseo 35e7cf1213 Merge branch 'databank' of http://wcollector.idatabank.com:5230/dbs289/LifeCenter into databank преди 3 години
  huiwonseo 4c9b17060c 30일 미사용 계정 로그인 불가처리 преди 3 години

+ 18 - 0
src/main/java/com/lemon/lifecenter/controller/LoginController.java

@@ -275,6 +275,24 @@ public class LoginController extends LifeCenterController {
                 // last login time NOW() update
                 resultCode = "00";
                 message    = "로그인 성공";
+
+                if( loginService.selectAccessHistorySuccessCount(dto) > 0 ) {
+                  int dateDiff = loginService.selectAccessHistorySuccessData(dto).getDateDiff();
+
+                  if( dateDiff > 30 && loginType.equals( "staff" ) ) {
+                    resultCode = "07";
+                    message = "장기간(30일) 미사용으로 계정 사용이 불가하오니<br/>관리자에게 비밀번호 초기화를 요청하시기 바랍니다";
+                    accessMap.put("successYn", "N");
+                    accessMap.put("logMessage", message);
+                    loginService.insertAccessHistory(accessMap);
+
+                    json.put("code", resultCode);
+                    json.put("message", message);
+                    json.put("url", url);
+
+                    return json.toString();
+                  }
+                }
                 
                 dto.setFailCount( 0 );
                 dto.setResultCode( resultCode );

+ 59 - 8
src/main/java/com/lemon/lifecenter/controller/MobilePushController.java

@@ -7,21 +7,23 @@ import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.lemon.lifecenter.common.LifeCenterConfigVO;
+import com.lemon.lifecenter.common.LifeCenterController;
+import com.lemon.lifecenter.common.LifeCenterFunction;
+import com.lemon.lifecenter.common.LifeCenterSessionController;
+import com.lemon.lifecenter.dto.PushDTO;
+import com.lemon.lifecenter.service.PushService;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
-import com.lemon.lifecenter.common.LifeCenterConfigVO;
-import com.lemon.lifecenter.common.LifeCenterController;
-import com.lemon.lifecenter.common.LifeCenterFunction;
-import com.lemon.lifecenter.common.LifeCenterSessionController;
-import com.lemon.lifecenter.dto.PushDTO;
-import com.lemon.lifecenter.service.PushService;
-
 @Controller
 @RequestMapping("/mobile")
 public class MobilePushController extends LifeCenterController {
@@ -35,7 +37,9 @@ public class MobilePushController extends LifeCenterController {
     private PushService pushService;
     
     @RequestMapping("/push/list")
-    public ModelAndView pushList(@RequestParam(value="ym", required=false, defaultValue="") String ym,
+    public ModelAndView pushList(
+        @RequestParam(value="ym", required=false, defaultValue="") String ym,
+        @RequestParam(value = "page", required = false, defaultValue = "1") int page,
             HttpServletRequest request, HttpServletResponse response) throws ParseException {
         
         String sesMpIdx  = LifeCenterSessionController.getSession(request, "sesMpIdx");
@@ -46,6 +50,9 @@ public class MobilePushController extends LifeCenterController {
         
         PushDTO dto = new PushDTO();
         
+        dto.setLimit((Integer.valueOf(page) - 1) * config.pageDataSize);
+        dto.setLimitMax(config.pageDataSize);
+
         String ym2 = ym.replace("-", "");
         dto.setYm(ym2);
         dto.setPatientIdx(Integer.parseInt(sesMpIdx));
@@ -66,6 +73,50 @@ public class MobilePushController extends LifeCenterController {
         mv.addObject("nowMonth", LifeCenterFunction.getNow( "yyyy-MM" ));
         mv.addObject("listCount", listCount);
         mv.addObject("pushList", pushList);
+        mv.addObject("page", page);
         return mv;
     }
+
+    @RequestMapping( value="/push/list/more", method=RequestMethod.GET)
+    @ResponseBody
+    public ModelAndView pushListMore(
+        @RequestParam(value = "ym", required = false, defaultValue = "") String ym,
+        @RequestParam(value = "page", required = false, defaultValue = "1") int page,
+        HttpServletRequest request, HttpServletResponse response) throws ParseException {
+      page = Integer.valueOf( page );
+
+      String sesMpIdx = LifeCenterSessionController.getSession(request, "sesMpIdx");
+
+      if (ym.equals("")) {
+        ym = LifeCenterFunction.getNow("yyyy-MM");
+      }
+
+      PushDTO dto = new PushDTO();
+
+      dto.setLimit((Integer.valueOf(page) - 1) * config.pageDataSize);
+      dto.setLimitMax(config.pageDataSize);
+
+      String ym2 = ym.replace("-", "");
+      dto.setYm(ym2);
+      dto.setPatientIdx(Integer.parseInt(sesMpIdx));
+      int total = pushService.selectPushResultTableCount(dto);
+
+      int listCount = 0;
+      List<PushDTO> pushList = new ArrayList<PushDTO>();
+      if (total > 0) {
+        listCount = pushService.mobilePushMessageBoxCount(dto);
+        pushList = pushService.mobilePushMessageBox(dto);
+      }
+
+      ModelAndView mv = setMobileMV("push/list");
+      mv.addObject("total", total);
+      mv.addObject("date", ym);
+      mv.addObject("prevMonth", LifeCenterFunction.getPrevMonth(ym));
+      mv.addObject("nextMonth", LifeCenterFunction.getNextMonth(ym));
+      mv.addObject("nowMonth", LifeCenterFunction.getNow("yyyy-MM"));
+      mv.addObject("listCount", listCount);
+      mv.addObject("pushList", pushList);
+      
+      return mv;
+    }
 }

+ 18 - 0
src/main/java/com/lemon/lifecenter/dto/LoginDTO.java

@@ -19,6 +19,24 @@ public class LoginDTO {
     private String pwChangeReq = "";
     private String centerUseYn = "";
     private String permissions = "";
+    private String loginTime="";
+    private int dateDiff=0;
+
+    public int getDateDiff() {
+      return this.dateDiff;
+    }
+
+    public void setDateDiff(int dateDiff) {
+      this.dateDiff = dateDiff;
+    }
+
+    public String getLoginTime() {
+      return this.loginTime;
+    }
+
+    public void setLoginTime(String loginTime) {
+      this.loginTime = loginTime;
+    }
     
     public String getPermissions() {
         return permissions;

+ 3 - 0
src/main/java/com/lemon/lifecenter/mapper/LoginMapper.java

@@ -20,4 +20,7 @@ public interface LoginMapper {
     public void insertAccessHistory(HashMap<String, String> hashMap);
     
     public void memberPwXDbHash(LoginDTO dto);
+
+    public int selectAccessHistorySuccessCount(LoginDTO dto);
+    public LoginDTO selectAccessHistorySuccessData(LoginDTO dto);
 }

+ 46 - 37
src/main/java/com/lemon/lifecenter/service/LoginService.java

@@ -10,41 +10,50 @@ import com.lemon.lifecenter.mapper.LoginMapper;
 
 @Service
 public class LoginService {
-    @Autowired
-    private LoginMapper mapper;
-    
-    public int selectMemberCountXDbHash(LoginDTO dto) {
-        return mapper.selectMemberCountXDbHash(dto);
-    }
-
-    public int selectMemberCountSha256(LoginDTO dto) {
-        return mapper.selectMemberCountSha256(dto);
-    }
-    
-    public LoginDTO selectMemberDataXDbHash(LoginDTO dto) {
-        return mapper.selectMemberDataXDbHash(dto);
-    }
-
-    public LoginDTO selectMemberDataSha256(LoginDTO dto) {
-        return mapper.selectMemberDataSha256(dto);
-    }
-    
-    public Integer updateMemberLoginData(LoginDTO dto) {
-        return mapper.updateMemberLoginData(dto);
-    }
-    
-    public int selectMemberIdCount(LoginDTO dto) {
-        return mapper.selectMemberIdCount(dto);
-    }
-    public int selectMemberFailCount(LoginDTO dto) {
-        return mapper.selectMemberFailCount(dto);
-    }
-    
-    public void insertAccessHistory(HashMap<String, String> hashMap) {
-        mapper.insertAccessHistory(hashMap); 
-    }
-    
-    public void memberPwXDbHash(LoginDTO dto) {
-        mapper.memberPwXDbHash(dto);
-    }
+  @Autowired
+  private LoginMapper mapper;
+
+  public int selectMemberCountXDbHash(LoginDTO dto) {
+    return mapper.selectMemberCountXDbHash(dto);
+  }
+
+  public int selectMemberCountSha256(LoginDTO dto) {
+    return mapper.selectMemberCountSha256(dto);
+  }
+
+  public LoginDTO selectMemberDataXDbHash(LoginDTO dto) {
+    return mapper.selectMemberDataXDbHash(dto);
+  }
+
+  public LoginDTO selectMemberDataSha256(LoginDTO dto) {
+    return mapper.selectMemberDataSha256(dto);
+  }
+
+  public Integer updateMemberLoginData(LoginDTO dto) {
+    return mapper.updateMemberLoginData(dto);
+  }
+
+  public int selectMemberIdCount(LoginDTO dto) {
+    return mapper.selectMemberIdCount(dto);
+  }
+
+  public int selectMemberFailCount(LoginDTO dto) {
+    return mapper.selectMemberFailCount(dto);
+  }
+
+  public void insertAccessHistory(HashMap<String, String> hashMap) {
+    mapper.insertAccessHistory(hashMap);
+  }
+
+  public void memberPwXDbHash(LoginDTO dto) {
+    mapper.memberPwXDbHash(dto);
+  }
+
+  public int selectAccessHistorySuccessCount(LoginDTO dto) {
+    return mapper.selectAccessHistorySuccessCount(dto);
+  }
+
+  public LoginDTO selectAccessHistorySuccessData(LoginDTO dto) {
+    return mapper.selectAccessHistorySuccessData(dto);
+  }
 }

+ 37 - 14
src/main/resources/mybatis/mapper/login/login.xml

@@ -103,26 +103,49 @@
     </select>
     
     <update id="updateMemberLoginData" parameterType="LoginDTO">
+      <![CDATA[
+      UPDATE MEMBER
+      SET FAIL_COUNT = #{failCount}
+      ]]>
+      <if test="resultCode != null and resultCode == '00'">
         <![CDATA[
-            UPDATE MEMBER
-               SET FAIL_COUNT = #{failCount}
-        ]]>
-        <if test="resultCode != null and resultCode == '00'">
-            <![CDATA[
-                   , LAST_LOGIN_TIME = NOW()
-            ]]>
-        </if>
-        <![CDATA[
-             WHERE ID = #{id}
+        , LAST_LOGIN_TIME = NOW()
         ]]>
+      </if>
+      <![CDATA[
+      WHERE ID = #{id}
+      ]]>
     </update>
     
     
     <insert id="insertAccessHistory" parameterType="HashMap">
+      <![CDATA[
+      INSERT INTO ACCESS_HISTORY
+      (ID,    IP,    LOGIN_TIME, SUCCESS_YN,   lOG_MESSAGE)
+      VALUE (#{id}, #{ip}, NOW(),      #{successYn}, #{logMessage})
+      ]]>
+    </insert>
+
+
+
+    <select id="selectAccessHistorySuccessCount" parameterType="LoginDTO" resultType="int">
         <![CDATA[
-            INSERT INTO ACCESS_HISTORY
-                        (ID,    IP,    LOGIN_TIME, SUCCESS_YN,   lOG_MESSAGE)
-                  VALUE (#{id}, #{ip}, NOW(),      #{successYn}, #{logMessage})
+          SELECT COUNT(*) total
+            FROM access_history
+           WHERE id = #{id}
+             AND success_yn = 'Y'
         ]]>
-    </insert>
+    </select>
+
+    <select id="selectAccessHistorySuccessData" parameterType="LoginDTO" resultType="LoginDTO">
+        <![CDATA[
+          SELECT DATEDIFF( NOW(), login_time ) AS dateDiff,
+                 login_time AS loginTime
+            FROM access_history
+           WHERE id = #{id}
+             AND success_yn = 'Y'
+           ORDER BY access_idx desc
+           LIMIT 1 
+        ]]>
+    </select>
 </mapper>

+ 1 - 0
src/main/resources/mybatis/mapper/push/push.xml

@@ -482,6 +482,7 @@
                AND PR.SUCCESS_YN = 'Y'
                AND PR.STATE = 'C'
              ORDER BY PR.UPDATE_DATE DESC
+             LIMIT ${limit}, ${limitMax}
         ]]>
     </select>
 </mapper>

+ 116 - 5
src/main/webapp/WEB-INF/jsp/mobile/push/list.jsp

@@ -2,10 +2,47 @@
 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
 <%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
 <%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
 <jsp:include page="${data._INCLUDE}/header.jsp"></jsp:include>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css">
 <script type="text/javascript">
+var page = 1;
 
+function morePushList( cdate ) {
+  var listTotal = $( "div.push-list" ).data("listCount");
+
+  page ++;
+
+  $( "div.more" ).css( "visibility", "hidden" );
+
+  $.ajax({
+      type: "GET",
+      url : "./list?ym=" + cdate + "&page=" + page,
+      dataType : "text",
+      error : function(){
+          console.log( "error" );
+      },
+      success : function( data ){
+        // console.log( data );
+          var domNodes = $( $.parseHTML( data ) );
+          $( "div.push-list ul" ).append( domNodes.find( "div.push-list ul" ).html() );
+          console.log( listTotal ,  $( "div.push-list ul li" ).length );
+          if( listTotal <= $( "div.push-list ul li" ).length ) {
+            $( "div.more" ).hide();
+          } else {
+            console.log( "dddd" );
+            // setTimeout( "" )
+            $( "div.more" ).css( "visibility", "visible" ).show();
+
+          }
+      }
+  })
+}
+
+$( function() {
+  
+});
 </script>
 <style>
 span.push-title{}
@@ -28,18 +65,16 @@ span.push-date{float:right;font-size:14px;color:#999;}
             <div class="daily" style="margin-top:20px;">
                 <a href="?ym=${prevMonth}" class="previous active"><spring:message code="header.previous" /></a>
                     <fmt:parseDate var="cDate" value="${date}" pattern="yyyy-MM" />
-                    <c:set var="currentDate"><fmt:formatDate value="${cDate}" type="date" /></c:set>
+                    <c:set var="ymDate"><fmt:formatDate value="${cDate}" type="date" pattern="yyyy-MM" /></c:set>
+                    <c:set var="currentDate"><fmt:formatDate value="${cDate}" type="date" dateStyle="medium" /></c:set>
                     <c:out value="${currentDate}" />
                 <c:if test="${nextMonth <= nowMonth}">
                     <a href="?ym=${nextMonth}" class="next active"><spring:message code="header.next" /></a>
                 </c:if>
-                
             </div>
         </div>
         
-        <div class="alert" style="border-top:1px solid #CCCCCC;"><spring:message code="push.monthlyPushMessage.ReceptionHistory" /></div>
-        
-        <div class="faq">
+        <div class="faq" style="display: none;">
             <ul class="list">
                 <c:if test="${total eq 0}">
                     <li>
@@ -74,6 +109,82 @@ span.push-date{float:right;font-size:14px;color:#999;}
                 </c:if>
             </ul>
         </div>
+
+        <style>
+          div.push-list li{border: 1px solid #DBDBDB;margin-bottom:10px;margin:7px;}
+          div.push-wrap{border-radius:5px;overflow:hidden;}
+          div.push-wrap div.push-title{display:flex;flex-direction: row;padding:10px;align-items:center;border-bottom:1px solid #EAEAEA;background: #fafafa;}
+          div.push-wrap div.push-title .title{color:#428ADC;font-size:14px;font-weight:600;flex:1;word-break: break-word;}
+          div.push-wrap div.push-title .date{font-size:12px;color:#999;text-align:right;margin-left:10px;}
+          div.push-wrap div.push-content{padding:10px;white-space:pre-wrap;}
+          div.more{text-align: center;cursor:pointer;overflow:hidden;margin:7px;height:50px;}
+          div.more span{border:1px solid #DBDBDB;padding:10px;display: inline-block;width:100%;background: #e7e7e7;color: #7c7c7c;}
+        </style>
+
+        <div class="push-list" 
+          data-list-count="${listCount}"
+          style="position:fixed;top:135px;left:0;right:0;bottom:0;overflow:auto;">
+          <div class="alert" style="border-top:1px solid #CCCCCC;"><spring:message code="push.monthlyPushMessage.ReceptionHistory" /></div>
+
+          <ul>
+            <c:choose>
+              <c:when test="${total eq 0}">
+                <div style="color:#666;font-size:15px;margin:10px;border:1px solid #DBDBDB;padding:10px;text-align: center;">
+                  <i class="far fa-comment-dots" style="font-size:80px;margin-bottom:10px;"></i>
+                  <p>
+                    <spring:message code="push.emptyMessageInbox" />
+                  </p>
+                </div>
+              </c:when>
+
+              <c:otherwise>
+                <c:choose>
+                  <c:when test="${listCount eq 0}">
+                    <div style="color:#666;font-size:15px;margin:10px;border:1px solid #DBDBDB;padding:10px;text-align: center;">
+                      <i class="far fa-comment-dots" style="font-size:80px;margin-bottom:10px;"></i>
+                      <p>
+                        <spring:message code="push.emptyMessageInbox" />
+                      </p>
+                    </div>
+                  </c:when>
+                  <c:otherwise>
+                    <c:forEach var="i" items="${pushList}">
+                      <li>
+                        <div class="push-wrap">
+                          <div class="push-title">
+                            <span class="title"><c:out value="${i.pushTitle}" /></span>
+
+                            <span class="date">
+                              <fmt:parseDate var="uDate" value="${i.updateDate}" pattern="yyyy-MM-dd HH:mm" />
+                              <c:set var="updateDate"><fmt:formatDate value="${uDate}" type="both" timeStyle="short" /></c:set>
+                              <c:out value="${updateDate}" />
+                            </span>
+                          </div>
+                          <div class="push-content"><c:out value="${i.pushContent}" /></div>
+                        </div>
+                      </li>
+                    </c:forEach>
+                  </c:otherwise>
+                </c:choose>
+              </c:otherwise>
+            </c:choose>
+          </ul>
+
+
+          <c:choose>
+            <c:when test="${listCount eq 0 or totla eq 0}"></c:when>
+            <c:otherwise>
+              <c:if test="${listCount > fn:length(pushList)}">
+                <div class="more" onclick="morePushList( '${ymDate}' );">
+                  <span>더보기 ..</span>
+                </div>
+              </c:if>
+            </c:otherwise>
+          </c:choose>
+          <c:if test=''>
+
+          </c:if>
+        </div>
     </div>
 </div>
 

+ 4 - 2
src/main/webapp/WEB-INF/jsp/patient/edit.jsp

@@ -406,6 +406,9 @@ function resetInput( t ) {
 }
 
 function validRegistrationNumber( f, l ) {
+    var f2 = f.substr(0, 2);
+    var f4 = f.substr(0, 4);
+
     var rn = f + "" + l;
     rn = rn.split("-").join('');
     if( rn.length !== 13 ) return false;
@@ -416,10 +419,9 @@ function validRegistrationNumber( f, l ) {
     var rrnMatch = (11-(checkSum%11))%10 == rn.substr(12,1);
     var frnMatch = (13-(checkSum%11))%10 == rn.substr(12,1);
 
-    return rrnMatch || frnMatch;
+    return rrnMatch || frnMatch || ( f2 >= "20" && f2 <= moment().format('YY') && f4 >= "2010" );
 };
 
-
 function ssnCheck(_ssn1, _ssn2) {
     var ssn1    = _ssn1,
         ssn2    = _ssn2,

+ 6 - 1
src/main/webapp/WEB-INF/jsp/patient/new.jsp

@@ -350,6 +350,8 @@ $( function(){
         }
       }
     });
+
+     $('input[name="jumin"]').val('');
 });
 
 function fModalReset(){
@@ -416,6 +418,9 @@ function resetInput( t ) {
 }
 
 function validRegistrationNumber( f, l ) {
+    var f2 = f.substr(0, 2);
+    var f4 = f.substr(0, 4);
+
     var rn = f + "" + l;
     rn = rn.split("-").join('');
     if( rn.length !== 13 ) return false;
@@ -426,7 +431,7 @@ function validRegistrationNumber( f, l ) {
     var rrnMatch = (11-(checkSum%11))%10 == rn.substr(12,1);
     var frnMatch = (13-(checkSum%11))%10 == rn.substr(12,1);
 
-    return rrnMatch || frnMatch;
+    return rrnMatch || frnMatch || ( f2 >= "20" && f2 <= moment().format('YY') && f4 >= "2010" );
 };
 
 function ssnCheck(_ssn1, _ssn2) {