Эх сурвалжийг харах

积分申报修改(未全部完成)

sugangqiang 1 жил өмнө
parent
commit
dfc497a120

+ 19 - 0
app/admin/controller/System.php

@@ -101,4 +101,23 @@ class System extends AdminController {
         echo "加入队列成功";
     }
 
+    /**
+     * 生成人才积分基础分日志
+     */
+    public function generate_integral_base_log() {
+        $where = [];
+        $where[] = ["e.type", "=", 2];
+        $where[] = ["ti.checkState", "=", \app\common\api\TalentState::CERTIFICATED];
+        $list = Db::table("new_talent_info")->alias("ti")->leftJoin("un_enterprise e", "e.id=ti.enterprise_id")->field("ti.*")->where($where)->order("ti.talent_arrange asc")->select();
+        $already_in = [];
+        foreach ($list as $item) {
+            $unique_md5 = md5($item["card_type"] . "_" . $item["card_number"]);
+            if (!in_array($unique_md5, $already_in)) {
+                queue("app\job\Talent", ["type" => 4, "id" => $item["id"]]);
+                $already_in[] = $unique_md5;
+            }
+        }
+        echo "加入队列成功";
+    }
+
 }

+ 17 - 7
app/admin/controller/Talent.php

@@ -790,15 +790,25 @@ class Talent extends AdminController {
                         return json(["msg" => "只能对公布通过的对象发放人才码,请核查待发放人才码名单后再重新发放人才码"]);
                     }
 
-                    $no_prefix = $_prefix_type . $year . $talent_info["talent_arrange"];
+                    /* 检查是否有存在人才码,保持同一个人唯一 */
                     $where = [];
-                    $where[] = ["certificateNo", "like", $no_prefix . "%"];
-                    $max_no = $talent_max_no[$talent_info["talent_arrange"]] ?: Db::table("new_talent_info")->where($where)->max("certificateNo", false);
-                    if (!$max_no) {
-                        $max_no = $no_prefix . "0001";
+                    $where[] = ["card_type", "=", $talent_info["card_type"]];
+                    $where[] = ["card_number", "=", $talent_info["card_number"]];
+                    $where[] = ["checkState", "=", TalentState::CERTIFICATED];
+                    $fstTalentInfo = Db::table("new_talent_info")->where($where)->order("createTime asc")->find(); //取第一条全通记录
+                    if ($fstTalentInfo) {
+                        $max_no = $fstTalentInfo["certificateNo"];
                     } else {
-                        $new_no = intval(substr($max_no, $subindex)) + 1;
-                        $max_no = $no_prefix . str_pad($new_no, 4, "0", STR_PAD_LEFT);
+                        $no_prefix = $_prefix_type . $year . $talent_info["talent_arrange"];
+                        $where = [];
+                        $where[] = ["certificateNo", "like", $no_prefix . "%"];
+                        $max_no = $talent_max_no[$talent_info["talent_arrange"]] ?: Db::table("new_talent_info")->where($where)->max("certificateNo", false);
+                        if (!$max_no) {
+                            $max_no = $no_prefix . "0001";
+                        } else {
+                            $new_no = intval(substr($max_no, $subindex)) + 1;
+                            $max_no = $no_prefix . str_pad($new_no, 4, "0", STR_PAD_LEFT);
+                        }
                     }
 //更新证书编号
                     $data["id"] = $talent_info["id"];

+ 2 - 2
app/admin/view/integral_verify/integral_log.html

@@ -30,7 +30,7 @@
                             <input type="hidden" id="process" value="5">
                             <input type="hidden" id="card_type" value="{$cardType}">
                             <input type="hidden" id="card_number" value="{$cardNumber}">
-                            <div class="col-sm-3">
+                            <!--<div class="col-sm-3">
                                 <div class="input-group input-group-sm">
                                     <div class="input-group-btn">
                                         <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">申报年度
@@ -74,7 +74,7 @@
                                 <button type="button" class="btn btn-sm btn-primary " onclick="IntegralVerify.reset()" id="">
                                     <i class="fa fa-trash"></i>&nbsp;重置
                                 </button>
-                            </div>
+                            </div>-->
                         </div>
                         <div class="hidden-xs" id="IntegralLogTableToolbar" role="group">
                             <button type="button" class="btn btn-sm btn-primary " onclick="IntegralVerify.openCheckIntegralVerify()" id="">

+ 79 - 22
app/common/api/IntegralRecordApi.php

@@ -7,6 +7,7 @@ use app\admin\model\Enterprise;
 use think\facade\Db;
 use app\common\model\IntegralRecord;
 use app\common\state\IntegralState;
+use app\common\state\CommonConst;
 
 /**
  * Description of IntegralRecordApi
@@ -202,7 +203,7 @@ class IntegralRecordApi {
             case 4:
                 return self::getLibraryList($params);
             case 5:
-                $where[] = ["ir.checkState", "=", IntegralState::SUCCESS];
+                return self::getIntegralLogs($params);
                 break;
         }
         $where[] = ["ir.delete", "=", 0];
@@ -259,39 +260,95 @@ class IntegralRecordApi {
 
         $where = [];
         $where[] = ["e.type", "=", session("user")["type"]];
-        $where[] = ["ir.checkState", "=", IntegralState::SUCCESS];
-        $where[] = ["ir.delete", "=", 0];
         if ($params["name"]) {
-            $where[] = ["ir.name", "like", "%{$params['name']}%"];
+            $where[] = ["l.name", "like", "%{$params['name']}%"];
         }
         if ($params["card_number"]) {
-            $where[] = ["ir.card_number", "like", "%{$params['card_number']}%"];
+            $where[] = ["l.card_number", "like", "%{$params['card_number']}%"];
         }
         if ($params["enterprise_id"]) {
-            $where[] = ["ir.enterprise_id", "=", $params['enterprise_id']];
+            $where[] = ["l.enterprise_id", "=", $params['enterprise_id']];
         }
         if ($params["veto"]) {
             $having = "if(min_shareholder=1 and enterprise_veto = 1,true,false) or personal_veto = 1";
         } else {
             $having = "if(min_shareholder=1 and enterprise_veto = 1,false,true) and personal_veto = 0";
         }
-        $count = IntegralRecord::alias("ir")->where($where)
-                ->leftJoin("sys_batch b", "b.id=ir.batch_id")
-                ->leftJoin("un_enterprise e", "e.id=ir.enterprise_id")
-                ->leftJoin("new_integral_veto iv1", "iv1.enterprise_id=ir.enterprise_id")
-                ->leftJoin("new_integral_veto iv2", "md5(concat(iv2.card_type,iv2.card_number))=md5(concat(ir.card_type,ir.card_number))")
-                ->field("min(shareholder) as min_shareholder,if(iv1.`active`=1,iv1.`active`,0) as enterprise_veto,if(iv2.`active`=1,iv2.`active`,0) as personal_veto")
-                ->group("concat(ir.card_type,ir.card_number)")
-                ->having($having)
+        $count = Db::table("new_integral_log")->alias("l")->where($where)
+                ->leftJoin("un_enterprise e", "e.id=l.enterprise_id")
+                //->leftJoin("new_integral_veto iv1", "iv1.enterprise_id=l.enterprise_id")
+                //->leftJoin("new_integral_veto iv2", "md5(concat(iv2.card_type,iv2.card_number))=md5(concat(l.card_type,l.card_number))")
+                //->field("min(shareholder) as min_shareholder,if(iv1.`active`=1,iv1.`active`,0) as enterprise_veto,if(iv2.`active`=1,iv2.`active`,0) as personal_veto")
+                ->group("concat(l.card_type,l.card_number)")
+                //->having($having)
                 ->count();
-        $list = IntegralRecord::alias("ir")->where($where)
-                        ->leftJoin("sys_batch b", "b.id=ir.batch_id")
-                        ->leftJoin("un_enterprise e", "e.id=ir.enterprise_id")
-                        ->leftJoin("new_integral_veto iv1", "iv1.enterprise_id=ir.enterprise_id")
-                        ->leftJoin("new_integral_veto iv2", "md5(concat(iv2.card_type,iv2.card_number))=md5(concat(ir.card_type,ir.card_number))")
-                        ->group("concat(ir.card_type,ir.card_number)")
-                        ->having($having)
-                        ->field("min(shareholder) as min_shareholder,ir.name,ir.card_type,ir.card_number,ir.enterprise_id,sum(ir.totalPoints) as totalPoints,e.name as enterpriseName,if(iv1.`active`=1,iv1.`active`,0) as enterprise_veto,iv1.description as enterprise_veto_msg,if(iv2.`active`=1,iv2.`active`,0) as personal_veto,iv2.description as personal_veto_msg")->limit($offset, $limit)->order("b.batch " . $order)->select();
+        $list = Db::table("new_integral_log")->alias("l")->where($where)
+                        ->leftJoin("un_enterprise e", "e.id=l.enterprise_id")
+                        //->leftJoin("new_integral_veto iv1", "iv1.enterprise_id=ir.enterprise_id")
+                        //->leftJoin("new_integral_veto iv2", "md5(concat(iv2.card_type,iv2.card_number))=md5(concat(ir.card_type,ir.card_number))")
+                        ->group("concat(l.card_type,l.card_number)")
+                        //->having($having)
+                        //->field("min(shareholder) as min_shareholder,ir.name,ir.card_type,ir.card_number,ir.enterprise_id,sum(ir.totalPoints) as totalPoints,e.name as enterpriseName,if(iv1.`active`=1,iv1.`active`,0) as enterprise_veto,iv1.description as enterprise_veto_msg,if(iv2.`active`=1,iv2.`active`,0) as personal_veto,iv2.description as personal_veto_msg")
+                        ->field("l.*,sum(gainPoints) as totalPoints,e.name as enterpriseName")
+                        ->limit($offset, $limit)
+                        //->order("b.batch " . $order)
+                        ->select()->toArray();
+        foreach ($list as $key => $item) {
+            $list[$key]["basePoints"] = CommonConst::getLayerPointsByLayer($item["talentLevel"]);
+        }
+        return ["total" => $count, "rows" => $list];
+    }
+
+    public static function getIntegralLogs($params) {
+        $order = $params["order"] ?: "desc";
+        $offset = $params["offset"] ?: 0;
+        $limit = $params["limit"] ?: 10;
+
+        $where = [];
+        $where[] = ["e.type", "=", session("user")["type"]];
+        if ($params["name"]) {
+            $where[] = ["l.name", "like", "%{$params['name']}%"];
+        }
+        if ($params["card_number"]) {
+            $where[] = ["l.card_number", "like", "%{$params['card_number']}%"];
+        }
+        if ($params["enterprise_id"]) {
+            $where[] = ["l.enterprise_id", "=", $params['enterprise_id']];
+        }
+        $count = Db::table("new_integral_log")->alias("l")->where($where)
+                ->leftJoin("un_enterprise e", "e.id=l.enterprise_id")
+                ->count();
+        $list = Db::table("new_integral_log")->alias("l")
+                        ->field("l.*,e.name as enterpriseName")
+                        ->leftJoin("un_enterprise e", "e.id=l.enterprise_id")
+                        ->where($where)
+                        ->limit($offset, $limit)
+                        ->order("l.createTime desc")
+                        ->select()->toArray();
+        foreach ($list as $key => $item) {
+            $where = [];
+            if ($item["mainType"] == "integral") {
+                $where[] = ["ir.id", "=", $item["mainId"]];
+                $integralInfo = IntegralRecord::alias("ir")->leftJoin("sys_batch b", "b.id=ir.batch_id")->field("ir.*,b.batch as apply_year")->where($where)->find();
+                $list[$key]["apply_year"] = $integralInfo["apply_year"];
+                $list[$key]["shareholder"] = $integralInfo["shareholder"];
+                $tmp_items = [];
+                foreach ($integralInfo["detail"] as $_item) {
+                    $integral_item_info = getCacheById("IntegralItem", $_item["item_id"]);
+                    $tmp_items[] = sprintf("%s(%s%s)", $integral_item_info["name"], $_item["amount"], $integral_item_info["unit"]);
+                }
+                $list[$key]["details"] = implode(";", $tmp_items);
+                $list[$key]["first_submit_time"] = $integralInfo["first_submit_time"];
+                $list[$key]["new_submit_time"] = $integralInfo["new_submit_time"];
+            } else {
+                $where[] = ["id", "=", $item["mainId"]];
+                $talentInfo = Db::table("new_talent_info")->where($where)->find();
+                $list[$key]["apply_year"] = $talentInfo["apply_year"];
+                $list[$key]["details"] = $item["description"];
+                $list[$key]["first_submit_time"] = $talentInfo["first_submit_time"];
+                $list[$key]["new_submit_time"] = $talentInfo["new_submit_time"];
+            }
+        }
         return ["total" => $count, "rows" => $list];
     }
 

+ 28 - 0
app/common/controller/Api.php

@@ -849,6 +849,34 @@ class Api extends BaseController {
         }
     }
 
+    function getIntegralRecordByIdCard() {
+        $card_type = $this->request->param["cardType"];
+        $card_number = $this->request->param["cardNumber"];
+        $where = [];
+        $where[] = ["card_type", "=", $card_type];
+        $where[] = ["card_number", "=", $card_number];
+        $where[] = ["checkState", "=", TalentState::CERTIFICATED];
+        $talentInfo = Db::table("new_talent_info")->where($where)->find();
+
+        $where = [];
+        $where[] = ["card_type", "=", $card_type];
+        $where[] = ["card_number", "=", $card_number];
+        $integralLog = Db::table("new_integral_log")->where($where)->order("createTime desc")->find();
+        if (session("user")["usertype"] == 2 && (($talentInfo && session("user")["uid"] != $talentInfo["enterprise_id"]) || ($integralLog && session("user")["uid"] != $integralLog["enterprise_id"]))) {
+            $response = [
+                "deny" => 1
+            ];
+        } else {
+            $response = [
+                "isTalentInLibrary" => $talentInfo ? 1 : 0,
+                "levelName" => \app\common\state\CommonConst::getLayerNameByLayer($integralLog["talentLevel"]),
+                "level" => $integralLog["talentLevel"],
+                "totalPoints" => $integralLog["nowPoints"] ?: 0
+            ];
+        }
+        return json($response);
+    }
+
     function getIntegralProjectsByType() {
         $projectType = $this->request->param("projectType") ?: 0;
         if (session("user")["usertype"] == 2) {

+ 56 - 0
app/common/state/CommonConst.php

@@ -0,0 +1,56 @@
+<?php
+
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+namespace app\common\state;
+
+/**
+ * Description of CommonConst
+ * 公共常量
+ * @author sgq
+ */
+class CommonConst {
+
+    /**
+     * 通过层次得到层次基础积分
+     * @param type $level
+     * @return int
+     */
+    public static function getLayerPointsByLayer($level) {
+        $levelAndPoints = [
+            1 => 6000,
+            2 => 4000,
+            3 => 2000,
+            4 => 1000,
+            5 => 500,
+            6 => 200,
+            7 => 100,
+            8 => 0
+        ];
+        return $levelAndPoints[$level];
+    }
+
+    /**
+     * 通过层次得到层次名
+     * @param type $level
+     * @return string
+     */
+    public static function getLayerNameByLayer($level) {
+        $levelAndNames = [
+            1 => "第一层次",
+            2 => "第二层次",
+            3 => "第三层次",
+            4 => "第四层次",
+            5 => "第五层次",
+            6 => "第六层次",
+            7 => "第七层次",
+            8 => "非优秀人才"
+        ];
+        return $levelAndNames[$level];
+    }
+
+}

+ 1 - 0
app/enterprise/view/integral/apply.html

@@ -86,6 +86,7 @@
                                 <div class="panel panel-default">
                                     <div class="panel-heading" onclick="$(this).next().toggle()">基础信息</div>
                                     <div class="panel-body">
+                                        <div class="form-control" id="tips"></div>
                                         <table style="width: 100%;border-collapse: collapse;" class="table table-bordered">
                                             <tr>
                                                 <td>

+ 36 - 22
app/job/Integral.php

@@ -13,6 +13,7 @@ use app\common\api\TalentState;
 use app\enterprise\model\Talent as TalentModel;
 use app\common\state\ProjectState;
 use app\common\state\IntegralState;
+use app\common\state\CommonConst;
 
 /**
  * Description of Integral
@@ -78,11 +79,11 @@ class Integral {
                             7 => "第七层次",
                         ];
                         $gainPoints = $integralInfo["totalPoints"]; //增加积分
-                        $desc = sprintf("积分申请通过,增加积分%d。", $gainPoints); //详情
+                        $desc = sprintf("积分申报通过,增加%d分。", $gainPoints); //详情
 
                         /* 查询最后一条积分日志 */
                         $where = [];
-                        $where[] = ["name", "=", $name];
+                        //$where[] = ["name", "=", $name];
                         $where[] = ["card_type", "=", $cardType];
                         $where[] = ["card_number", "=", $cardNumber];
                         $last_log = Db::table("new_integral_log")->where($where)->order("createTime desc")->find();
@@ -90,7 +91,7 @@ class Integral {
 
                         $nowPoints = $lastPoints + $gainPoints;
                         $level = 1;
-                        while ($levelPoints = $levelAndPoints[$level]) {
+                        while ($levelPoints = CommonConst::getLayerPointsByLayer($level)) {
                             if ($nowPoints >= $levelPoints) {
                                 break;
                             }
@@ -100,6 +101,7 @@ class Integral {
                             //积分达到人才标准,检查是否需要增加人才库记录或者晋升
                             $lastTalentLevel = $last_log["talentLevel"] ?: 8;
                             if ($level != $lastTalentLevel && $level < $lastTalentLevel) {
+                                $desc .= sprintf("累计积分达到%d分,人才层次晋升(%s->%s)。", $nowPoints, CommonConst::getLayerNameByLayer($lastTalentLevel), CommonConst::getLayerNameByLayer($level));
                                 //层级变动,并且当前层级小于日志最后记录的层级,则为晋升
                                 /* 身份证提取有用内容填充 */
                                 if ($cardType == 1) {
@@ -115,23 +117,35 @@ class Integral {
                                     $birthday = $year . "-" . $month . "-" . $day;
                                     $newTalentInfo["birthday"] = $birthday;
                                 }
-                                /* 生成人才码 */
-                                switch ($type) {
-                                    case 2:
-                                        $_prefix_type = "IC";
-                                        $subindex += strlen($_prefix_type);
-                                        break;
-                                }
-                                $year = date("Y");
-                                $no_prefix = $_prefix_type . $year . $level;
+                                /* 检查是否有存在人才码,保持同一个人唯一 */
                                 $where = [];
-                                $where[] = ["certificateNo", "like", $no_prefix . "%"];
-                                $max_no = Db::table("new_talent_info")->where($where)->max("certificateNo", false);
-                                if (!$max_no) {
-                                    $max_no = $no_prefix . "0001";
+                                $where[] = ["card_type", "=", $cardType];
+                                $where[] = ["card_number", "=", $cardNumber];
+                                $where[] = ["checkState", "=", TalentState::CERTIFICATED];
+                                $fstTalentInfo = Db::table("new_talent_info")->where($where)->order("createTime asc")->find(); //取第一条全通记录
+                                if ($fstTalentInfo) {
+                                    $max_no = $fstTalentInfo["certificateNo"];
                                 } else {
-                                    $new_no = intval(substr($max_no, $subindex)) + 1;
-                                    $max_no = $no_prefix . str_pad($new_no, 4, "0", STR_PAD_LEFT);
+                                    /* 生成人才码 */
+                                    $_prefix_type = "";
+                                    $subindex = 5;
+                                    switch ($type) {
+                                        case 2:
+                                            $_prefix_type = "IC";
+                                            $subindex += strlen($_prefix_type);
+                                            break;
+                                    }
+                                    $year = date("Y");
+                                    $no_prefix = $_prefix_type . $year . $level;
+                                    $where = [];
+                                    $where[] = ["certificateNo", "like", $no_prefix . "%"];
+                                    $max_no = Db::table("new_talent_info")->where($where)->max("certificateNo", false);
+                                    if (!$max_no) {
+                                        $max_no = $no_prefix . "0001";
+                                    } else {
+                                        $new_no = intval(substr($max_no, $subindex)) + 1;
+                                        $max_no = $no_prefix . str_pad($new_no, 4, "0", STR_PAD_LEFT);
+                                    }
                                 }
 
                                 /* 写入人才申报表 */
@@ -148,10 +162,8 @@ class Integral {
                                 $newTalentInfo["talent_arrange"] = $level;
                                 $newTalentInfo["createTime"] = date("Y-m-d H:i:s");
                                 $newTalentId = Db::table("new_talent_info")->insertGetId($newTalentInfo);
-
-                                var_dump($newTalentId);return false;
                                 /* 积分申报的最后一条日志中提取有用内容填充下面的人才日志部分字段 */
-                                $ir_last_log = TalentLogApi::getLastLog($mainId, ProjectState::INTEGRAL, ["active", "=", 1]);
+                                $ir_last_log = TalentLogApi::getLastLog($mainId, ProjectState::INTEGRAL, 0, ["active", "=", 1]);
 
                                 /* 写入人才申报日志表 */
                                 $talent_log["last_state"] = 0;
@@ -161,7 +173,7 @@ class Integral {
                                 $talent_log["mainId"] = $newTalentId;
                                 $talent_log["companyId"] = $ir_last_log["companyId"];
                                 $talent_log["active"] = 1;
-                                $talent_log["description"] = sprintf("人才积分达到人才层次(%s)晋升标准,人才码为:%s", $levelAndNames[$level], $max_no);
+                                $talent_log["description"] = sprintf("人才积分(%d分)达到人才层次(%s)晋升标准(%d分),人才码为:%s", $nowPoints, CommonConst::getLayerNameByLayer($level), CommonConst::getLayerPointsByLayer($level), $max_no);
                                 $talent_log["createUser"] = $ir_last_log["createUser"];
                                 $talent_log["createTime"] = date("Y-m-d H:i:s");
                                 Db::table("new_talent_checklog")->insert($talent_log);
@@ -172,6 +184,7 @@ class Integral {
                         $log["type"] = $type;
                         $log["mainType"] = "integral";
                         $log["mainId"] = $mainId;
+                        $log["enterprise_id"] = $integralInfo["enterprise_id"];
                         $log["name"] = $name;
                         $log["card_type"] = $cardType;
                         $log["card_number"] = $cardNumber;
@@ -187,6 +200,7 @@ class Integral {
                         return true;
                     }
                 } catch (\Exception $e) {
+                    Log::write($e->getMessage(), "error");
                     Db::rollback();
                     return false;
                 }

+ 62 - 74
app/job/Talent.php

@@ -12,6 +12,7 @@ use app\common\api\TalentConditionApi;
 use app\common\api\TalentState;
 use app\enterprise\model\Talent as TalentModel;
 use app\common\state\ProjectState;
+use app\common\state\CommonConst;
 
 /**
  * Description of Talent
@@ -167,83 +168,70 @@ class Talent {
                 break;
             case 4:
                 //发放人才码后增加积分记录
-                $mainId = $data["id"];
-                $where = [];
-                $where[] = ["ti.id", "=", $mainId];
-                $where[] = ["ti.checkState", "=", TalentState::CERTIFICATED];
-                $talentInfo = TalentModel::alias("ti")->leftJoin("un_enterprise e", "e.id=ti.enterprise_id")->field("ti.*,e.type as enterpriseType")->where($where)->find();
-                $where = [];
-                $where[] = ["mainId", "=", $mainId];
-                $where[] = ["mainType", "=", "talent"];
-                $integralLog = Db::table("new_integral_log")->where($where)->find();
-                if ($talentInfo && !$integralLog) {
-                    $level = $talentInfo["talent_arrange"];
-                    $name = $talentInfo["name"]; //姓名
-                    $cardType = $talentInfo["card_type"]; //身份证类型
-                    $cardNumber = $talentInfo["card_number"]; //身份证
-                    $type = $talentInfo["enterpriseType"]; //企业类型
-                    $lastPoints = 0; //上次积分                    
-                    $levelAndPoints = [
-                        1 => 6000,
-                        2 => 4000,
-                        3 => 2000,
-                        4 => 1000,
-                        5 => 500,
-                        6 => 200,
-                        7 => 100
-                    ];
-                    $levelAndNames = [
-                        1 => "第一层次",
-                        2 => "第二层次",
-                        3 => "第三层次",
-                        4 => "第四层次",
-                        5 => "第五层次",
-                        6 => "第六层次",
-                        7 => "第七层次",
-                    ];
-                    $gainPoints = $levelAndPoints[$level]; //增加积分
-                    $desc = sprintf("首次通过人才申报,增加基础积分%d。", $levelAndPoints[$level]); //详情
-
-                    /* 查询是否升级 */
+                try {
+                    $mainId = $data["id"];
                     $where = [];
-                    $where[] = ["id", "<>", $mainId];
-                    $where[] = ["name", "=", $name];
-                    $where[] = ["card_type", "=", $cardType];
-                    $where[] = ["card_number", "=", $cardNumber];
-                    $where[] = ["checkState", "=", TalentState::CERTIFICATED];
-                    $talentBeforeInfo = TalentModel::where($where)->order("createTime desc")->find();
-                    if ($talentBeforeInfo && $level < $talentBeforeInfo["talent_arrange"]) {
-                        $beforeLevelName = $levelAndNames[$talentBeforeInfo["talent_arrange"]]; //之前层次
-                        $beforeLevelPoints = $levelAndPoints[$talentBeforeInfo["talent_arrange"]]; //之前基础分
-                        $nowLevelName = $levelAndNames[$level]; //现在层次
-                        $nowLevelPoints = $levelAndPoints[$level]; //现在基础分
-                        $gainPoints -= $beforeLevelPoints;
-                        $desc = sprintf("人才层次晋升(%s->%s),基础积分增加%d(%d->%d)。", $beforeLevelName, $nowLevelName, $gainPoints, $beforeLevelPoints, $nowLevelPoints);
-                    }
-
-                    /* 查询最后一条积分日志 */
+                    $where[] = ["ti.id", "=", $mainId];
+                    $where[] = ["ti.checkState", "=", TalentState::CERTIFICATED];
+                    $talentInfo = TalentModel::alias("ti")->leftJoin("un_enterprise e", "e.id=ti.enterprise_id")->field("ti.*,e.type as enterpriseType")->where($where)->find();
                     $where = [];
-                    $where[] = ["name", "=", $name];
-                    $where[] = ["card_type", "=", $cardType];
-                    $where[] = ["card_number", "=", $cardNumber];
-                    $last_log = Db::table("new_integral_log")->where($where)->order("createTime desc")->find();
-                    $lastPoints = $last_log["nowPoints"] ?: 0;
+                    $where[] = ["mainId", "=", $mainId];
+                    $where[] = ["mainType", "=", "talent"];
+                    $integralLog = Db::table("new_integral_log")->where($where)->find();
+                    if ($talentInfo && !$integralLog) {
+                        $level = $talentInfo["talent_arrange"];
+                        $name = $talentInfo["name"]; //姓名
+                        $cardType = $talentInfo["card_type"]; //身份证类型
+                        $cardNumber = $talentInfo["card_number"]; //身份证
+                        $type = $talentInfo["enterpriseType"]; //企业类型
+                        $lastPoints = 0; //上次积分
+                        $gainPoints = CommonConst::getLayerPointsByLayer($level); //增加积分
+                        $desc = sprintf("经人才申报审核通过,认定为集成电路(%s)优秀人才,基础分变更为%d分。", CommonConst::getLayerNameByLayer($level), $gainPoints); //详情
 
-                    $log["id"] = getStringId();
-                    $log["type"] = $type;
-                    $log["mainType"] = "talent";
-                    $log["mainId"] = $mainId;
-                    $log["name"] = $name;
-                    $log["card_type"] = $cardType;
-                    $log["card_number"] = $cardNumber;
-                    $log["talentLevel"] = $level;
-                    $log["lastPoints"] = $lastPoints;
-                    $log["gainPoints"] = $gainPoints;
-                    $log["nowPoints"] = $lastPoints + $gainPoints;
-                    $log["description"] = $desc;
-                    $log["createTime"] = date("Y-m-d H:i:s");
-                    Db::table("new_integral_log")->insert($log);
-                    return true;
+                        /* 查询是否升级 */
+                        $where = [];
+                        $where[] = ["id", "<>", $mainId];
+                        //$where[] = ["name", "=", $name];
+                        $where[] = ["card_type", "=", $cardType];
+                        $where[] = ["card_number", "=", $cardNumber];
+                        $where[] = ["checkState", "=", TalentState::CERTIFICATED];
+                        $talentBeforeInfo = TalentModel::where($where)->order("createTime desc")->find();
+                        if ($talentBeforeInfo && $level < $talentBeforeInfo["talent_arrange"]) {
+                            $beforeLevelName = CommonConst::getLayerNameByLayer($talentBeforeInfo["talent_arrange"]); //之前层次
+                            $beforeLevelPoints = CommonConst::getLayerPointsByLayer($talentBeforeInfo["talent_arrange"]); //之前基础分
+                            $nowLevelName = CommonConst::getLayerNameByLayer($level); //现在层次
+                            $nowLevelPoints = CommonConst::getLayerPointsByLayer($level); //现在基础分
+                            $gainPoints -= $beforeLevelPoints;
+                            $desc = sprintf("人才层次晋升(%s->%s),基础分增加%d(%d->%d)分。", $beforeLevelName, $nowLevelName, $gainPoints, $beforeLevelPoints, $nowLevelPoints);
+                        }
+
+                        /* 查询最后一条积分日志 */
+                        $where = [];
+                        //$where[] = ["name", "=", $name];
+                        $where[] = ["card_type", "=", $cardType];
+                        $where[] = ["card_number", "=", $cardNumber];
+                        $last_log = Db::table("new_integral_log")->where($where)->order("createTime desc")->find();
+                        $lastPoints = $last_log["nowPoints"] ?: 0;
+
+                        $log["id"] = getStringId();
+                        $log["type"] = $type;
+                        $log["mainType"] = "talent";
+                        $log["mainId"] = $mainId;
+                        $log["enterprise_id"] = $talentInfo["enterprise_id"];
+                        $log["name"] = $name;
+                        $log["card_type"] = $cardType;
+                        $log["card_number"] = $cardNumber;
+                        $log["talentLevel"] = $level;
+                        $log["lastPoints"] = $lastPoints;
+                        $log["gainPoints"] = $gainPoints;
+                        $log["nowPoints"] = $lastPoints + $gainPoints;
+                        $log["description"] = $desc;
+                        $log["createTime"] = date("Y-m-d H:i:s");
+                        Db::table("new_integral_log")->insert($log);
+                        return true;
+                    }
+                } catch (\Exception $e) {
+                    Log::write($e->getMessage(), "error");
                 }
                 break;
         }

+ 19 - 0
public/static/modular/gate/integral/integralInfo.js

@@ -378,6 +378,25 @@ IntegralInfoDlg.calIntegral = function (obj) {
 }
 
 IntegralInfoDlg.multipleRefreshPoints = function () {
+    if ($("#card_type").val() > 0 && $("#card_number").val() != "") {
+        var ajax = new $ax(Feng.ctxPath + "/common/api/getIntegralRecordByIdCard", function (data) {
+            if (data.deny) {
+                //不是本企业人员
+                $("#tips").html("该身份证已经在别的企业申报过积分项目")
+            } else if (data.isTalentInLibrary == 1 || data.totalPoints > 0) {
+                //在库人才
+                let levelTypeName = data.level >= 1 && data.level <= 7 ? "在库人才(" + data.levelName + ")" : data.levelName;
+                $("#tips").html("该人员为" + levelTypeName + ",截至目前,已累计" + data.totalPoints + "积分")
+            } else {
+                $("#tips").html("");
+            }
+        }, function (data) {
+            Feng.error("预估积分失败!" + data.responseJSON.message + "!");
+        });
+        ajax.set("cardType", $("#card_type").val());
+        ajax.set("cardNumber", $("#card_number").val());
+        ajax.start();
+    }
     var count = $("#itemList").find("table").length;
     for (var i = 0; i < count; i++) {
         var table = $("#itemList").find("table").eq(i);

+ 32 - 5
public/static/modular/talentIdentify/integralMgr/IntegralLog.js

@@ -24,6 +24,15 @@ IntegralVerify.initColumn = function () {
     var type = $("#type").val();
     return [
         {field: 'selectItem', radio: true},
+        {title: '积分来源', field: 'mainType', visible: true, align: 'center', valign: 'middle', width: '80px',
+            formatter: function (value, row, index) {
+                if (value == "integral") {
+                    return "积分申报";
+                } else {
+                    return "人才申报";
+                }
+            }
+        },
         {title: '申报年度', field: 'apply_year', visible: true, align: 'center', valign: 'middle', width: '80px'},
         {title: '姓名', field: 'name', visible: true, align: 'center', valign: 'middle', width: "100px",
             formatter: function (value, row, index) {
@@ -49,13 +58,23 @@ IntegralVerify.initColumn = function () {
             }
         },
         {title: '申报标准', field: 'details', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "120px"},
-        {title: '首次提交时间', field: 'first_submit_time', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "100px"},
-        {title: '最新提交时间', field: 'new_submit_time', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "100px"},
-        {title: '增加积分', field: 'totalPoints', visible: true, align: 'center', valign: 'middle', width: "100px",
+        {title: '上次积分', field: 'lastPoints', visible: true, align: 'center', valign: 'middle', width: "100px",
             formatter: function (value, row, index) {
                 return value;
             }
         },
+        {title: '增加积分', field: 'gainPoints', visible: true, align: 'center', valign: 'middle', width: "100px",
+            formatter: function (value, row, index) {
+                return value;
+            }
+        },
+        {title: '当前积分', field: 'nowPoints', visible: true, align: 'center', valign: 'middle', width: "100px",
+            formatter: function (value, row, index) {
+                return value;
+            }
+        },
+        {title: '首次提交时间', field: 'first_submit_time', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "100px"},
+        {title: '最新提交时间', field: 'new_submit_time', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "100px"},
         {title: '操作', field: 'id', visible: true, align: 'center', valign: 'middle', width: "80px",
             formatter: function (value, row, index) {
                 return "<span class='label label-success' onclick=\"IntegralVerify.showLog('" + value + "')\" >" +
@@ -133,20 +152,28 @@ IntegralVerify.export = function (process) {
  */
 IntegralVerify.download = function () {
     if (this.check()) {
-        window.location.href = encodeURI(encodeURI(Feng.ctxPath + "/common/api/downloadZip?type=20&id=" + IntegralVerify.seItem.id));
+        if (IntegralVerify.seItem.mainType == "talent") {
+            layer.alert("不能下载非积分申报的附件");
+            return;
+        }
+        window.location.href = encodeURI(encodeURI(Feng.ctxPath + "/common/api/downloadZip?type=20&id=" + IntegralVerify.seItem.mainId));
     }
 }
 
 
 IntegralVerify.openCheckIntegralVerify = function () {
     if (this.check()) {
+        if (IntegralVerify.seItem.mainType == "talent") {
+            layer.alert("不能查看非积分申报的内容");
+            return;
+        }
         var index = layer.open({
             type: 2,
             title: '积分申报记录',
             area: ['800px', '420px'], //宽高
             fix: false, //不固定
             maxmin: true,
-            content: '/admin/integralVerify/detail/id/' + IntegralVerify.seItem.id + '/1',
+            content: '/admin/integralVerify/detail/id/' + IntegralVerify.seItem.mainId + '/1',
             btn: ['<i class="fa fa-eraser"></i>&nbsp;&nbsp;关闭'],
             btnAlign: 'c'
         });

+ 23 - 0
public/static/modular/talentIdentify/integralMgr/IntegralVerify_library.js

@@ -46,6 +46,29 @@ IntegralInfo.initColumn = function () {
             }
         },
         {title: '证件号码', field: 'card_number', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "120px"},
+        {title: '人才层次', field: 'talentLevel', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "120px",
+            formatter: function (value, row, index) {
+                var talentLevel = parseInt(value);
+                switch (talentLevel) {
+                    case 1:
+                        return "第一层次";
+                    case 2:
+                        return "第二层次";
+                    case 3:
+                        return "第三层次";
+                    case 4:
+                        return "第四层次";
+                    case 5:
+                        return "第五层次";
+                    case 6:
+                        return "第六层次";
+                    case 7:
+                        return "第七层次";
+                    default:
+                        return "非优秀人才";
+                }
+            }},
+        {title: '基础分', field: 'basePoints', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "120px"},
         {title: '总积分', field: 'totalPoints', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "120px"},
         {title: '操作', field: 'id', visible: true, align: 'center', valign: 'middle', width: '80px',
             formatter: function (value, row, index) {