common.php 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895
  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. $sqlTemp .= " select :biz_workerid , :nowtime , 1 , @price, 1, 10 , :bmaoid, :bizremark from dual where ifnull(@handle_id,0)=0;";
  478. $dataset = pdo_query3($sqlTemp, $sqlParam);
  479. return true;
  480. break;
  481. case "4": //会员侧:微信支付充值
  482. $bizInfo = pdo_fetch("select * from biz_worker_account where id=" . intval($payBizId));
  483. if (empty($bizInfo)) {
  484. throw new GeneralException("", "对应的业务支付记录不存在!");
  485. }
  486. if (intval($bizInfo["deleted"]) != 0) {
  487. throw new GeneralException("", "对应的业务支付记录已删除!");
  488. }
  489. if (intval($bizInfo["type"]) != 0) {
  490. throw new GeneralException("", "对应的业务支付记录不是支付记录!");
  491. }
  492. if (intval($bizInfo["biz_catalog"]) != 3) {
  493. throw new GeneralException("", "对应的业务支付记录不是微信支付充值!");
  494. }
  495. if (intval($bizInfo["status"]) == 1) {
  496. return true;
  497. }
  498. //已支付
  499. if ($needQuery == true) {
  500. require_once WEB_PHY_ROOT . "/base/wxsrv.php";
  501. $wxmina_appid = $bizInfo["wxmina_appid"];
  502. $wxmina_openid = $bizInfo["wxmina_openid"];
  503. //$out_trade_no = $bizInfo["biz_idtag"];
  504. $out_trade_no = !isset($bizInfo["weixin_outtradeno"]) || empty($bizInfo["weixin_outtradeno"]) ? $bizInfo["biz_idtag"] : $bizInfo["weixin_outtradeno"];
  505. $backdata = weixin_orderqueryV3($wxmina_appid, $out_trade_no, null);
  506. if ($backdata["trade_state"] == "SUCCESS") {
  507. } else {
  508. throw new GeneralException("NoPaySuccess", $backdata["trade_state"] . "-" . $backdata["trade_state_desc"]);
  509. }
  510. }
  511. $sqlParam = array();
  512. $sqlParam[":nowtime"] = time();
  513. $sqlParam[":bizid"] = $bizInfo["id"];
  514. $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 微信支付充值成功 \n";
  515. $sqlTemp = "";
  516. $sqlTemp .= " update biz_worker_account set updatetime=:nowtime,`status`=1 "; //已支付
  517. $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;";
  518. $dataset = pdo_query3($sqlTemp, $sqlParam);
  519. return true;
  520. break;
  521. case "5": //会员侧:会员报名支付押金
  522. $bizInfo = pdo_fetch("select * from biz_worker_account where id=" . intval($payBizId));
  523. if (empty($bizInfo)) {
  524. throw new GeneralException("", "对应的业务支付记录不存在!");
  525. }
  526. if (intval($bizInfo["deleted"]) != 0) {
  527. throw new GeneralException("", "对应的业务支付记录已删除!");
  528. }
  529. if (intval($bizInfo["type"]) != 0) {
  530. throw new GeneralException("", "对应的业务支付记录不是支付记录!");
  531. }
  532. if (intval($bizInfo["biz_catalog"]) != 4) {
  533. throw new GeneralException("", "对应的业务支付记录不是会员报名支付押金!");
  534. }
  535. if (intval($bizInfo["status"]) == 1) {
  536. return true;
  537. }
  538. //已支付
  539. if ($needQuery == true) {
  540. require_once WEB_PHY_ROOT . "/base/wxsrv.php";
  541. $wxmina_appid = $bizInfo["wxmina_appid"];
  542. $wxmina_openid = $bizInfo["wxmina_openid"];
  543. $out_trade_no = !isset($bizInfo["weixin_outtradeno"]) || empty($bizInfo["weixin_outtradeno"]) ? $bizInfo["biz_idtag"] : $bizInfo["weixin_outtradeno"];
  544. $backdata = weixin_orderqueryV3($wxmina_appid, $out_trade_no, null);
  545. if ($backdata["trade_state"] == "SUCCESS") {
  546. } else {
  547. throw new GeneralException("NoPaySuccess", $backdata["trade_state"] . "-" . $backdata["trade_state_desc"]);
  548. }
  549. }
  550. if ($handleMode == "singleEnroll") { //加锁模式的余额支付模式,不用再研判了
  551. $sqlParam = array();
  552. $sqlParam[":nowtime"] = time();
  553. $sqlParam[":accid"] = $bizInfo["id"];
  554. $sqlParam[":bizid"] = $bizInfo["biz_id"];
  555. $sqlParam[":biz_workerid"] = $bizInfo["biz_workerid"];
  556. $sqlParam[":accremark1"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已支付成功 \n";
  557. $sqlParam[":accremark2"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已冻结成功 \n";
  558. $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已支付并冻结成功,待录用 \n";
  559. $sqlTemp = "";
  560. $sqlTemp .= " update biz_worker_account set updatetime=:nowtime,`status`=1 "; //已支付
  561. $sqlTemp .= " ,remark=concat(:accremark1,ifnull(remark,'')) where id=:accid;";
  562. $sqlTemp .= " select @price:=ifnull(enroll_premoney,0) from biz_todowork where id=:bizid;";
  563. $sqlTemp .= " set @handle_id=0; ";
  564. $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;";
  565. $sqlTemp .= " insert into biz_worker_account ( `biz_workerid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )";
  566. $sqlTemp .= " select :biz_workerid , :nowtime , 1 , @price, 1, 2 , :bizid, :accremark2 from dual where ifnull(@handle_id,0)=0;";
  567. $sqlTemp .= " update biz_todowork set updatetime=:nowtime,`status`=1 "; //押金已支付冻结待录用
  568. $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;";
  569. $sqlTemp .= " insert into biz_message_queue( createtime, biz_catalog, biz_id)";
  570. $sqlTemp .= " select :nowtime, 1, :bizid from dual where 1=1;";
  571. $dataset = pdo_query3($sqlTemp, $sqlParam);
  572. } else { //支付完成回调模式下,需加锁研判招聘是否还可报名(状态有效/是否已录满/报满)
  573. $sqlParam = array();
  574. $sqlParam[":nowtime"] = time();
  575. $sqlParam[":accid"] = $bizInfo["id"];
  576. $sqlParam[":bizid"] = $bizInfo["biz_id"];
  577. $sqlParam[":accremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已支付成功 \n";
  578. $sqlTemp = "";
  579. $sqlTemp .= " update biz_worker_account set updatetime=:nowtime,`status`=1 "; //已支付
  580. $sqlTemp .= " ,remark=concat(:accremark,ifnull(remark,'')) where id=:accid;";
  581. $sqlTemp .= " select * from biz_todowork where id=:bizid;";
  582. $dataset = pdo_query3($sqlTemp, $sqlParam); //先保证支付的正常入账
  583. $tdwkInfo = $dataset[count($dataset) - 1][0];
  584. if (empty($tdwkInfo)) {
  585. throw new GeneralException("", "会员报名押金支付处理异常");
  586. }
  587. $recruitId = intval($tdwkInfo["biz_recruitid"]);
  588. $recruitInfo = pdo_fetch("select * from biz_trader_recruit where id=" . intval($recruitId));
  589. if (empty($recruitInfo)) {
  590. throw new GeneralException("", "没有定位到招聘记录信息,请核查!");
  591. }
  592. $planDotime = intval($tdwkInfo["todo_begindate"]);
  593. $bizWorker = pdo_fetch("select wk.*,bu.id as buid,bu.mobile,bu.subsystem
  594. from biz_worker wk
  595. left join base_user bu on bu.id=wk.base_userid
  596. where wk.id=:wkid limit 1;", array(":wkid" => $bizInfo["biz_workerid"]));
  597. if (empty($bizWorker)) {
  598. throw new GeneralException("", "没有定位到会员记录信息,请核查!");
  599. }
  600. $bizArgs = array("handleMode" => $handleMode, "bizInfo" => $bizInfo, "recruitInfo" => $recruitInfo, "bizWorker" => $bizWorker);
  601. $backdata = bizbase_recruitWorkLock($recruitId, $planDotime, $bizArgs, function ($recruitId, $planDotime, $bizArgs, $mainRemain, $dateRemain, $restRemain, $pickDateList, $mainRemain2, $dateRemain2) {
  602. $handleMode = $bizArgs["handleMode"];
  603. $bizInfo = $bizArgs["bizInfo"];
  604. $recruitInfo = $bizArgs["recruitInfo"];
  605. $bizWorker = $bizArgs["bizWorker"];
  606. $denyMsg = "";
  607. if ($mainRemain2 <= 0) {
  608. $denyMsg .= "此招聘已录满,已不能再报名";
  609. }
  610. if ($mainRemain <= 0) {
  611. $denyMsg .= "此招聘已报满,暂时不能报名";
  612. }
  613. if ($dateRemain2 <= 0) {
  614. $denyMsg .= "此招聘报名日期已录满,已不能再报名";
  615. }
  616. if ($dateRemain <= 0) {
  617. $denyMsg .= "此招聘报名日期已报满,暂时不能报名";
  618. }
  619. try {
  620. bizbase_todoWorkEnrollVerify($handleMode, $bizWorker, $recruitInfo, $planDotime);
  621. } catch (Throwable $e) {
  622. $denyMsg .= $e->getMessage();
  623. }
  624. if (empty($denyMsg)) {
  625. $sqlParam = array();
  626. $sqlParam[":nowtime"] = time();
  627. $sqlParam[":bizid"] = $bizInfo["biz_id"];
  628. $sqlParam[":biz_workerid"] = $bizInfo["biz_workerid"];
  629. $sqlParam[":accremark2"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已冻结成功 \n";
  630. $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已支付并冻结成功,待录用 \n";
  631. $sqlTemp = "";
  632. $sqlTemp .= " select @price:=ifnull(enroll_premoney,0) from biz_todowork where id=:bizid;";
  633. $sqlTemp .= " set @handle_id=0; ";
  634. $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;";
  635. $sqlTemp .= " insert into biz_worker_account ( `biz_workerid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )";
  636. $sqlTemp .= " select :biz_workerid , :nowtime , 1 , @price, 1, 2 , :bizid, :accremark2 from dual where ifnull(@handle_id,0)=0;";
  637. $sqlTemp .= " update biz_todowork set updatetime=:nowtime,`status`=1 "; //押金已支付冻结待录用
  638. $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;";
  639. $sqlTemp .= " insert into biz_message_queue( createtime, biz_catalog, biz_id)";
  640. $sqlTemp .= " select :nowtime, 1, :bizid from dual where 1=1;";
  641. $dataset = pdo_query3($sqlTemp, $sqlParam);
  642. } else {
  643. $sqlParam = array();
  644. $sqlParam[":nowtime"] = time();
  645. $sqlParam[":accid"] = $bizInfo["id"];
  646. $sqlParam[":bizid"] = $bizInfo["biz_id"];
  647. $sqlParam[":accremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 押金支付成功后但已不能再报名:{$denyMsg} \n";
  648. $sqlParam[":bizremark"] = $sqlParam[":accremark"];
  649. $sqlTemp = "";
  650. $sqlTemp .= " update biz_worker_account set updatetime=:nowtime ";
  651. $sqlTemp .= " ,remark=concat(:accremark,ifnull(remark,'')) where id=:accid;";
  652. $sqlTemp .= " update biz_todowork set updatetime=:nowtime,`status`=0 ";
  653. $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;";
  654. $dataset = pdo_query3($sqlTemp, $sqlParam);
  655. }
  656. });
  657. }
  658. return true;
  659. break;
  660. default:throw new GeneralException("", "不支持的payBizCatalog!");
  661. }
  662. }
  663. function bizbase_enrollPassHandleCore($bizArgs)
  664. {
  665. $bizInfo = $bizArgs["bizInfo"];
  666. $workInfo = $bizArgs["workInfo"];
  667. $sqlParam = array();
  668. $sqlParam[":nowtime"] = time();
  669. $sqlParam[":bizid"] = $bizInfo["biz_id"];
  670. $sqlParam[":biz_traderid"] = $bizInfo["biz_traderid"];
  671. $sqlParam[":biz_workerid"] = $workInfo["biz_workerid"];
  672. $sqlParam[":feetotal"] = $bizArgs["payfeeTotal"];
  673. $sqlParam[":workDateStart"] = $bizArgs["workDateStart"];
  674. $sqlParam[":workDateFinish"] = $bizArgs["workDateFinish"];
  675. $sqlParam[":plandoDateStart"] = $bizArgs["plandoDateStart"];
  676. $sqlParam[":plandoDateFinish"] = $bizArgs["plandoDateFinish"];
  677. $sqlParam[":accremark2"] = "[" . date("Y-m-d H:i:s", time()) . "] 工单费用已冻结成功 \n";
  678. $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 报名已录用,工单费用已支付并冻结成功 \n";
  679. $sqlParam[":cancel_remark"] = "[" . date("Y-m-d H:i:s", time()) . "] 已被其他商家及时录取,本待录用申请被取消,押金退还 \n";
  680. $sqlTemp = "";
  681. $sqlTemp .= " set @handle_id=0; ";
  682. $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;";
  683. $sqlTemp .= " insert into biz_trader_account ( `biz_traderid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )";
  684. $sqlTemp .= " select :biz_traderid , :nowtime , 1 , :feetotal, 1, 8 , :bizid, :accremark2 from dual where ifnull(@handle_id,0)=0;";
  685. $sqlTemp .= " update biz_todowork set updatetime=:nowtime,`status`=2 "; //工单费用已支付并冻结成功 录用成功
  686. $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;";
  687. if (1 != $workInfo['urgent_level']) {
  688. //同天其他工单取消处理
  689. $sqlTemp .= " insert into biz_worker_account ( `biz_workerid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )";
  690. $sqlTemp .= " select tdwk.biz_workerid , :nowtime , 0 , tdwk.enroll_premoney, 1, 7 , tdwk.id, :cancel_remark ";
  691. $sqlTemp .= " from biz_todowork tdwk";
  692. $sqlTemp .= " left join biz_trader_recruit btr on btr.id=tdwk.biz_recruitid ";
  693. //大条件:同会员,待录用态,非本单
  694. //时间冲突:它单工作日期(多天的开始日期)与当单冲突检测
  695. // 它单工作日期(多天的开始日期)与当单工作时间段的冲突检测
  696. // 它单为多天模式下其时间跨度涵盖当单的时间冲突检测
  697. $sqlTempKKK = " where tdwk.id<>:bizid and tdwk.biz_workerid=:biz_workerid and tdwk.`status`=1
  698. and(
  699. (tdwk.todo_begindate>=:plandoDateStart and tdwk.todo_begindate<=:plandoDateFinish)
  700. or(tdwk.todo_begindate>=:workDateStart and tdwk.todo_begindate<=:workDateFinish)
  701. or( btr.settle_catalog<=0 and btr.finish_datetime>btr.begin_datetime and (
  702. (btr.begin_datetime>=:workDateStart and btr.begin_datetime<=:workDateFinish)
  703. or(btr.begin_datetime<=:workDateStart and btr.finish_datetime>=:workDateFinish)
  704. or(btr.finish_datetime>=:workDateStart and btr.finish_datetime<=:workDateFinish)
  705. ))
  706. )
  707. ";
  708. $sqlTemp .= $sqlTempKKK . ";";
  709. $sqlTemp .= " update biz_todowork tdwk";
  710. $sqlTemp .= " left join biz_trader_recruit btr on btr.id=tdwk.biz_recruitid ";
  711. $sqlTemp .= " set tdwk.updatetime=:nowtime, tdwk.`status`=-4, tdwk.`teamstatus`=-4 "; //-4 被动取消
  712. $sqlTemp .= " , tdwk.remark=concat(:cancel_remark,ifnull(tdwk.remark,'')), tdwk.teamremark=concat(:cancel_remark,ifnull(tdwk.teamremark,'')) ";
  713. $sqlTemp .= $sqlTempKKK . ";";
  714. }
  715. //录用后消息通知
  716. $sqlTemp .= " insert into biz_message_queue( createtime, biz_catalog, biz_id)";
  717. $sqlTemp .= " select :nowtime, 0, :bizid from dual where 1=1;";
  718. //var_dump($sqlTemp);exit;
  719. $dataset = pdo_query3($sqlTemp, $sqlParam);
  720. }
  721. /*****************
  722. 可核查账号是否处于黑名单/停用状态;若是则可选抛出异常或返回false;
  723. 正常情况则返回$bizWorkerServicer实体记录信息,用于后续逻辑处理
  724. 另外,若已过停用截至日期,则自动重置回非停用状态!
  725. bizbase_verifyWorkerAccount("biz_worker/biz_servicer",$bizWorkerServicer,false/true);
  726. */
  727. function bizbase_verifyUserAccount($bizWorkerTrader, $throwException, $errMsg)
  728. { //核查账号是否有效,非停用/非黑名单
  729. if ($bizWorkerTrader["subsystem"] == SUBSYS_LABOUR_MINA) {
  730. $tablename = "biz_worker";
  731. }
  732. if ($bizWorkerTrader["subsystem"] == SUBSYS_CAPITAL_MINA) {
  733. $tablename = "biz_trader";
  734. }
  735. switch (intval($bizWorkerTrader["hanging"])) {
  736. case 1: //"警告"
  737. break;
  738. case 2: //"停用一周"
  739. case 3: //"停用两周"
  740. if ((time() - intval($bizWorkerTrader["hanging_endtime"])) <= 0) { //还处于停用期
  741. if ($throwException) {
  742. throw new GeneralException("", " {$errMsg} 账号还处于停用期,停用截至日期:" . date("Y-m-d H:i:s", intval($bizWorkerTrader["hanging_endtime"])));
  743. }
  744. return false;
  745. } else { //已过停用截至日期,则重置一下状态
  746. if ($tablename != "biz_worker" && $tablename != "biz_trader") {
  747. throw new GeneralException("", "输出的tablename参数不正确!");
  748. }
  749. pdo_query("update {$tablename} set updatetime=:nowtime, hanging=0, hangopt_remak=concat(:hangopt_remak,ifnull(hangopt_remak,''))
  750. where id=:id;", array(
  751. ":nowtime" => time(),
  752. ":hangopt_remak" => "[" . date("Y-m-d H:i:s", time()) . "] 已过停用截至日期,重置状态;\n",
  753. ":id" => intval($bizWorkerTrader["id"]),
  754. ));
  755. }
  756. break;
  757. case 4: //"拉入黑名单"
  758. if ($throwException) {
  759. throw new GeneralException("", " {$errMsg} 账号处于黑名单状态!");
  760. }
  761. return false;
  762. break;
  763. }
  764. // if (intval($bizWorkerTrader["blocked"])>0){
  765. // if ($throwException) throw new GeneralException("", " {$errMsg} 账号处于黑名单状态!");
  766. // else return false;
  767. // }
  768. return $bizWorkerTrader;
  769. }
  770. function bizbase_pasttimeTips($time)
  771. {
  772. $diff = time() - intval($time);
  773. if ($diff < 0) {
  774. throw new GeneralException("", "时间超前了啊");
  775. }
  776. $datetime1 = new \DateTime(date("Y-m-d H:i:s", $time));
  777. $datetime2 = new \DateTime(date("Y-m-d H:i:s", time()));
  778. $interval = $datetime1->diff($datetime2);
  779. $timeTips['y'] = intval($interval->format('%Y'));
  780. if ($timeTips['y'] > 0) {
  781. return $timeTips['y'] . "年前";
  782. }
  783. $timeTips['m'] = intval($interval->format('%m'));
  784. if ($timeTips['m'] > 0) {
  785. return $timeTips['m'] . "月前";
  786. }
  787. $timeTips['d'] = intval($interval->format('%d'));
  788. if ($timeTips['d'] > 0) {
  789. return $timeTips['d'] . "天前";
  790. }
  791. $timeTips['h'] = intval($interval->format('%H'));
  792. if ($timeTips['h'] > 0) {
  793. return $timeTips['h'] . "小时前";
  794. }
  795. $timeTips['i'] = intval($interval->format('%i'));
  796. if ($timeTips['i'] > 0) {
  797. return $timeTips['i'] . "分钟前";
  798. } else {
  799. return "刚才";
  800. }
  801. $timeTips['s'] = intval($interval->format('%s'));
  802. $timeTips['a'] = intval($interval->format('%a'));
  803. return $timeTips;
  804. }
  805. /**********************LBS相关逻辑**************************************/
  806. function bizbase_lbsEntityHandle($fromSubSystem, $handleMode, $ajaxdata, $GPC)
  807. {
  808. switch ($handleMode) {
  809. case "fetchAddressByLocation":
  810. $coordtype = isset($ajaxdata["coordtype"]) ? $ajaxdata["coordtype"] : $GPC["coordtype"];
  811. if (empty(trim($coordtype))) {
  812. $coordtype = "";
  813. }
  814. $lat = isset($ajaxdata["lat"]) ? $ajaxdata["lat"] : $GPC["lat"];
  815. if (empty(trim($lat))) {
  816. throw new GeneralException("", "没有传递lat参数 !");
  817. }
  818. $lng = isset($ajaxdata["lng"]) ? $ajaxdata["lng"] : $GPC["lng"];
  819. if (empty(trim($lng))) {
  820. throw new GeneralException("", "没有传递lng参数 !");
  821. }
  822. $backdata = basebaidumap_fetchplace($lat, $lng, $coordtype);
  823. $backdata = $backdata["addressComponent"];
  824. return $backdata;
  825. break;
  826. default:
  827. throw new GeneralException("", "不支持的handleMode!");
  828. }
  829. }