common.php 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889
  1. <?php
  2. defined('ONLY_ONLY_ONLY') or exit('Access Denied');
  3. /*****************通用基本逻辑相关******************/
  4. /************************************************************************/
  5. /**********************文件锁区*************************************/
  6. /***********************************************************************/
  7. //样例 项目专属的商品文件锁,防止超卖,库存溢出
  8. function biz_flkForGoods($lockId, $handleArgs, $bizHandle)
  9. {
  10. $lockCatalog = "GOODS"; //目的就是控制lockCatalog名称的规范化统一化
  11. return filelock_handle($lockCatalog, $lockId, $handleArgs, $bizHandle);
  12. }
  13. function biz_flkForOrder($lockId, $handleArgs, $bizHandle)
  14. {
  15. $lockCatalog = "ORDER"; //目的就是控制lockCatalog名称的规范化统一化
  16. return filelock_handle($lockCatalog, $lockId, $handleArgs, $bizHandle);
  17. }
  18. function biz_flkForTrader($lockId, $handleArgs, $bizHandle)
  19. {
  20. $lockCatalog = "Trader";
  21. return filelock_handle($lockCatalog, $lockId, $handleArgs, $bizHandle);
  22. }
  23. function biz_flkForRecruit($lockId, $handleArgs, $bizHandle)
  24. {
  25. $lockCatalog = "Recruit";
  26. return filelock_handle($lockCatalog, $lockId, $handleArgs, $bizHandle);
  27. }
  28. function biz_flkForWorker($lockId, $handleArgs, $bizHandle)
  29. {
  30. $lockCatalog = "Worker"; //目的就是控制lockCatalog名称的规范化统一化
  31. return filelock_handle($lockCatalog, $lockId, $handleArgs, $bizHandle);
  32. }
  33. function biz_flkForMActivity($lockId, $handleArgs, $bizHandle)
  34. {
  35. $lockCatalog = "MActivity"; //目的就是控制lockCatalog名称的规范化统一化
  36. return filelock_handle($lockCatalog, $lockId, $handleArgs, $bizHandle);
  37. }
  38. function biz_flkForWork($lockId, $handleArgs, $bizHandle)
  39. {
  40. $lockCatalog = "Work";
  41. return filelock_handle($lockCatalog, $lockId, $handleArgs, $bizHandle);
  42. }
  43. function bizwx_fetchWxParams($subSystem)
  44. {
  45. switch (intval($subSystem)) {
  46. case 1:
  47. $mina_appid = WeiXin111_AppID;
  48. $mina_appSecret = WeiXin111_AppSecret;
  49. break;
  50. case 2:
  51. $mina_appid = WeiXin222_AppID;
  52. $mina_appSecret = WeiXin222_AppSecret;
  53. break;
  54. case 3:
  55. $mina_appid = WeiXin333_AppID;
  56. $mina_appSecret = WeiXin333_AppSecret;
  57. break;
  58. default:throw new GeneralException("", "不支持的子系统");
  59. }
  60. return array(
  61. "mina_appid" => $mina_appid,
  62. "mina_appSecret" => $mina_appSecret,
  63. );
  64. }
  65. function bizwx_fetchMinaOpenidCore($subSystem)
  66. {
  67. $GPC = input_param_handle(false);
  68. $ajaxdata = input_getPostObj();
  69. $minaCode = isset($ajaxdata["minaCode"]) ? $ajaxdata["minaCode"] : $GPC["minaCode"];
  70. if (empty($minaCode)) {
  71. throw new GeneralException("没有传递必要的minaCode参数", "没有传递必要的minaCode参数");
  72. }
  73. $wxParams = bizwx_fetchWxParams($subSystem);
  74. $mina_appid = $wxParams["mina_appid"];
  75. $mina_appSecret = $wxParams["mina_appSecret"];
  76. $url = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $mina_appid . "&secret=" . $mina_appSecret . "&js_code=" . $minaCode . "&grant_type=authorization_code";
  77. $res = http_get($url);
  78. eeglobal_log_handler('wxm_login', 'debug', "url=>$url getresult=>$res");
  79. $resObj = @json_decode($res, true);
  80. if (empty($resObj) || empty($resObj['openid'])) {
  81. throw new GeneralException("", "结果数据不正常=>" . $res);
  82. }
  83. $resObj["wxmina_appid"] = $mina_appid;
  84. return $resObj;
  85. }
  86. function bizwx_fetchMinaOpenid($subSystem)
  87. {
  88. $resObj = bizwx_fetchMinaOpenidCore($subSystem);
  89. $wxmina_appid = $resObj["wxmina_appid"];
  90. /***UPSERT小程序用户记录**start***/
  91. $sqlTemp = "";
  92. $sqlParam = array();
  93. $sqlParam[":nowtime"] = time();
  94. $sqlParam[":subsystem"] = intval($subSystem);
  95. $sqlParam[":wxmina_appid"] = $wxmina_appid;
  96. $sqlParam[":wxmina_openid"] = trim($resObj['openid']);
  97. $sqlParam[":weixin_unionid111"] = empty(trim($resObj['unionid'])) ? '------' : trim($resObj['unionid']);
  98. $sqlParam[":weixin_unionid222"] = empty(trim($resObj['unionid'])) ? '' : trim($resObj['unionid']);
  99. $sqlParam[":weixin_sessionkey"] = trim($resObj['session_key']);
  100. $sqlParam[":salt"] = random(8);
  101. $sqlCommon = " and subsystem=:subsystem and (( `wxmina_appid`=:wxmina_appid and `wxmina_openid`=:wxmina_openid) or ifnull(weixin_unionid,'')=:weixin_unionid111) ";
  102. $sqlTemp .= " set @handle_id=0; ";
  103. $sqlTemp .= " select @handle_id:=id from base_user where 1=1 {$sqlCommon} limit 1;";
  104. $sqlTemp .= " insert into base_user ( `createtime`,`subsystem`,`wxmina_appid`,`wxmina_openid`, `weixin_unionid`,`weixin_sessionkey`, `salt` )";
  105. $sqlTemp .= " select :nowtime ,:subsystem ,:wxmina_appid ,:wxmina_openid ,:weixin_unionid222, :weixin_sessionkey, :salt from dual where ifnull(@handle_id,0)=0;";
  106. $sqlTemp .= " update base_user SET `updatetime`=:nowtime, `wxmina_appid`=:wxmina_appid, `wxmina_openid`=:wxmina_openid, `weixin_unionid`=:weixin_unionid222, `weixin_sessionkey`=:weixin_sessionkey, `salt`=:salt ";
  107. $sqlTemp .= " where ifnull(@handle_id,0)<>0 {$sqlCommon};";
  108. $sqlTemp .= " select * from base_user where 1=1 {$sqlCommon};";
  109. $dataset = pdo_query3($sqlTemp, $sqlParam);
  110. /***UPSERT小程序用户记录**finish***/
  111. $baseUser = $dataset[4][0];
  112. if (empty($baseUser)) {
  113. throw new GeneralException("", "异常");
  114. }
  115. $baseUser["FOREND_TOKEN"] = base_buildForendToken($baseUser);
  116. return $baseUser;
  117. }
  118. function bizbase_paySuccess($payBizCatalog, $payBizId, $needQuery = false, $handleMode = "")
  119. {
  120. //$actionMode 调用模式,用以判定是否为带锁进入模式,以避免内部死锁
  121. eeglobal_log_handler("bizbase_paySuccess", "debug", "支付成功后处理 payBizCatalog-payBizId=>{$payBizCatalog}-{$payBizId} ");
  122. switch (trim($payBizCatalog)) {
  123. case "0": //商家侧:次数购买业务
  124. $bizInfo = pdo_fetch("select * from biz_trader_numaccount where id=" . intval($payBizId));
  125. if (empty($bizInfo)) {
  126. throw new GeneralException("", "对应的业务支付记录不存在!");
  127. }
  128. if (intval($bizInfo["deleted"]) != 0) {
  129. throw new GeneralException("", "对应的业务支付记录已删除!");
  130. }
  131. if (intval($bizInfo["type"]) != 0) {
  132. throw new GeneralException("", "对应的业务支付记录不是支付记录!");
  133. }
  134. if (intval($bizInfo["biz_catalog"]) != 0) {
  135. throw new GeneralException("", "对应的业务支付记录不是次数支付记录!");
  136. }
  137. if (intval($bizInfo["status"]) == 1) {
  138. return true;
  139. }
  140. //已支付
  141. if ($needQuery == true) {
  142. require_once WEB_PHY_ROOT . "/base/wxsrv.php";
  143. $wxmina_appid = $bizInfo["wxmina_appid"];
  144. $wxmina_openid = $bizInfo["wxmina_openid"];
  145. $out_trade_no = $bizInfo["biz_idtag"];
  146. $backdata = weixin_orderqueryV3($wxmina_appid, $out_trade_no, null);
  147. if ($backdata["trade_state"] == "SUCCESS") {
  148. } else {
  149. throw new GeneralException("NoPaySuccess", $backdata["trade_state"] . "-" . $backdata["trade_state_desc"]);
  150. }
  151. }
  152. $sqlParam = array();
  153. $sqlParam[":nowtime"] = time();
  154. $sqlParam[":bizid"] = $bizInfo["id"];
  155. $sqlParam[":biz_traderid"] = $bizInfo["biz_traderid"];
  156. $sqlParam[":paymoney"] = $bizInfo["paymoney"];
  157. $sqlParam[":money"] = $bizInfo["money"];
  158. $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 次数支付成功 \n";
  159. $sqlTemp = "";
  160. $sqlTemp .= " update biz_trader_numaccount set updatetime=:nowtime,`status`=1 "; //已支付
  161. $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;";
  162. $sqlTemp .= " set @handle_id=0; ";
  163. $sqlTemp .= " select @handle_id:=id from biz_trader_account where `type`=0 and `biz_catalog`=0 and `biz_id`=:bizid limit 1;";
  164. $sqlTemp .= " insert into biz_trader_account ( `biz_traderid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )";
  165. $sqlTemp .= " select :biz_traderid , :nowtime , 0 , :paymoney, 1, 0 , :bizid, :bizremark from dual where ifnull(@handle_id,0)=0;";
  166. $sqlTemp .= " set @handle_id=0; ";
  167. $sqlTemp .= " select @handle_id:=id from biz_trader_account where `type`=1 and `biz_catalog`=0 and `biz_id`=:bizid limit 1;";
  168. $sqlTemp .= " insert into biz_trader_account ( `biz_traderid`, `createtime`,`type`, `money`, `status`,`biz_catalog`,`biz_id`, remark )";
  169. $sqlTemp .= " select :biz_traderid , :nowtime , 1 , :money, 1, 0 , :bizid, :bizremark from dual where ifnull(@handle_id,0)=0;";
  170. $dataset = pdo_query3($sqlTemp, $sqlParam);
  171. return true;
  172. break;
  173. case "1": //商家侧:【废弃】订单支付业务
  174. $bizInfo = pdo_fetch("select * from biz_trader_account where id=" . intval($payBizId));
  175. if (empty($bizInfo)) {
  176. throw new GeneralException("", "对应的业务支付记录不存在!");
  177. }
  178. if (intval($bizInfo["deleted"]) != 0) {
  179. throw new GeneralException("", "对应的业务支付记录已删除!");
  180. }
  181. if (intval($bizInfo["type"]) != 0) {
  182. throw new GeneralException("", "对应的业务支付记录不是支付记录!");
  183. }
  184. if (!(intval($bizInfo["biz_catalog"]) == 1 || intval($bizInfo["biz_catalog"]) == 4)) {
  185. throw new GeneralException("", "对应的业务支付记录不是订单支付业务!");
  186. }
  187. if (intval($bizInfo["status"]) == 1) {
  188. return true;
  189. }
  190. //已支付
  191. $workInfo = pdo_fetch("select tdwk.*
  192. ,btr.biz_traderid, btr.feetotal as pay_feetotal
  193. ,btr.plat_fetchmoney,btr.sharer_fetchmoney,btr.salary as wker_salary
  194. ,dwk.id as doed_workerid
  195. from biz_todowork tdwk
  196. inner join biz_trader_recruit btr on btr.id=tdwk.biz_recruitid
  197. inner join biz_worker dwk on dwk.id=tdwk.biz_workerid
  198. where tdwk.id=" . intval($bizInfo["biz_id"]));
  199. if (empty($workInfo)) {
  200. throw new GeneralException("", "对应的订单记录不存在或没有关联招聘或没有工人记录信息!");
  201. }
  202. if (intval($workInfo["status"] == 5)) {
  203. return true;
  204. }
  205. //已结算
  206. if (!(intval($workInfo["status"]) == 4
  207. || intval($workInfo["status"]) == -5)) {
  208. throw new GeneralException("", "此订单不是待结算/拒绝支付状态,请核查!");
  209. }
  210. if ($needQuery == true) {
  211. require_once WEB_PHY_ROOT . "/base/wxsrv.php";
  212. $wxmina_appid = $bizInfo["wxmina_appid"];
  213. $wxmina_openid = $bizInfo["wxmina_openid"];
  214. $out_trade_no = $bizInfo["biz_idtag"];
  215. $backdata = weixin_orderqueryV3($wxmina_appid, $out_trade_no, null);
  216. if ($backdata["trade_state"] == "SUCCESS") {
  217. } else {
  218. throw new GeneralException("NoPaySuccess", $backdata["trade_state"] . "-" . $backdata["trade_state_desc"]);
  219. }
  220. }
  221. $payfeeTotal = round(floatval($workInfo["pay_feetotal"]), 2);
  222. $platerMoney = round(floatval($workInfo["plat_fetchmoney"]), 2);
  223. $sharerMoney = round(floatval($workInfo["sharer_fetchmoney"]), 2);
  224. $workerMoney = round(floatval($workInfo["wker_salary"]), 2);
  225. $sqlParam = array();
  226. $sqlParam[":nowtime"] = time();
  227. $sqlParam[":bizid"] = $bizInfo["id"];
  228. $sqlParam[":wkid"] = $workInfo["id"];
  229. $sqlParam[":biz_traderid"] = $bizInfo["biz_traderid"];
  230. $sqlParam[":biz_roletype"] = $bizInfo["biz_roletype"];
  231. $sqlParam[":biz_userid"] = $bizInfo["biz_userid"];
  232. $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 订单支付结算 \n";
  233. $sqlParam[":bizremark22"] = "[" . date("Y-m-d H:i:s", time()) . "] 订单结算," . $bizInfo["remark"] . " \n";
  234. $sqlTemp = "";
  235. $sqlTemp .= " update biz_trader_account set updatetime=:nowtime,`status`=1 "; //已支付
  236. $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;";
  237. $sqlTemp .= " set @handle_id=0; ";
  238. $sqlTemp .= " select @handle_id:=id from biz_todowork where id=:wkid limit 1;";
  239. $sqlTemp .= " update biz_todowork set updatetime=:nowtime,`status`=5 "; //已结算
  240. $sqlTemp .= " ,settled_time=:nowtime,settled_mode=:biz_roletype,settled_userid=:biz_userid";
  241. $sqlTemp .= " ,remark=concat(:bizremark22,ifnull(remark,'')) where id=:wkid;";
  242. //----------------------------------------------------
  243. $sqlParam[":payfeeTotal"] = $payfeeTotal; //订单总费用
  244. $sqlParam[":biz_catalog1"] = intval($bizInfo["biz_catalog"] == 4) ? 7 : 6; //6-订单整体支出;7-平台代支付订单
  245. $sqlTemp .= " insert into biz_trader_account ( `biz_traderid`, `createtime`,`type`, `money`, `status`, `biz_catalog`, `biz_id`, `biz_roletype`, `biz_userid`, remark )";
  246. $sqlTemp .= " select :biz_traderid , :nowtime , 1 , :payfeeTotal, 1, :biz_catalog1 , :bizid, :biz_roletype, :biz_userid, :bizremark from dual where ifnull(@handle_id,0)>0;";
  247. $share_workerid = intval($workInfo["share_workerid"]);
  248. if ($share_workerid > 0) {
  249. $platerMoney = $platerMoney - $sharerMoney;
  250. }
  251. $sqlParam[":platerMoney"] = $platerMoney; //平台分成
  252. $sqlTemp .= " insert into biz_trader_account ( deleted, `biz_traderid`, `createtime`,`type`, `money`, `status`, `biz_catalog`, `biz_id`, `biz_roletype`, `biz_userid`, remark )";
  253. $sqlTemp .= " select 9, :biz_traderid , :nowtime , 1 , :platerMoney, 1, 1 , :bizid, :biz_roletype, :biz_userid, :bizremark from dual where ifnull(@handle_id,0)>0;";
  254. if ($share_workerid > 0) { //分享佣金
  255. $sqlParam[":sharerMoney"] = $sharerMoney;
  256. $sqlParam[":share_workerid"] = $share_workerid;
  257. $sqlTemp .= " insert into biz_trader_account ( deleted, `biz_traderid`, `createtime`,`type`, `money`, `status`, `biz_catalog`, `biz_id`, `biz_roletype`, `biz_userid`, remark )";
  258. $sqlTemp .= " select 9, :biz_traderid , :nowtime , 1 , :sharerMoney, 1, 2 , :bizid, :biz_roletype, :biz_userid, :bizremark from dual where ifnull(@handle_id,0)>0;";
  259. $sqlTemp .= " insert into biz_worker_account ( `biz_workerid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )";
  260. $sqlTemp .= " select :share_workerid , :nowtime , 0 , :sharerMoney, 1, 1 , :bizid, :bizremark from dual where ifnull(@handle_id,0)>0;";
  261. }
  262. $sqlParam[":workerMoney"] = $workerMoney; //工人工资
  263. $sqlParam[":doed_workerid"] = intval($workInfo["doed_workerid"]);
  264. $sqlTemp .= " insert into biz_trader_account ( deleted, `biz_traderid`, `createtime`,`type`, `money`, `status`, `biz_catalog`, `biz_id`, `biz_roletype`, `biz_userid`, remark )";
  265. $sqlTemp .= " select 9, :biz_traderid , :nowtime , 1 , :workerMoney, 1, 3 , :bizid, :biz_roletype, :biz_userid, :bizremark from dual where ifnull(@handle_id,0)>0;";
  266. $sqlTemp .= " insert into biz_worker_account ( `biz_workerid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )";
  267. $sqlTemp .= " select :doed_workerid , :nowtime , 0 , :workerMoney, 1, 0 , :bizid, :bizremark from dual where ifnull(@handle_id,0)>0;";
  268. $dataset = pdo_query3($sqlTemp, $sqlParam);
  269. return true;
  270. break;
  271. case "11": //商家侧:订单支付业务 NewNew
  272. $bizInfo = pdo_fetch("select * from biz_trader_account where id=" . intval($payBizId));
  273. if (empty($bizInfo)) {
  274. throw new GeneralException("", "对应的业务支付记录不存在!");
  275. }
  276. if (intval($bizInfo["deleted"]) != 0) {
  277. throw new GeneralException("", "对应的业务支付记录已删除!");
  278. }
  279. if (intval($bizInfo["type"]) != 0) {
  280. throw new GeneralException("", "对应的业务支付记录不是支付记录!");
  281. }
  282. if (!(intval($bizInfo["biz_catalog"]) == 1)) {
  283. throw new GeneralException("", "对应的业务支付记录不是订单支付业务!");
  284. }
  285. if (intval($bizInfo["status"]) == 1) {
  286. return true;
  287. }
  288. //已支付
  289. if ($needQuery == true) {
  290. require_once WEB_PHY_ROOT . "/base/wxsrv.php";
  291. $wxmina_appid = $bizInfo["wxmina_appid"];
  292. $wxmina_openid = $bizInfo["wxmina_openid"];
  293. $out_trade_no = $bizInfo["biz_idtag"];
  294. $backdata = weixin_orderqueryV3($wxmina_appid, $out_trade_no, null);
  295. if ($backdata["trade_state"] == "SUCCESS") {
  296. } else {
  297. throw new GeneralException("NoPaySuccess", $backdata["trade_state"] . "-" . $backdata["trade_state_desc"]);
  298. }
  299. }
  300. //**********确保支付成功后正常入账***************
  301. $sqlParam = array();
  302. $sqlParam[":nowtime"] = time();
  303. $sqlParam[":accid"] = $bizInfo["id"];
  304. $sqlParam[":accremark1"] = "[" . date("Y-m-d H:i:s", time()) . "] 工单费用差额已支付入账 \n";
  305. $sqlTemp = "";
  306. $sqlTemp .= " update biz_trader_account set updatetime=:nowtime,`status`=1 "; //已支付
  307. $sqlTemp .= " ,remark=concat(:accremark1,ifnull(remark,'')) where id=:accid;";
  308. $dataset = pdo_query3($sqlTemp, $sqlParam);
  309. //**********预提取相关信息并构建参数集对象***************
  310. $workInfo = pdo_fetch("select tdwk.*
  311. ,btr.begin_datetime as btr_begin_datetime,btr.finish_datetime as btr_finish_datetime
  312. ,btr.settle_catalog as btr_settle_catalog
  313. ,btr.biz_traderid, btr.feetotal as pay_feetotal
  314. ,btr.plat_fetchmoney,btr.sharer_fetchmoney,btr.salary as wker_salary,btr.urgent_level
  315. ,dwk.id as doed_workerid
  316. from biz_todowork tdwk
  317. left join biz_trader_recruit btr on btr.id=tdwk.biz_recruitid
  318. left join biz_worker dwk on dwk.id=tdwk.biz_workerid
  319. where tdwk.id=" . intval($bizInfo["biz_id"]));
  320. if (empty($workInfo)) {
  321. throw new GeneralException("", "对应的订单记录不存在!");
  322. }
  323. $payfeeTotal = round(floatval($workInfo["pay_feetotal"]), 2);
  324. $planDotime = intval($workInfo["todo_begindate"]);
  325. $workDateStart = intval($workInfo["btr_begin_datetime"]);
  326. $workDateFinish = $workDateStart;
  327. if (intval($workInfo["btr_settle_catalog"]) <= 0//普通招聘的多日招聘
  328. && intval($workInfo["btr_begin_datetime"]) < intval($workInfo["btr_finish_datetime"])) {
  329. $workDateFinish = intval($workInfo["btr_finish_datetime"]);
  330. }
  331. if (intval($workInfo["btr_settle_catalog"]) > 0) {
  332. $workDateStart = strtotime(date("Y-m-d", $planDotime));
  333. $workDateFinish = strtotime(date("Y-m-d 23:59:59", $planDotime));
  334. }
  335. $nowSettleCatalog = intval($workInfo["btr_settle_catalog"]);
  336. $plandoDateStart = strtotime(date("Y-m-d", $planDotime));
  337. $plandoDateFinish = strtotime(date("Y-m-d 23:59:59", $planDotime));
  338. $bizArgs = array(
  339. "handleMode" => $handleMode,
  340. "bizInfo" => $bizInfo,
  341. "workInfo" => $workInfo,
  342. "payfeeTotal" => $payfeeTotal,
  343. "workDateStart" => $workDateStart,
  344. "workDateFinish" => $workDateFinish,
  345. "plandoDateStart" => $plandoDateStart,
  346. "plandoDateFinish" => $plandoDateFinish,
  347. );
  348. if ($handleMode == "manhandle") { //加锁模式的余额支付模式,不用再研判了
  349. bizbase_enrollPassHandleCore($bizArgs);
  350. } else { //支付完成回调模式下,需加锁即可
  351. $recruitId = intval($workInfo["biz_recruitid"]);
  352. $backdata = bizbase_recruitWorkLock($recruitId, $planDotime, $bizArgs, function ($recruitId, $planDotime, $bizArgs, $mainRemain, $dateRemain, $restRemain, $pickDateList, $mainRemain2, $dateRemain2) {
  353. $handleMode = $bizArgs["handleMode"];
  354. $bizInfo = $bizArgs["bizInfo"];
  355. $workInfo = $bizArgs["workInfo"];
  356. $denyMsg = "";
  357. if ($mainRemain2 <= 0) {
  358. $denyMsg .= "此招聘已录满,已不能再录用";
  359. }
  360. if ($dateRemain2 <= 0) {
  361. $denyMsg .= "此招聘报名日期已录满,已不能再录用";
  362. }
  363. if (empty($denyMsg)) {
  364. bizbase_enrollPassHandleCore($bizArgs);
  365. } else {
  366. $sqlParam = array();
  367. $sqlParam[":nowtime"] = time();
  368. $sqlParam[":accid"] = $bizInfo["id"];
  369. $sqlParam[":bizid"] = $bizInfo["biz_id"];
  370. $sqlParam[":accremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 工单费用支付成功后但已未能录用:{$denyMsg} \n";
  371. $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 未能录用,返还押金:{$denyMsg} \n";
  372. $sqlTemp = "";
  373. if (1 != $workInfo['urgent_level']) {
  374. $sqlTemp .= " update biz_trader_account set updatetime=:nowtime ";
  375. $sqlTemp .= " ,remark=concat(:accremark,ifnull(remark,'')) where id=:accid;";
  376. $sqlTemp .= " update biz_todowork set updatetime=:nowtime,`status`=-4 "; //被动取消
  377. $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;"; //退还押金
  378. $sqlTemp .= " insert into biz_worker_account ( `biz_workerid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )";
  379. $sqlTemp .= " select biz_workerid , :nowtime , 0 , enroll_premoney, 1, 7 , id, :bizremark ";
  380. $sqlTemp .= " from biz_todowork where id=:bizid;";
  381. }
  382. $dataset = pdo_query3($sqlTemp, $sqlParam);
  383. }
  384. });
  385. }
  386. return true;
  387. break;
  388. case "2": //商家侧:微信支付充值
  389. $bizInfo = pdo_fetch("select * from biz_trader_account where id=" . intval($payBizId));
  390. if (empty($bizInfo)) {
  391. throw new GeneralException("", "对应的业务支付记录不存在!");
  392. }
  393. if (intval($bizInfo["deleted"]) != 0) {
  394. throw new GeneralException("", "对应的业务支付记录已删除!");
  395. }
  396. if (intval($bizInfo["type"]) != 0) {
  397. throw new GeneralException("", "对应的业务支付记录不是支付记录!");
  398. }
  399. if (intval($bizInfo["biz_catalog"]) != 2) {
  400. throw new GeneralException("", "对应的业务支付记录不是微信支付充值!");
  401. }
  402. if (intval($bizInfo["status"]) == 1) {
  403. return true;
  404. }
  405. //已支付
  406. if ($needQuery == true) {
  407. require_once WEB_PHY_ROOT . "/base/wxsrv.php";
  408. $wxmina_appid = $bizInfo["wxmina_appid"];
  409. $wxmina_openid = $bizInfo["wxmina_openid"];
  410. $out_trade_no = $bizInfo["biz_idtag"];
  411. $backdata = weixin_orderqueryV3($wxmina_appid, $out_trade_no, null);
  412. if ($backdata["trade_state"] == "SUCCESS") {
  413. } else {
  414. throw new GeneralException("NoPaySuccess", $backdata["trade_state"] . "-" . $backdata["trade_state_desc"]);
  415. }
  416. }
  417. $sqlParam = array();
  418. $sqlParam[":nowtime"] = time();
  419. $sqlParam[":bizid"] = $bizInfo["id"];
  420. $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 微信支付充值成功 \n";
  421. $sqlTemp = "";
  422. $sqlTemp .= " update biz_trader_account set updatetime=:nowtime,`status`=1 "; //已支付
  423. $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;";
  424. $dataset = pdo_query3($sqlTemp, $sqlParam);
  425. return true;
  426. break;
  427. case "3": //会员侧:营销活动支付
  428. $bizInfo = pdo_fetch("select * from biz_worker_account where id=" . intval($payBizId));
  429. if (empty($bizInfo)) {
  430. throw new GeneralException("", "对应的业务支付记录不存在!");
  431. }
  432. if (intval($bizInfo["deleted"]) != 0) {
  433. throw new GeneralException("", "对应的业务支付记录已删除!");
  434. }
  435. if (intval($bizInfo["type"]) != 0) {
  436. throw new GeneralException("", "对应的业务支付记录不是支付记录!");
  437. }
  438. if (intval($bizInfo["biz_catalog"]) != 2) {
  439. throw new GeneralException("", "对应的业务支付记录不是营销活动支付记录!");
  440. }
  441. if (intval($bizInfo["status"]) == 1) {
  442. return true;
  443. }
  444. //已支付
  445. if ($needQuery == true) {
  446. require_once WEB_PHY_ROOT . "/base/wxsrv.php";
  447. $wxmina_appid = $bizInfo["wxmina_appid"];
  448. $wxmina_openid = $bizInfo["wxmina_openid"];
  449. $out_trade_no = $bizInfo["biz_idtag"];
  450. $backdata = weixin_orderqueryV3($wxmina_appid, $out_trade_no, null);
  451. if ($backdata["trade_state"] == "SUCCESS") {
  452. } else {
  453. throw new GeneralException("NoPaySuccess", $backdata["trade_state"] . "-" . $backdata["trade_state_desc"]);
  454. }
  455. }
  456. $sqlParam = array();
  457. $sqlParam[":nowtime"] = time();
  458. $sqlParam[":bizid"] = $bizInfo["id"];
  459. $sqlParam[":bmaoid"] = $bizInfo["biz_id"];
  460. $sqlParam[":biz_workerid"] = $bizInfo["biz_workerid"];
  461. $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 营销活动支付成功 \n";
  462. $sqlTemp = "";
  463. $sqlTemp .= " update biz_worker_account set updatetime=:nowtime,`status`=1 "; //已支付
  464. $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;";
  465. $sqlTemp .= " update biz_market_activity_order set updatetime=:nowtime,`status`=1 "; //已支付
  466. $sqlTemp .= " ,payid=:bizid, paytime=:nowtime ";
  467. $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bmaoid and `status`=0;";
  468. $sqlTemp .= " select @price:=price from biz_market_activity_order where id=:bmaoid;";
  469. $sqlTemp .= " set @handle_id=0; ";
  470. $sqlTemp .= " select @handle_id:=id from biz_worker_account where biz_workerid=:biz_workerid and `type`=1 and `biz_catalog`=1 and `biz_id`=:bmaoid and `status`=1 limit 1;";
  471. $sqlTemp .= " insert into biz_worker_account ( `biz_workerid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )";
  472. $sqlTemp .= " select :biz_workerid , :nowtime , 1 , @price, 1, 1 , :bmaoid, :bizremark from dual where ifnull(@handle_id,0)=0;";
  473. $dataset = pdo_query3($sqlTemp, $sqlParam);
  474. return true;
  475. break;
  476. case "4": //会员侧:微信支付充值
  477. $bizInfo = pdo_fetch("select * from biz_worker_account where id=" . intval($payBizId));
  478. if (empty($bizInfo)) {
  479. throw new GeneralException("", "对应的业务支付记录不存在!");
  480. }
  481. if (intval($bizInfo["deleted"]) != 0) {
  482. throw new GeneralException("", "对应的业务支付记录已删除!");
  483. }
  484. if (intval($bizInfo["type"]) != 0) {
  485. throw new GeneralException("", "对应的业务支付记录不是支付记录!");
  486. }
  487. if (intval($bizInfo["biz_catalog"]) != 3) {
  488. throw new GeneralException("", "对应的业务支付记录不是微信支付充值!");
  489. }
  490. if (intval($bizInfo["status"]) == 1) {
  491. return true;
  492. }
  493. //已支付
  494. if ($needQuery == true) {
  495. require_once WEB_PHY_ROOT . "/base/wxsrv.php";
  496. $wxmina_appid = $bizInfo["wxmina_appid"];
  497. $wxmina_openid = $bizInfo["wxmina_openid"];
  498. $out_trade_no = $bizInfo["biz_idtag"];
  499. $backdata = weixin_orderqueryV3($wxmina_appid, $out_trade_no, null);
  500. if ($backdata["trade_state"] == "SUCCESS") {
  501. } else {
  502. throw new GeneralException("NoPaySuccess", $backdata["trade_state"] . "-" . $backdata["trade_state_desc"]);
  503. }
  504. }
  505. $sqlParam = array();
  506. $sqlParam[":nowtime"] = time();
  507. $sqlParam[":bizid"] = $bizInfo["id"];
  508. $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 微信支付充值成功 \n";
  509. $sqlTemp = "";
  510. $sqlTemp .= " update biz_worker_account set updatetime=:nowtime,`status`=1 "; //已支付
  511. $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;";
  512. $dataset = pdo_query3($sqlTemp, $sqlParam);
  513. return true;
  514. break;
  515. case "5": //会员侧:会员报名支付押金
  516. $bizInfo = pdo_fetch("select * from biz_worker_account where id=" . intval($payBizId));
  517. if (empty($bizInfo)) {
  518. throw new GeneralException("", "对应的业务支付记录不存在!");
  519. }
  520. if (intval($bizInfo["deleted"]) != 0) {
  521. throw new GeneralException("", "对应的业务支付记录已删除!");
  522. }
  523. if (intval($bizInfo["type"]) != 0) {
  524. throw new GeneralException("", "对应的业务支付记录不是支付记录!");
  525. }
  526. if (intval($bizInfo["biz_catalog"]) != 4) {
  527. throw new GeneralException("", "对应的业务支付记录不是会员报名支付押金!");
  528. }
  529. if (intval($bizInfo["status"]) == 1) {
  530. return true;
  531. }
  532. //已支付
  533. if ($needQuery == true) {
  534. require_once WEB_PHY_ROOT . "/base/wxsrv.php";
  535. $wxmina_appid = $bizInfo["wxmina_appid"];
  536. $wxmina_openid = $bizInfo["wxmina_openid"];
  537. $out_trade_no = $bizInfo["biz_idtag"];
  538. $backdata = weixin_orderqueryV3($wxmina_appid, $out_trade_no, null);
  539. if ($backdata["trade_state"] == "SUCCESS") {
  540. } else {
  541. throw new GeneralException("NoPaySuccess", $backdata["trade_state"] . "-" . $backdata["trade_state_desc"]);
  542. }
  543. }
  544. if ($handleMode == "singleEnroll") { //加锁模式的余额支付模式,不用再研判了
  545. $sqlParam = array();
  546. $sqlParam[":nowtime"] = time();
  547. $sqlParam[":accid"] = $bizInfo["id"];
  548. $sqlParam[":bizid"] = $bizInfo["biz_id"];
  549. $sqlParam[":biz_workerid"] = $bizInfo["biz_workerid"];
  550. $sqlParam[":accremark1"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已支付成功 \n";
  551. $sqlParam[":accremark2"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已冻结成功 \n";
  552. $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已支付并冻结成功,待录用 \n";
  553. $sqlTemp = "";
  554. $sqlTemp .= " update biz_worker_account set updatetime=:nowtime,`status`=1 "; //已支付
  555. $sqlTemp .= " ,remark=concat(:accremark1,ifnull(remark,'')) where id=:accid;";
  556. $sqlTemp .= " select @price:=ifnull(enroll_premoney,0) from biz_todowork where id=:bizid;";
  557. $sqlTemp .= " set @handle_id=0; ";
  558. $sqlTemp .= " select @handle_id:=id from biz_worker_account where biz_workerid=:biz_workerid and `type`=1 and `biz_catalog`=2 and `biz_id`=:bizid and `status`=1 limit 1;";
  559. $sqlTemp .= " insert into biz_worker_account ( `biz_workerid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )";
  560. $sqlTemp .= " select :biz_workerid , :nowtime , 1 , @price, 1, 2 , :bizid, :accremark2 from dual where ifnull(@handle_id,0)=0;";
  561. $sqlTemp .= " update biz_todowork set updatetime=:nowtime,`status`=1 "; //押金已支付冻结待录用
  562. $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;";
  563. $sqlTemp .= " insert into biz_message_queue( createtime, biz_catalog, biz_id)";
  564. $sqlTemp .= " select :nowtime, 1, :bizid from dual where 1=1;";
  565. $dataset = pdo_query3($sqlTemp, $sqlParam);
  566. } else { //支付完成回调模式下,需加锁研判招聘是否还可报名(状态有效/是否已录满/报满)
  567. $sqlParam = array();
  568. $sqlParam[":nowtime"] = time();
  569. $sqlParam[":accid"] = $bizInfo["id"];
  570. $sqlParam[":bizid"] = $bizInfo["biz_id"];
  571. $sqlParam[":accremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已支付成功 \n";
  572. $sqlTemp = "";
  573. $sqlTemp .= " update biz_worker_account set updatetime=:nowtime,`status`=1 "; //已支付
  574. $sqlTemp .= " ,remark=concat(:accremark,ifnull(remark,'')) where id=:accid;";
  575. $sqlTemp .= " select * from biz_todowork where id=:bizid;";
  576. $dataset = pdo_query3($sqlTemp, $sqlParam); //先保证支付的正常入账
  577. $tdwkInfo = $dataset[count($dataset) - 1][0];
  578. if (empty($tdwkInfo)) {
  579. throw new GeneralException("", "会员报名押金支付处理异常");
  580. }
  581. $recruitId = intval($tdwkInfo["biz_recruitid"]);
  582. $recruitInfo = pdo_fetch("select * from biz_trader_recruit where id=" . intval($recruitId));
  583. if (empty($recruitInfo)) {
  584. throw new GeneralException("", "没有定位到招聘记录信息,请核查!");
  585. }
  586. $planDotime = intval($tdwkInfo["todo_begindate"]);
  587. $bizWorker = pdo_fetch("select wk.*,bu.id as buid,bu.mobile,bu.subsystem
  588. from biz_worker wk
  589. left join base_user bu on bu.id=wk.base_userid
  590. where wk.id=:wkid limit 1;", array(":wkid" => $bizInfo["biz_workerid"]));
  591. if (empty($bizWorker)) {
  592. throw new GeneralException("", "没有定位到会员记录信息,请核查!");
  593. }
  594. $bizArgs = array("handleMode" => $handleMode, "bizInfo" => $bizInfo, "recruitInfo" => $recruitInfo, "bizWorker" => $bizWorker);
  595. $backdata = bizbase_recruitWorkLock($recruitId, $planDotime, $bizArgs, function ($recruitId, $planDotime, $bizArgs, $mainRemain, $dateRemain, $restRemain, $pickDateList, $mainRemain2, $dateRemain2) {
  596. $handleMode = $bizArgs["handleMode"];
  597. $bizInfo = $bizArgs["bizInfo"];
  598. $recruitInfo = $bizArgs["recruitInfo"];
  599. $bizWorker = $bizArgs["bizWorker"];
  600. $denyMsg = "";
  601. if ($mainRemain2 <= 0) {
  602. $denyMsg .= "此招聘已录满,已不能再报名";
  603. }
  604. if ($mainRemain <= 0) {
  605. $denyMsg .= "此招聘已报满,暂时不能报名";
  606. }
  607. if ($dateRemain2 <= 0) {
  608. $denyMsg .= "此招聘报名日期已录满,已不能再报名";
  609. }
  610. if ($dateRemain <= 0) {
  611. $denyMsg .= "此招聘报名日期已报满,暂时不能报名";
  612. }
  613. try {
  614. bizbase_todoWorkEnrollVerify($handleMode, $bizWorker, $recruitInfo, $planDotime);
  615. } catch (Throwable $e) {
  616. $denyMsg .= $e->getMessage();
  617. }
  618. if (empty($denyMsg)) {
  619. $sqlParam = array();
  620. $sqlParam[":nowtime"] = time();
  621. $sqlParam[":bizid"] = $bizInfo["biz_id"];
  622. $sqlParam[":biz_workerid"] = $bizInfo["biz_workerid"];
  623. $sqlParam[":accremark2"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已冻结成功 \n";
  624. $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已支付并冻结成功,待录用 \n";
  625. $sqlTemp = "";
  626. $sqlTemp .= " select @price:=ifnull(enroll_premoney,0) from biz_todowork where id=:bizid;";
  627. $sqlTemp .= " set @handle_id=0; ";
  628. $sqlTemp .= " select @handle_id:=id from biz_worker_account where biz_workerid=:biz_workerid and `type`=1 and `biz_catalog`=2 and `biz_id`=:bizid and `status`=1 limit 1;";
  629. $sqlTemp .= " insert into biz_worker_account ( `biz_workerid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )";
  630. $sqlTemp .= " select :biz_workerid , :nowtime , 1 , @price, 1, 2 , :bizid, :accremark2 from dual where ifnull(@handle_id,0)=0;";
  631. $sqlTemp .= " update biz_todowork set updatetime=:nowtime,`status`=1 "; //押金已支付冻结待录用
  632. $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;";
  633. $sqlTemp .= " insert into biz_message_queue( createtime, biz_catalog, biz_id)";
  634. $sqlTemp .= " select :nowtime, 1, :bizid from dual where 1=1;";
  635. $dataset = pdo_query3($sqlTemp, $sqlParam);
  636. } else {
  637. $sqlParam = array();
  638. $sqlParam[":nowtime"] = time();
  639. $sqlParam[":accid"] = $bizInfo["id"];
  640. $sqlParam[":bizid"] = $bizInfo["biz_id"];
  641. $sqlParam[":accremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 押金支付成功后但已不能再报名:{$denyMsg} \n";
  642. $sqlParam[":bizremark"] = $sqlParam[":accremark"];
  643. $sqlTemp = "";
  644. $sqlTemp .= " update biz_worker_account set updatetime=:nowtime ";
  645. $sqlTemp .= " ,remark=concat(:accremark,ifnull(remark,'')) where id=:accid;";
  646. $sqlTemp .= " update biz_todowork set updatetime=:nowtime,`status`=0 ";
  647. $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;";
  648. $dataset = pdo_query3($sqlTemp, $sqlParam);
  649. }
  650. });
  651. }
  652. return true;
  653. break;
  654. default:throw new GeneralException("", "不支持的payBizCatalog!");
  655. }
  656. }
  657. function bizbase_enrollPassHandleCore($bizArgs)
  658. {
  659. $bizInfo = $bizArgs["bizInfo"];
  660. $workInfo = $bizArgs["workInfo"];
  661. $sqlParam = array();
  662. $sqlParam[":nowtime"] = time();
  663. $sqlParam[":bizid"] = $bizInfo["biz_id"];
  664. $sqlParam[":biz_traderid"] = $bizInfo["biz_traderid"];
  665. $sqlParam[":biz_workerid"] = $workInfo["biz_workerid"];
  666. $sqlParam[":feetotal"] = $bizArgs["payfeeTotal"];
  667. $sqlParam[":workDateStart"] = $bizArgs["workDateStart"];
  668. $sqlParam[":workDateFinish"] = $bizArgs["workDateFinish"];
  669. $sqlParam[":plandoDateStart"] = $bizArgs["plandoDateStart"];
  670. $sqlParam[":plandoDateFinish"] = $bizArgs["plandoDateFinish"];
  671. $sqlParam[":accremark2"] = "[" . date("Y-m-d H:i:s", time()) . "] 工单费用已冻结成功 \n";
  672. $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 报名已录用,工单费用已支付并冻结成功 \n";
  673. $sqlParam[":cancel_remark"] = "[" . date("Y-m-d H:i:s", time()) . "] 已被其他商家及时录取,本待录用申请被取消,押金退还 \n";
  674. $sqlTemp = "";
  675. $sqlTemp .= " set @handle_id=0; ";
  676. $sqlTemp .= " select @handle_id:=id from biz_trader_account where biz_traderid=:biz_traderid and `type`=1 and `biz_catalog`=8 and `biz_id`=:bizid and `status`=1 limit 1;";
  677. $sqlTemp .= " insert into biz_trader_account ( `biz_traderid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )";
  678. $sqlTemp .= " select :biz_traderid , :nowtime , 1 , :feetotal, 1, 8 , :bizid, :accremark2 from dual where ifnull(@handle_id,0)=0;";
  679. $sqlTemp .= " update biz_todowork set updatetime=:nowtime,`status`=2 "; //工单费用已支付并冻结成功 录用成功
  680. $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;";
  681. if (1 != $workInfo['urgent_level']) {
  682. //同天其他工单取消处理
  683. $sqlTemp .= " insert into biz_worker_account ( `biz_workerid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )";
  684. $sqlTemp .= " select tdwk.biz_workerid , :nowtime , 0 , tdwk.enroll_premoney, 1, 7 , tdwk.id, :cancel_remark ";
  685. $sqlTemp .= " from biz_todowork tdwk";
  686. $sqlTemp .= " left join biz_trader_recruit btr on btr.id=tdwk.biz_recruitid ";
  687. //大条件:同会员,待录用态,非本单
  688. //时间冲突:它单工作日期(多天的开始日期)与当单冲突检测
  689. // 它单工作日期(多天的开始日期)与当单工作时间段的冲突检测
  690. // 它单为多天模式下其时间跨度涵盖当单的时间冲突检测
  691. $sqlTempKKK = " where tdwk.id<>:bizid and tdwk.biz_workerid=:biz_workerid and tdwk.`status`=1
  692. and(
  693. (tdwk.todo_begindate>=:plandoDateStart and tdwk.todo_begindate<=:plandoDateFinish)
  694. or(tdwk.todo_begindate>=:workDateStart and tdwk.todo_begindate<=:workDateFinish)
  695. or( btr.settle_catalog<=0 and btr.finish_datetime>btr.begin_datetime and (
  696. (btr.begin_datetime>=:workDateStart and btr.begin_datetime<=:workDateFinish)
  697. or(btr.begin_datetime<=:workDateStart and btr.finish_datetime>=:workDateFinish)
  698. or(btr.finish_datetime>=:workDateStart and btr.finish_datetime<=:workDateFinish)
  699. ))
  700. )
  701. ";
  702. $sqlTemp .= $sqlTempKKK . ";";
  703. $sqlTemp .= " update biz_todowork tdwk";
  704. $sqlTemp .= " left join biz_trader_recruit btr on btr.id=tdwk.biz_recruitid ";
  705. $sqlTemp .= " set tdwk.updatetime=:nowtime, tdwk.`status`=-4, tdwk.`teamstatus`=-4 "; //-4 被动取消
  706. $sqlTemp .= " , tdwk.remark=concat(:cancel_remark,ifnull(tdwk.remark,'')), tdwk.teamremark=concat(:cancel_remark,ifnull(tdwk.teamremark,'')) ";
  707. $sqlTemp .= $sqlTempKKK . ";";
  708. }
  709. //录用后消息通知
  710. $sqlTemp .= " insert into biz_message_queue( createtime, biz_catalog, biz_id)";
  711. $sqlTemp .= " select :nowtime, 0, :bizid from dual where 1=1;";
  712. //var_dump($sqlTemp);exit;
  713. $dataset = pdo_query3($sqlTemp, $sqlParam);
  714. }
  715. /*****************
  716. 可核查账号是否处于黑名单/停用状态;若是则可选抛出异常或返回false;
  717. 正常情况则返回$bizWorkerServicer实体记录信息,用于后续逻辑处理
  718. 另外,若已过停用截至日期,则自动重置回非停用状态!
  719. bizbase_verifyWorkerAccount("biz_worker/biz_servicer",$bizWorkerServicer,false/true);
  720. */
  721. function bizbase_verifyUserAccount($bizWorkerTrader, $throwException, $errMsg)
  722. { //核查账号是否有效,非停用/非黑名单
  723. if ($bizWorkerTrader["subsystem"] == SUBSYS_LABOUR_MINA) {
  724. $tablename = "biz_worker";
  725. }
  726. if ($bizWorkerTrader["subsystem"] == SUBSYS_CAPITAL_MINA) {
  727. $tablename = "biz_trader";
  728. }
  729. switch (intval($bizWorkerTrader["hanging"])) {
  730. case 1: //"警告"
  731. break;
  732. case 2: //"停用一周"
  733. case 3: //"停用两周"
  734. if ((time() - intval($bizWorkerTrader["hanging_endtime"])) <= 0) { //还处于停用期
  735. if ($throwException) {
  736. throw new GeneralException("", " {$errMsg} 账号还处于停用期,停用截至日期:" . date("Y-m-d H:i:s", intval($bizWorkerTrader["hanging_endtime"])));
  737. }
  738. return false;
  739. } else { //已过停用截至日期,则重置一下状态
  740. if ($tablename != "biz_worker" && $tablename != "biz_trader") {
  741. throw new GeneralException("", "输出的tablename参数不正确!");
  742. }
  743. pdo_query("update {$tablename} set updatetime=:nowtime, hanging=0, hangopt_remak=concat(:hangopt_remak,ifnull(hangopt_remak,''))
  744. where id=:id;", array(
  745. ":nowtime" => time(),
  746. ":hangopt_remak" => "[" . date("Y-m-d H:i:s", time()) . "] 已过停用截至日期,重置状态;\n",
  747. ":id" => intval($bizWorkerTrader["id"]),
  748. ));
  749. }
  750. break;
  751. case 4: //"拉入黑名单"
  752. if ($throwException) {
  753. throw new GeneralException("", " {$errMsg} 账号处于黑名单状态!");
  754. }
  755. return false;
  756. break;
  757. }
  758. // if (intval($bizWorkerTrader["blocked"])>0){
  759. // if ($throwException) throw new GeneralException("", " {$errMsg} 账号处于黑名单状态!");
  760. // else return false;
  761. // }
  762. return $bizWorkerTrader;
  763. }
  764. function bizbase_pasttimeTips($time)
  765. {
  766. $diff = time() - intval($time);
  767. if ($diff < 0) {
  768. throw new GeneralException("", "时间超前了啊");
  769. }
  770. $datetime1 = new \DateTime(date("Y-m-d H:i:s", $time));
  771. $datetime2 = new \DateTime(date("Y-m-d H:i:s", time()));
  772. $interval = $datetime1->diff($datetime2);
  773. $timeTips['y'] = intval($interval->format('%Y'));
  774. if ($timeTips['y'] > 0) {
  775. return $timeTips['y'] . "年前";
  776. }
  777. $timeTips['m'] = intval($interval->format('%m'));
  778. if ($timeTips['m'] > 0) {
  779. return $timeTips['m'] . "月前";
  780. }
  781. $timeTips['d'] = intval($interval->format('%d'));
  782. if ($timeTips['d'] > 0) {
  783. return $timeTips['d'] . "天前";
  784. }
  785. $timeTips['h'] = intval($interval->format('%H'));
  786. if ($timeTips['h'] > 0) {
  787. return $timeTips['h'] . "小时前";
  788. }
  789. $timeTips['i'] = intval($interval->format('%i'));
  790. if ($timeTips['i'] > 0) {
  791. return $timeTips['i'] . "分钟前";
  792. } else {
  793. return "刚才";
  794. }
  795. $timeTips['s'] = intval($interval->format('%s'));
  796. $timeTips['a'] = intval($interval->format('%a'));
  797. return $timeTips;
  798. }
  799. /**********************LBS相关逻辑**************************************/
  800. function bizbase_lbsEntityHandle($fromSubSystem, $handleMode, $ajaxdata, $GPC)
  801. {
  802. switch ($handleMode) {
  803. case "fetchAddressByLocation":
  804. $coordtype = isset($ajaxdata["coordtype"]) ? $ajaxdata["coordtype"] : $GPC["coordtype"];
  805. if (empty(trim($coordtype))) {
  806. $coordtype = "";
  807. }
  808. $lat = isset($ajaxdata["lat"]) ? $ajaxdata["lat"] : $GPC["lat"];
  809. if (empty(trim($lat))) {
  810. throw new GeneralException("", "没有传递lat参数 !");
  811. }
  812. $lng = isset($ajaxdata["lng"]) ? $ajaxdata["lng"] : $GPC["lng"];
  813. if (empty(trim($lng))) {
  814. throw new GeneralException("", "没有传递lng参数 !");
  815. }
  816. $backdata = basebaidumap_fetchplace($lat, $lng, $coordtype);
  817. $backdata = $backdata["addressComponent"];
  818. return $backdata;
  819. break;
  820. default:
  821. throw new GeneralException("", "不支持的handleMode!");
  822. }
  823. }