common.php 50 KB

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