Browse Source

购房补贴增加功能:批量导入部门核查结果

sugangqiang 5 months ago
parent
commit
02e8d2b65c

+ 65 - 4
app/admin/controller/House.php

@@ -174,17 +174,23 @@ class House extends AdminController {
         if (!$checkState) {
         if (!$checkState) {
             return new Response(Response::ERROR, "请选择审核状态");
             return new Response(Response::ERROR, "请选择审核状态");
         }
         }
+        $old = HouseApi::getInfoById($id);
+        if (!$old || $old["type"] != $this->user["type"]) {
+            return new Response(Response::ERROR, "没有对应的申报记录");
+        }
         if ($process == 1) {
         if ($process == 1) {
-            $old = HouseApi::getInfoById($id);
             $old["fields"] = $fields;
             $old["fields"] = $fields;
             $old["files"] = $files;
             $old["files"] = $files;
             houseModel::update($old);
             houseModel::update($old);
         }
         }
         if ($process == 3) {
         if ($process == 3) {
+            $depCodes = getJsonConfig("../sys_config.json", "housepurchase_dep_list")[$old["type"]];
+            if ((!$depCodes || count($depCodes) == 0) && !$old["importDepPassTime"]) {
+                return new Response(Response::ERROR, "没有配置部门审核时,该申报记录需要通过【各单位核查结果批量导入】核果后才可以进行复审");
+            }
             $data["id"] = $id;
             $data["id"] = $id;
             if ($checkState == 2) {
             if ($checkState == 2) {
                 if ($toProcess == 2) {
                 if ($toProcess == 2) {
-                    $depCodes = getJsonConfig("../sys_config.json", "housepurchase_dep_list")[$old["type"]];
                     if (!$depCodes || count($depCodes) == 0) {
                     if (!$depCodes || count($depCodes) == 0) {
                         return new Response(Response::ERROR, "没有配置部门审核,不能选择驳回至部门审核");
                         return new Response(Response::ERROR, "没有配置部门审核,不能选择驳回至部门审核");
                     }
                     }
@@ -812,6 +818,62 @@ class House extends AdminController {
         return new Response(Response::SUCCESS, "撤销成功");
         return new Response(Response::SUCCESS, "撤销成功");
     }
     }
 
 
+    public function importDeptCheckRecords() {
+        $depCodes = getJsonConfig("../sys_config.json", "housepurchase_dep_list")[$this->user["type"]];
+        if ($depCodes && count($depCodes) > 0) {
+            return \StrUtil::back(new Response(Response::ERROR, "系统中存在部门审核配置信息,不能使用报表导入核查结果"), "Housepurchase.callBack");
+        }
+        $maxFileSize = 10; //mb
+        $tmp = $this->request->file("file");
+
+        if (!$tmp) {
+            return \StrUtil::back(new Response(Response::ERROR, "没有上传单位核查文档"), "Housepurchase.callBack");
+        }
+        if (round($tmp->getSize() / 1024 / 1024, 2) > $maxFileSize) {
+            return \StrUtil::back(new Response(Response::ERROR, "文档大小不能超过10MB"), "Housepurchase.callBack");
+        }
+        $filepath = $tmp->getPathname();
+        try {
+            $rows = getExcelDatas($filepath);
+        } catch (\PhpOffice\PhpSpreadsheet\Exception $e) {
+            return \StrUtil::back(new Response(Response::ERROR, "文件识别错误!"), "Housepurchase.callBack");
+        }
+        array_shift($rows); //去标题行
+        $idCards = [];
+        $waitCheckRows = [];
+        foreach ($rows as $key => $row) {
+            $no = $key + 2;
+            $idCard = trim($row[1]);
+            $checkStateStr = trim($row[2]);
+            $checkMsg = trim($row[3]);
+            $checkState = $checkStateStr == "审核通过" ? 1 : 2; //1通过,2不通过=驳回状态
+            if (!$idCard) {
+                return \StrUtil::back(new Response(Response::ERROR, sprintf("第%d行证件号码不能放空,请仔细检查内容完整后再重新提交", $no)), "Housepurchase.callBack");
+            }
+            if (in_array($idCard, $idCards)) {
+                return \StrUtil::back(new Response(Response::ERROR, sprintf("第%d行证件号码存在重复,请请仔细检查内容无误后再重新提交", $no)), "Housepurchase.callBack");
+            } else {
+                $old = HouseApi::getNewestInfoByIdCard($idCard);
+                if (!$old) {
+                    return \StrUtil::back(new Response(Response::ERROR, sprintf("第%d行证件号码没有有效的申报记录,请请仔细检查内容无误后再重新提交", $no)), "Housepurchase.callBack");
+                }
+                if ($old["type"] != $this->user["type"]) {
+                    return \StrUtil::back(new Response(Response::ERROR, sprintf("第%d行证件号码对应的申报记录不在您的职责范围,请请仔细检查内容无误后再重新提交", $no)), "Housepurchase.callBack");
+                }
+                if ($old["checkState"] != HouseStateEnum::NEED_REVIEW_CHECK) {
+                    return \StrUtil::back(new Response(Response::ERROR, sprintf("第%d行证件号码对应的申报记录不在审核范围,请请仔细检查内容无误后再重新提交", $no)), "Housepurchase.callBack");
+                }
+                $idCards[] = $idCard;
+            }
+            $waitCheckRows[] = ["type" => 1, "idCard" => $idCard, "checkState" => $checkState, "checkMsg" => $checkMsg, "createUser" => sprintf("%s(%s)", $this->user["account"], $this->user["companyName"])];
+        }
+
+        for ($i = 0; $i < count($waitCheckRows); $i++) {
+            queue("app\job\House", $waitCheckRows[$i]);
+        }
+        return \StrUtil::back(new Response(Response::SUCCESS, "已经成功添加到计划任务,请稍候查看申报列表进行确认"), "Housepurchase.callBack");
+    }
+
     /**
     /**
      * @param type
      * @param type
      * @description 查询需要审核的数据(待核查征信 /待公示 / 待公示通过 / 待兑现)
      * @description 查询需要审核的数据(待核查征信 /待公示 / 待公示通过 / 待兑现)
@@ -2284,7 +2346,7 @@ class House extends AdminController {
             }
             }
         }
         }
         $housepurchase["decideDetail"] = $old["decideDetail"] . ($descideDesc ? implode("", $descideDesc) : "");
         $housepurchase["decideDetail"] = $old["decideDetail"] . ($descideDesc ? implode("", $descideDesc) : "");
-        return new Response(Response:: SUCCESS, "", $housepurchase);
+        return new Response(Response::SUCCESS, "", $housepurchase);
     }
     }
 
 
     private function setHousepurchase($request) {
     private function setHousepurchase($request) {
@@ -2326,5 +2388,4 @@ class House extends AdminController {
             "marryStatus" => $marryStatus, "checkState" => $checkState, "publicState" => null, "cashType" => null, "isRecover" => $isRecover, "isConflict" => $isConflict];
             "marryStatus" => $marryStatus, "checkState" => $checkState, "publicState" => null, "cashType" => null, "isRecover" => $isRecover, "isConflict" => $isConflict];
         return $obj;
         return $obj;
     }
     }
-
 }
 }

+ 8 - 3
app/admin/view/house/index.html

@@ -248,6 +248,11 @@
                                 <i class="fa fa-reply"></i>&nbsp;撤销审核
                                 <i class="fa fa-reply"></i>&nbsp;撤销审核
                             </button>
                             </button>
                             {/if}
                             {/if}
+                            {if condition="chkCommission('/admin/house/importDeptCheckRecords','/housepurchase/importDeptCheckRecords')"}
+                            <button type="button" class="btn btn-sm btn-primary " onclick="Housepurchase.import()" id="">
+                                <i class="fa fa-file-excel-o"></i>&nbsp;批量导入单位核查结果
+                            </button>
+                            {/if}
                             {if condition="chkCommission('/admin/house/reviewExport','/housepurchase/reviewExport')"}
                             {if condition="chkCommission('/admin/house/reviewExport','/housepurchase/reviewExport')"}
                             <button type="button" class="btn btn-sm btn-primary " onclick="Housepurchase.showExportModal()" id="">
                             <button type="button" class="btn btn-sm btn-primary " onclick="Housepurchase.showExportModal()" id="">
                                 <i class="fa fa-file-excel-o"></i>&nbsp;导出
                                 <i class="fa fa-file-excel-o"></i>&nbsp;导出
@@ -482,7 +487,7 @@
                 <h4 class="modal-title" id="importModalLabel">各单位核查结果批量导入</h4>
                 <h4 class="modal-title" id="importModalLabel">各单位核查结果批量导入</h4>
             </div>
             </div>
             <div class="modal-body">
             <div class="modal-body">
-                <form id="import-form" action="/admin/house/importProject" method="post" enctype="multipart/form-data" target="hiddenIframe">
+                <form id="import-form" action="/admin/house/importDeptCheckRecords" method="post" enctype="multipart/form-data" target="hiddenIframe">
                     <input type="file" id="file" name="file" onchange="$('#fileName').val($('#file').val());" class="hidden">
                     <input type="file" id="file" name="file" onchange="$('#fileName').val($('#file').val());" class="hidden">
                     <input type="hidden" name="type" >
                     <input type="hidden" name="type" >
                     <div class="form-group row">
                     <div class="form-group row">
@@ -497,8 +502,8 @@
                     </div>
                     </div>
                     <div class="form-group row">
                     <div class="form-group row">
                         <div class="col-sm-12" style="color: red;font-size: 15px;">
                         <div class="col-sm-12" style="color: red;font-size: 15px;">
-                            导入数据的格式要求::<br>
-                            &emsp;1.导入前请务必仔细核对并根据以上要求填写数据。
+                            下载模板:<a href="/housepurchase_depcheck_template.xlsx">住房补贴单位核查结果模板文件</a><br>
+                            &emsp;导入前请务必仔细核对并根据模板要求填入数据。
                         </div>
                         </div>
                     </div>
                     </div>
                 </form>
                 </form>

+ 8 - 1
app/common/api/HouseApi.php

@@ -27,6 +27,14 @@ class HouseApi {
         return houseModel::findOrEmpty($id)->toArray();
         return houseModel::findOrEmpty($id)->toArray();
     }
     }
 
 
+    public static function getNewestInfoByIdCard($idCard) {
+        $where = [];
+        $where[] = ["checkState", "not in", [HouseStateEnum::NOTPASS, HouseStateEnum::REVIEW_PASS]];
+        $where[] = ["publicState", "=", 1];
+        $where[] = ["idCard", "=", $idCard];
+        return houseModel::where($where)->order("newSubmitTime desc")->find();
+    }
+
     public static function getFstInfoById($idCard) {
     public static function getFstInfoById($idCard) {
         $where = [];
         $where = [];
         $where[] = ["declareType", "=", 1];
         $where[] = ["declareType", "=", 1];
@@ -193,5 +201,4 @@ class HouseApi {
     public static function deleteChildrenById($id) {
     public static function deleteChildrenById($id) {
         return houseChildModel::where("id", $id)->delete();
         return houseChildModel::where("id", $id)->delete();
     }
     }
-
 }
 }

+ 88 - 0
app/job/House.php

@@ -0,0 +1,88 @@
+<?php
+
+namespace app\job;
+
+use think\queue\Job;
+use think\facade\Log;
+use app\common\api\HouseApi;
+use app\common\state\HouseStateEnum;
+use app\common\model\HousePurchase;
+use app\common\model\TalentChecklog;
+use app\common\state\ProjectState;
+
+/**
+ * Description of House
+ *
+ * @author sgq
+ */
+class House {
+
+    public function fire(Job $job, $data) {
+        if ($this->deal($data)) {
+            $job->delete();
+            return true;
+        }
+        if ($job->attempts() >= 3) {
+            $job->delete();
+            return false;
+        }
+        $job->release(10); //10秒后重试
+    }
+
+    /**
+     * 处理业务逻辑
+     * @param type $data
+     * @return bool
+     */
+    public function deal($data): bool {
+        switch ($data["type"]) {
+            case 1:
+                //批量购房线下提交的部门审核结果
+                try {
+                    $idCard = $data["idCard"];
+                    $checkState = $data["checkState"];
+                    $checkMsg = $data["checkMsg"];
+                    $old = HouseApi::getNewestInfoByIdCard($idCard);
+
+                    if (!$old) {
+                        return false;
+                    }
+                    if ($old["checkState"] != HouseStateEnum::NEED_REVIEW_CHECK) {
+                        return false;
+                    }
+                    $upd["id"] = $old["id"];
+                    if ($checkState == 1) {
+                        //审核通过
+                        $upd["importDepPassTime"] = date("Y-m-d H:i:s");
+                        $state = 3;
+                    } else {
+                        //审核不通过
+                        $upd["checkState"] = HouseStateEnum::DEP_REJECT;
+                        $upd["importDepPassTime"] = null;
+                        $state = 2;
+                    }
+
+                    HousePurchase::update($upd);
+                    //添加日志
+                    TalentChecklog::create([
+                        'id' => getStringId(),
+                        'mainId' => $old["id"],
+                        'type' => intval(ProjectState::HOUSE),
+                        'typeFileId' => null,
+                        'active' => 1,
+                        'state' => $state,
+                        'step' => 2,
+                        'stateChange' => "",
+                        'description' => $checkMsg,
+                        'createTime' => date("Y-m-d H:i:s", time()),
+                        'createUser' => $data["createUser"]
+                    ]);
+                    return true;
+                } catch (\Exception $e) {
+                    Log::write($e->getMessage(), "error");
+                }
+                break;
+        }
+        return false;
+    }
+}

BIN
public/housepurchase_depcheck_template.xlsx