|
|
@@ -4,1130 +4,942 @@ namespace app\api\controller;
|
|
|
|
|
|
use app\common\controller\Api;
|
|
|
use think\Db;
|
|
|
-use Overtrue\Pinyin;
|
|
|
+use think\exception\HttpResponseException;
|
|
|
|
|
|
/**
|
|
|
- * 中间表数据同步
|
|
|
+ * MES-ERP 工单同步
|
|
|
*/
|
|
|
class Synchronization extends Api
|
|
|
{
|
|
|
protected $noNeedLogin = ['*'];
|
|
|
protected $noNeedRight = ['*'];
|
|
|
|
|
|
+ /** @var int 同步状态:待同步 */
|
|
|
+ const SYNC_STATUS_PENDING = 0;
|
|
|
+ /** @var int 同步状态:成功 */
|
|
|
+ const SYNC_STATUS_SUCCESS = 1;
|
|
|
+ /** @var int 同步状态:失败 */
|
|
|
+ const SYNC_STATUS_FAILED = 2;
|
|
|
+
|
|
|
+ /** @var int 操作状态:成功 */
|
|
|
+ const OPERATE_STATUS_SUCCESS = 1;
|
|
|
+ /** @var int 操作状态:失败 */
|
|
|
+ const OPERATE_STATUS_FAILED = 2;
|
|
|
+ /** @var int 操作状态:处理中 */
|
|
|
+ const OPERATE_STATUS_PROCESSING = 3;
|
|
|
+
|
|
|
/**
|
|
|
- * 工单资料数据同步
|
|
|
+ * ERP SQL Server 表映射(请按实际 ERP 表结构填写 table 与 fields)
|
|
|
+ * fields:MES 源字段名 => ERP 目标字段名;固定值以 = 开头,如 '=M' => 'is_mfg_wrk'
|
|
|
+ * 报工 sfb_id 规则:K+年月日(同步日期)+四位自增,如 K2606100201
|
|
|
*/
|
|
|
- public function WorkOrderData()
|
|
|
+ protected $erpTableMap = [
|
|
|
+ // 1-工单数据:来源 工单_基本资料
|
|
|
+ 'work_order' => [
|
|
|
+ 'table' => 'mps_mfg_ord',
|
|
|
+ 'fields' => [
|
|
|
+ '订单编号' => 'ordno',
|
|
|
+ '=M' => 'is_mfg_wrk',
|
|
|
+ '生产款号' => 'itemno',
|
|
|
+ '接单日期' => 'cr_date',
|
|
|
+ '落货日期' => 'rel_date',
|
|
|
+ '同步日期' => 'due_date',
|
|
|
+ '订单数量' => 'qty_ord',
|
|
|
+ 'remark' => 'remark',
|
|
|
+ '计划制造工分' => 'curprc',
|
|
|
+ '=0001' => 'ocode',
|
|
|
+ ],
|
|
|
+ ],
|
|
|
+ // 2-工艺数据:来源 工单_基础工艺资料
|
|
|
+ 'process' => [
|
|
|
+ 'table' => 'mps_mfg_routing',
|
|
|
+ 'fields' => [
|
|
|
+ 'work_order' => 'ordno',
|
|
|
+ '=M' => 'is_mfg_wrk',
|
|
|
+ '生产款号' => 'itemno',
|
|
|
+ 'process_code' => 'op',
|
|
|
+ 'process_name' => 'routiname',
|
|
|
+ 'standard_score' => 'preprc',
|
|
|
+ '=0001' => 'ocode',
|
|
|
+ '订单数量' => 'qty_ord',
|
|
|
+ ],
|
|
|
+ ],
|
|
|
+ // 3-报工数据:来源工序产量核查汇总(sfb_id 按同步日期自动生成)
|
|
|
+ 'report' => [
|
|
|
+ 'table' => 'wfc_shift_feedback',
|
|
|
+ 'fields' => [
|
|
|
+ '员工编号' => 'emp_no',
|
|
|
+ '=1' => 'shift_id',
|
|
|
+ '订单编号' => 'ordno',
|
|
|
+ '生产款号' => 'itemno',
|
|
|
+ '工序号' => 'op',
|
|
|
+ '工序名称' => 'routiname',
|
|
|
+ '数量' => 'qty_comp',
|
|
|
+ '开工日期' => 'op_begdt',
|
|
|
+ '完工日期' => 'op_enddt',
|
|
|
+ '填报日期' => 'tran_date',
|
|
|
+ '=0202' => 'centerno',
|
|
|
+ '=0001.02.02' => 'detno',
|
|
|
+ '=0001' => 'ocode',
|
|
|
+ '工分' => 'preprc',
|
|
|
+ ],
|
|
|
+ ],
|
|
|
+ ];
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 完工工单列表(含同步状态)
|
|
|
+ * @ApiMethod (GET)
|
|
|
+ * @param page 页码
|
|
|
+ * @param limit 每页条数
|
|
|
+ * @param search 搜索(订单编号/款号/款式/客户)
|
|
|
+ * @param sync_status 同步状态筛选:unsynced|pending|synced|failed|cancelled
|
|
|
+ */
|
|
|
+ public function getCompletedWorkOrderList()
|
|
|
{
|
|
|
- if ($this->request->isGet() === false){
|
|
|
- $this->error('请求错误');
|
|
|
- }
|
|
|
- $db3 = Db::connect(config('database.db3'));
|
|
|
- $workOrderList = $db3->name('U8_06工单资料')
|
|
|
- ->where('MES接收时间',null)
|
|
|
- ->where('MES接收状态','0')
|
|
|
- ->where('U8插入类型','<>','关闭')
|
|
|
- ->select();
|
|
|
- if (empty($workOrderList)){
|
|
|
- $this->success('未获取新工单');
|
|
|
+ if (!$this->request->isGet()) {
|
|
|
+ $this->error('请求方法错误');
|
|
|
}
|
|
|
- $j = $m = $n =0;
|
|
|
- foreach ($workOrderList as $key=>$value){
|
|
|
- $sort = 0;
|
|
|
- if (substr($value['工单编号'],0,1) === 'Y'){
|
|
|
- $sort = 1;
|
|
|
- }else if (substr($value['工单编号'],-2) === 'JZ' || substr($value['工单编号'],-2) === 'JS'){
|
|
|
- $sort = 2;
|
|
|
+ $param = $this->request->param();
|
|
|
+ $page = max(1, (int)(isset($param['page']) ? $param['page'] : 1));
|
|
|
+ $limit = max(15, min(100, (int)(isset($param['limit']) ? $param['limit'] : 15)));
|
|
|
+
|
|
|
+ $baseWhere = function ($query) use ($param) {
|
|
|
+ $query->whereNull('Mod_rq')
|
|
|
+ ->whereNotNull('工单完工日期')
|
|
|
+ ->where('工单完工日期', '<>', '');
|
|
|
+ if (!empty($param['search'])) {
|
|
|
+ $query->where('订单编号|生产款号|客户编号|款式|工单完工日期', 'like', '%' . trim($param['search']) . '%');
|
|
|
}
|
|
|
- $code = substr($value['成品编号'],0,5);
|
|
|
- $client = \db('物料_存货结构')->where('编号',$code)->value('名称');
|
|
|
- //插入产品资料
|
|
|
- $processData = \db('产品_基本资料')
|
|
|
- ->where('产品编号',$value['成品编号'])
|
|
|
- ->count();
|
|
|
- $detail = \db('物料_存货编码')->where('物料代码',$value['成品编号'])->find();
|
|
|
- if ($processData === 0){
|
|
|
- $product = [
|
|
|
- '客户编号' => $code,
|
|
|
- '客户名称' => $client,
|
|
|
- '产品编号' => $value['成品编号'],
|
|
|
- '产品名称' => $value['成品名称'],
|
|
|
- '计量单位' => $detail['领用单位'],
|
|
|
- '状态' => '',
|
|
|
- 'U8UID' => $detail['U8UID'],
|
|
|
- '产品类别' => $detail['规格'],
|
|
|
- 'Sys_id' => '[272/超级用户]',
|
|
|
- 'Sys_rq' => date('Y-m-d H:i:s',time()),
|
|
|
- 'Mod_rq' => date('Y-m-d H:i:s',time()),
|
|
|
- ];
|
|
|
- $product['UniqID'] = \db('产品_基本资料')->order('UniqID desc')->value('UniqID')+1;
|
|
|
- $productSql = \db('产品_基本资料')->fetchSql(true)->insert($product);
|
|
|
- \db()->query($productSql);
|
|
|
+ };
|
|
|
+
|
|
|
+ $countQuery = \db('工单_基本资料');
|
|
|
+ $baseWhere($countQuery);
|
|
|
+ $total = (int)$countQuery->count();
|
|
|
+
|
|
|
+ $listQuery = \db('工单_基本资料');
|
|
|
+ $baseWhere($listQuery);
|
|
|
+ $list = $listQuery
|
|
|
+ ->field('Uniqid,订单编号,生产款号,款式,客户编号,工单完工日期,remark,gd_statu,Sys_id,Sys_rq')
|
|
|
+ ->order('工单完工日期 desc,订单编号 desc')
|
|
|
+ ->page($page, $limit)
|
|
|
+ ->select();
|
|
|
+ if (!empty($list)) {
|
|
|
+ $orderNos = array_column($list, '订单编号');
|
|
|
+ $statusMap = $this->batchResolveDisplaySyncStatus($orderNos);
|
|
|
+ foreach ($list as &$row) {
|
|
|
+ $orderNo = $row['订单编号'];
|
|
|
+ $statusInfo = isset($statusMap[$orderNo]) ? $statusMap[$orderNo] : $this->defaultDisplaySyncStatus();
|
|
|
+ $row['sync_status'] = $statusInfo['code'];
|
|
|
+ $row['sync_status_text'] = $statusInfo['text'];
|
|
|
+ $row['同步状态'] = $statusInfo['text'];
|
|
|
+ $row['last_sync_time'] = $statusInfo['sync_time'];
|
|
|
+ $row['last_sync_msg'] = $statusInfo['sync_msg'];
|
|
|
+ $row['last_sync_log_id'] = $statusInfo['sync_log_id'];
|
|
|
}
|
|
|
- //插入工单资料
|
|
|
- if (substr($value['工单编号'],0,1) === 'Y' || substr($value['工单编号'],-2) === 'JZ' || substr($value['工单编号'],-2) === 'JS'){
|
|
|
- $data = [
|
|
|
- 'Gd_gdbh' => $value['工单编号'],
|
|
|
- '行号' => $value['行号'],
|
|
|
- 'Gd_客户代号' => $code,
|
|
|
- 'Gd_客户名称' => $client,
|
|
|
- 'Gd_khdh' => $value['客户编号'],
|
|
|
- 'Gd_khmc' => $value['客户名称'],
|
|
|
- '客户料号' => $value['客户料号'],
|
|
|
- '成品代号' => $value['成品编号'],
|
|
|
- '成品名称' => $value['成品名称'],
|
|
|
- 'Gd_cpdh' => $value['产品编号'],
|
|
|
- 'Gd_cpmc' => $value['产品名称'],
|
|
|
- '产品版本号' => $value['版本号'],
|
|
|
- '销售订单号' => $value['销售订单号'],
|
|
|
- '警语版面' => $value['警语版面'],
|
|
|
- '码源数量' => substr(str_replace('.','',$value['投料数量']),0,-2),
|
|
|
- 'Gd_desc' => $value['备注'],
|
|
|
- '接单日期' => $value['接单日期'],
|
|
|
- '开单日期' => $value['开单日期'],
|
|
|
- '交货日期' => $value['交货日期'],
|
|
|
- '订单数量' => $value['订单数量'],
|
|
|
- '实际投料' => $value['投料数量'],
|
|
|
- '产品单价' => $value['产品单价'],
|
|
|
- '计量单位' => '万张',
|
|
|
- '成本考核_胶印' => 1,
|
|
|
- '成本考核_凹印' => 1,
|
|
|
- '成本考核_丝印' => 1,
|
|
|
- '成本考核_模切' => 1,
|
|
|
- '成本考核_检验' => 1,
|
|
|
- 'gd_statu' => '3-计划中',
|
|
|
- 'Sys_id' => '[1012/开单员]',
|
|
|
- 'Sys_rq' => date('Y-m-d H:i:s',time()),
|
|
|
- 'Mod_rq' => date('Y-m-d H:i:s',time()),
|
|
|
- 'U8UID' => $value['U8_UID'],
|
|
|
- 'Uniqid' => $value['UniqId'],
|
|
|
- '工单分类' => $sort
|
|
|
- ];
|
|
|
- $workOrderdata = \db('工单_基本资料')
|
|
|
- ->where('U8UID',$value['U8_UID'])
|
|
|
- ->count();
|
|
|
- if ($workOrderdata === 0){
|
|
|
- $addSql = \db('工单_基本资料')->fetchSql(true)->insert($data);
|
|
|
- $result = \db()->query($addSql);
|
|
|
- if ($result === false){
|
|
|
- $m++;
|
|
|
- }else{
|
|
|
- $sqlString = $db3->name('U8_06工单资料')
|
|
|
- ->where('UniqId', $value['UniqId'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
- }
|
|
|
- }else{
|
|
|
- unset($data['Uniqid']);
|
|
|
- $updateSql = \db('工单_基本资料')->where('U8UID',$value['U8_UID'])->fetchSql(true)->update($data);
|
|
|
- $updateRes = \db()->query($updateSql);
|
|
|
- if ($updateRes === false){
|
|
|
- $j++;
|
|
|
- }else{
|
|
|
- $sqlString = $db3->name('U8_06工单资料')
|
|
|
- ->where('UniqId', $value['UniqId'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
- }
|
|
|
- }
|
|
|
+ unset($row);
|
|
|
+
|
|
|
+ if (!empty($param['sync_status'])) {
|
|
|
+ $filter = $param['sync_status'];
|
|
|
+ $list = array_values(array_filter($list, function ($row) use ($filter) {
|
|
|
+ return $row['sync_status'] === $filter;
|
|
|
+ }));
|
|
|
}
|
|
|
}
|
|
|
- if ($j !== 0 || $m !==0 || $n !== 0){
|
|
|
- $this->error('工单资料同步失败');
|
|
|
- }else{
|
|
|
- $this->success('工单资料同步成功');
|
|
|
- }
|
|
|
+
|
|
|
+ $this->success('成功', [
|
|
|
+ 'total' => $total,
|
|
|
+ 'page' => $page,
|
|
|
+ 'limit' => $limit,
|
|
|
+ 'list' => $list ?: [],
|
|
|
+ ]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 工单bom资料同步
|
|
|
+ * 同步到 ERP
|
|
|
+ * @ApiMethod (POST)
|
|
|
+ * @param work_order_no 工单编号
|
|
|
+ * @param sync_module 1-工单 2-工艺 3-报工 4-全量
|
|
|
+ * @param operator 操作人
|
|
|
+ * @param operate_source backend|api|crontab,默认 backend
|
|
|
+ * @param operate_type sync|manual|auto,默认 manual
|
|
|
*/
|
|
|
+ public function syncWorkOrder()
|
|
|
+ {
|
|
|
+ $this->executeSync('sync');
|
|
|
+ }
|
|
|
|
|
|
- public function WorkOrderBomData()
|
|
|
+ /**
|
|
|
+ * 重试同步(仅上次失败时可重试)
|
|
|
+ * @ApiMethod (POST)
|
|
|
+ */
|
|
|
+ public function retrySyncWorkOrder()
|
|
|
{
|
|
|
- if ($this->request->isGet() === false){
|
|
|
- $this->error('请求错误');
|
|
|
+ $params = $this->request->post();
|
|
|
+ $workOrderNo = isset($params['work_order_no']) ? trim($params['work_order_no']) : '';
|
|
|
+ if ($workOrderNo === '') {
|
|
|
+ $this->error('工单编号不能为空');
|
|
|
}
|
|
|
- $db3 = Db::connect(config('database.db3'));
|
|
|
- $BomDataList = $db3->name('U8_09工单bom')
|
|
|
- ->where('MES接收时间',null)
|
|
|
- ->where('MES接收状态','0')
|
|
|
- ->order('U8传递时间 desc')
|
|
|
- ->select();
|
|
|
- if (empty($BomDataList)){
|
|
|
- $this->success('未找到新工单BOM');
|
|
|
- }
|
|
|
- $j = $m = 0;
|
|
|
- foreach ($BomDataList as $key=>$value){
|
|
|
- $res = \db('工单_bom资料')->where('U8UID',$value['U8_UID'])->count();
|
|
|
- if (preg_match("/[A-Za-z]/",$value['BOM_工单编号'])){
|
|
|
- $workcode = $value['BOM_工单编号'];
|
|
|
- }else{
|
|
|
- $workcode = 'Y'.$value['BOM_工单编号'];
|
|
|
- }
|
|
|
- $data = [
|
|
|
- 'BOM_方案' => '工单评审定案',
|
|
|
- 'BOM_工单编号' => $workcode,
|
|
|
- 'BOM_版本' => $value['BOM_版本'],
|
|
|
- 'BOM_工单行号' => $value['BOM_工单行号'],
|
|
|
- 'BOM_行号' => $value['BOM_行号'],
|
|
|
- 'BOM_产品编号' => $value['BOM_产品编号'],
|
|
|
- 'BOM_物料编码' => $value['BOM_物料编码'],
|
|
|
- 'BOM_物料名称' => $value['BOM_物料名称'],
|
|
|
- 'BOM_投料单位' => $value['BOM_投料单位'],
|
|
|
- 'BOM_投入数' => $value['BOM_投入数'],
|
|
|
- 'BOM_产出数' => $value['BOM_产出数'],
|
|
|
- 'BOM_产出单位' => $value['BOM_产出单位'],
|
|
|
- 'BOM_标准用量' => $value['BOM_标准用量'],
|
|
|
- 'BOM_实际用量' => $value['BOM_实际用量'],
|
|
|
- 'BOM_计划用量' => $value['BOM_计划用量'],
|
|
|
- 'BOM_核算价格' => 0,
|
|
|
- 'Bom_领用工序' => '01-01',
|
|
|
- 'BOM_备注' => $value['BOM_备注'],
|
|
|
- 'Mod_rq' => date('Y-m-d H:i:s',time()),
|
|
|
- 'U8UID' => $value['U8_UID'],
|
|
|
- 'UNIQID' => $value['UNIQID']
|
|
|
- ];
|
|
|
- if ($res === 0){
|
|
|
- $addSql = \db('工单_bom资料')->fetchSql(true)->insert($data);
|
|
|
- $addRes = \db()->query($addSql);
|
|
|
- if ($addRes === false){
|
|
|
- $m++;
|
|
|
- }else{
|
|
|
- $sqlString = $db3->name('U8_09工单bom')
|
|
|
- ->where('UNIQID', $value['UNIQID'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
- }
|
|
|
- }else{
|
|
|
- unset($data['UNIQID']);
|
|
|
- $updateSql = \db('工单_bom资料')
|
|
|
- ->where('U8UID',$value['U8_UID'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update($data);
|
|
|
- $updateRes = \db()->query($updateSql);
|
|
|
- if ($updateRes === false){
|
|
|
- $j++;
|
|
|
- }else{
|
|
|
- $sqlString = $db3->name('U8_09工单bom')
|
|
|
- ->where('UNIQID', $value['UNIQID'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if ($j !== 0 || $m !== 0){
|
|
|
- $this->error('工单BOM资料同步失败');
|
|
|
- }else{
|
|
|
- $this->success('工单BOM资料同步成功');
|
|
|
+ $statusInfo = $this->resolveDisplaySyncStatus($workOrderNo);
|
|
|
+ if ($statusInfo['code'] !== 'failed') {
|
|
|
+ $this->error('仅同步失败的工单可重试');
|
|
|
}
|
|
|
+ $this->executeSync('retry');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 存货结构数据同步
|
|
|
+ * 撤回同步
|
|
|
+ * @ApiMethod (POST)
|
|
|
+ * @param work_order_no 工单编号
|
|
|
+ * @param operator 操作人
|
|
|
+ * @param reason 撤回原因
|
|
|
*/
|
|
|
-
|
|
|
- public function MaterialRequisitionData()
|
|
|
+ public function cancelSyncWorkOrder()
|
|
|
{
|
|
|
- if ($this->request->isGet() === false){
|
|
|
- $this->error('请求错误');
|
|
|
+ if (!$this->request->isPost()) {
|
|
|
+ $this->error('请求方法错误');
|
|
|
}
|
|
|
- $db3 = \db()->connect(config('database.db3'));
|
|
|
- $MaterialDataList = $db3->name('U8_11存货结构')
|
|
|
- ->where('MES接收时间',null)
|
|
|
- ->where('MES接收状态','0')
|
|
|
- ->select();
|
|
|
- if (empty($MaterialDataList)){
|
|
|
- $this->success('未找到新的物料存货结构');
|
|
|
+ $params = $this->request->post();
|
|
|
+ $workOrderNo = isset($params['work_order_no']) ? trim($params['work_order_no']) : '';
|
|
|
+ $operator = isset($params['operator']) ? trim($params['operator']) : '';
|
|
|
+ $reason = isset($params['reason']) ? trim($params['reason']) : '';
|
|
|
+
|
|
|
+ if ($workOrderNo === '') {
|
|
|
+ $this->error('工单编号不能为空');
|
|
|
+ }
|
|
|
+ if ($operator === '') {
|
|
|
+ $this->error('操作人不能为空');
|
|
|
}
|
|
|
- $i = 0;
|
|
|
- foreach ($MaterialDataList as $key=>$value){
|
|
|
- $data = [
|
|
|
- '编号' => $value['编号'],
|
|
|
- '名称' => $value['名称'],
|
|
|
- 'Sys_id' => '[272/超级用户]',
|
|
|
- 'Sys_rq' => date('Y-m-d H:i:s',time()),
|
|
|
- 'Mod_rq' => date('Y-m-d H:i:s',time()),
|
|
|
- 'U8UID' => $value['U8_UID'],
|
|
|
- 'UniqId' => $value['UniqId']
|
|
|
- ];
|
|
|
- if ($value['U8插入类型'] === '新增'){
|
|
|
- $sql = \db('物料_存货结构')->fetchSql(true)->insert($data);
|
|
|
- $res = \db()->query($sql);
|
|
|
- if ($res === false){
|
|
|
- $i++;
|
|
|
- }else{
|
|
|
- $sqlString = $db3->name('U8_11存货结构')
|
|
|
- ->where('UniqId', $value['UniqId'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
- }
|
|
|
- }else{
|
|
|
- $sql = \db('物料_存货结构')
|
|
|
- ->fetchSql(true)
|
|
|
- ->where('U8UID',$value['U8_UID'])
|
|
|
- ->update($data);
|
|
|
- $res = \db()->query($sql);
|
|
|
- if ($res === false){
|
|
|
- $i++;
|
|
|
- }else{
|
|
|
-
|
|
|
- $sqlString = $db3->name('U8_11存货结构')
|
|
|
- ->where('UniqId', $value['UniqId'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
|
|
|
- }
|
|
|
- }
|
|
|
+ $workOrder = $this->fetchWorkOrderBasic($workOrderNo);
|
|
|
+ if (empty($workOrder)) {
|
|
|
+ $this->error('工单不存在');
|
|
|
}
|
|
|
- if ($i !== 0){
|
|
|
- $this->error('存货结构同步失败');
|
|
|
- }else{
|
|
|
- $this->success('存货结构同步成功');
|
|
|
+
|
|
|
+ $statusInfo = $this->resolveDisplaySyncStatus($workOrderNo);
|
|
|
+ if ($statusInfo['code'] !== 'synced') {
|
|
|
+ $this->error('仅已同步的工单可撤回');
|
|
|
}
|
|
|
+
|
|
|
+ $operTime = date('Y-m-d H:i:s');
|
|
|
+ $operateParam = json_encode([
|
|
|
+ 'work_order_no' => $workOrderNo,
|
|
|
+ 'reason' => $reason,
|
|
|
+ ], JSON_UNESCAPED_UNICODE);
|
|
|
+ $operateContent = '撤回同步工单' . $workOrderNo . ($reason !== '' ? ',原因:' . $reason : '');
|
|
|
+
|
|
|
+ $operationLogId = $this->insertOperationLog([
|
|
|
+ 'operate_type' => 'cancel',
|
|
|
+ 'operate_user' => $operator,
|
|
|
+ 'operate_user_name' => isset($params['operate_user_name']) ? $params['operate_user_name'] : $operator,
|
|
|
+ 'operate_time' => $operTime,
|
|
|
+ 'sync_log_id' => $statusInfo['sync_log_id'],
|
|
|
+ 'work_order_no' => $workOrderNo,
|
|
|
+ 'style_no' => $workOrder['生产款号'],
|
|
|
+ 'operate_content' => $operateContent,
|
|
|
+ 'operate_param' => $operateParam,
|
|
|
+ 'operate_status' => self::OPERATE_STATUS_PROCESSING,
|
|
|
+ 'operate_source' => isset($params['operate_source']) ? $params['operate_source'] : 'backend',
|
|
|
+ 'operate_ip' => $this->request->ip(),
|
|
|
+ 'server_ip' => isset($_SERVER['SERVER_ADDR']) ? $_SERVER['SERVER_ADDR'] : '',
|
|
|
+ ]);
|
|
|
+
|
|
|
+ Db::startTrans();
|
|
|
+ try {
|
|
|
+ $this->deleteErpDataByWorkOrder($workOrderNo);
|
|
|
+
|
|
|
+ Db::name('mes_erp_operation_log')
|
|
|
+ ->where('id', $operationLogId)
|
|
|
+ ->update([
|
|
|
+ 'operate_status' => self::OPERATE_STATUS_SUCCESS,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ if (!empty($statusInfo['sync_log_id'])) {
|
|
|
+ Db::name('mes_erp_work_order_sync_log')
|
|
|
+ ->where('id', $statusInfo['sync_log_id'])
|
|
|
+ ->update([
|
|
|
+ 'sync_msg' => '已撤回' . ($reason !== '' ? ':' . $reason : ''),
|
|
|
+ 'update_time' => $operTime,
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+
|
|
|
+ Db::commit();
|
|
|
+ } catch (HttpResponseException $e) {
|
|
|
+ throw $e;
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Db::rollback();
|
|
|
+ Db::name('mes_erp_operation_log')
|
|
|
+ ->where('id', $operationLogId)
|
|
|
+ ->update([
|
|
|
+ 'operate_status' => self::OPERATE_STATUS_FAILED,
|
|
|
+ 'error_msg' => $e->getMessage(),
|
|
|
+ ]);
|
|
|
+ $this->error('撤回失败:' . $e->getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->success('撤回成功');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 人事基本资料同步
|
|
|
- * @return void
|
|
|
- * @throws \think\Exception
|
|
|
- * @throws \think\db\exception\BindParamException
|
|
|
- * @throws \think\db\exception\DataNotFoundException
|
|
|
- * @throws \think\db\exception\ModelNotFoundException
|
|
|
- * @throws \think\exception\DbException
|
|
|
- * @throws \think\exception\PDOException
|
|
|
+ * 同步日志列表
|
|
|
+ * @ApiMethod (GET)
|
|
|
+ * @param work_order_no 工单编号
|
|
|
*/
|
|
|
- public function PersonnelData()
|
|
|
+ public function getSyncLogList()
|
|
|
{
|
|
|
- //拼音类
|
|
|
- $pinyin = new Pinyin\Pinyin();
|
|
|
- if ($this->request->isGet() === false){
|
|
|
- $this->error('请求错误');
|
|
|
+ if (!$this->request->isGet()) {
|
|
|
+ $this->error('请求方法错误');
|
|
|
}
|
|
|
- $db3 = \db()->connect(config('database.db3'));
|
|
|
- $PersonnelDataList = $db3->name('U8_02人事资料')
|
|
|
- ->where('MES接收时间',null)
|
|
|
- ->where('MES接收状态','0')
|
|
|
+ $workOrderNo = trim($this->request->param('work_order_no', ''));
|
|
|
+ if ($workOrderNo === '') {
|
|
|
+ $this->error('工单编号不能为空');
|
|
|
+ }
|
|
|
+
|
|
|
+ $list = Db::name('mes_erp_work_order_sync_log')
|
|
|
+ ->where('work_order_no', $workOrderNo)
|
|
|
+ ->order('id desc')
|
|
|
->select();
|
|
|
- if (empty($PersonnelDataList)){
|
|
|
- $this->success('未找到新的人事资料');
|
|
|
+
|
|
|
+ foreach ($list as &$row) {
|
|
|
+ $row['sync_status_text'] = $this->syncStatusText($row['sync_status']);
|
|
|
+ $row['sync_module_text'] = $this->syncModuleText($row['sync_module']);
|
|
|
}
|
|
|
- $i = 0;
|
|
|
- foreach ($PersonnelDataList as $key=>$value){
|
|
|
- //获取姓名首字母
|
|
|
- $pycode = $pinyin->abbr($value['员工姓名']);
|
|
|
- $nameCode = strtoupper($pycode);
|
|
|
- $data = [
|
|
|
- '工卡编号'=>'',
|
|
|
- '卡钟设定'=>'',
|
|
|
- '打卡设置'=>'',
|
|
|
- '员工编号'=>$value['员工编号'],
|
|
|
- '员工姓名'=>$value['员工姓名'],
|
|
|
- '性别'=>$value['性别'],
|
|
|
- '聘用日期'=>$value['聘用日期'],
|
|
|
- '转正日期'=>$value['转正日期'],
|
|
|
- 'U8离职日期'=>$value['离职日期'],
|
|
|
- 'MES离职日期'=>$value['离职日期'],
|
|
|
- '扣减司龄'=>0,
|
|
|
- '部门编码'=>$value['部门编码'],
|
|
|
- '所在部门'=>$value['所在部门'],
|
|
|
- '人员类别'=>$value['人员类别'],
|
|
|
- '人员性质'=>$value['人员性质'],
|
|
|
- '班次类型'=>'',
|
|
|
- '标准工时制'=>'',
|
|
|
- '职称职务'=>$value['职称职务'],
|
|
|
- '薪资级别'=>$value['级别'],
|
|
|
- '工资表类别'=>'',
|
|
|
- '基本工资'=>'',
|
|
|
- '绩效工资1'=>'',
|
|
|
- '绩效工资2'=>'',
|
|
|
- '技能工资'=>'',
|
|
|
- '岗位津贴'=>'',
|
|
|
- '竞业补贴'=>'',
|
|
|
- '专业技术津贴'=>'',
|
|
|
- '技工技师津贴'=>'',
|
|
|
- '特殊工种津贴'=>'',
|
|
|
- '各类奖项津贴'=>'',
|
|
|
- '职危津贴'=>'',
|
|
|
- '夜班津贴'=>'',
|
|
|
- '全勤津贴'=>'',
|
|
|
- '住房津贴'=>'',
|
|
|
- '高温津贴'=>'',
|
|
|
- '用餐津贴'=>'',
|
|
|
- '司龄津贴'=>'',
|
|
|
- '联系电话'=>$value['联系电话'],
|
|
|
- '合同类型'=>'',
|
|
|
- '合同起始日期'=>'1900-01-01 00:00:00',
|
|
|
- '合同终止日期'=>'1900-01-01 00:00:00',
|
|
|
- '合同备注'=>'',
|
|
|
- '出生日期'=>$value['出生日期'],
|
|
|
- 'pycode'=>$nameCode,
|
|
|
- '籍贯'=>'',
|
|
|
- '民族'=>'',
|
|
|
- '身份证号'=>$value['身份证号'],
|
|
|
- '证件有效日期'=>'1900-01-01 00:00:00',
|
|
|
- '发证机关'=>'',
|
|
|
- '家庭住址'=>'',
|
|
|
- '学历'=>'',
|
|
|
- '婚姻状况'=>'',
|
|
|
- '社保开始日期'=>'1900-01-01 00:00:00',
|
|
|
- '开户银行'=>$value['开户银行'],
|
|
|
- '开户账号'=>$value['开户账号'],
|
|
|
- '存折办理日期'=>'1900-01-01 00:00:00',
|
|
|
- '紧急电话'=>'',
|
|
|
- '照片ID'=>'',
|
|
|
- '在职状态'=>$value['在职状态'],
|
|
|
- 'U8在职'=>$value['在职状态'],
|
|
|
- '薪酬核算分组'=>'',
|
|
|
- '考勤类型'=>'',
|
|
|
- '班组代号'=>'',
|
|
|
- 'sys_id'=>'[272/超级用户]',
|
|
|
- 'sys_rq'=>date('Y-m-d H:i:s',time()),
|
|
|
- 'mod_rq'=>'1900-01-01 00:00:00',
|
|
|
- 'U8UID'=>$value['U8_UID'],
|
|
|
- 'UniqID'=>$value['UniqId']
|
|
|
- ];
|
|
|
- $number = \db('人事_基本资料')
|
|
|
- ->where('U8UID',$value['U8_UID'])
|
|
|
- ->count();
|
|
|
- if ($number === 0){
|
|
|
- $sql = \db('人事_基本资料')->fetchSql(true)->insert($data);
|
|
|
- $res = \db()->query($sql);
|
|
|
- if ($res === false){
|
|
|
- $i++;
|
|
|
- }else{
|
|
|
- $sqlString = $db3->name('U8_02人事资料')
|
|
|
- ->where('UniqId', $value['UniqId'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
- }
|
|
|
- }else{
|
|
|
- $sql = \db('人事_基本资料')
|
|
|
- ->fetchSql(true)
|
|
|
- ->where('U8UID',$value['U8_UID'])
|
|
|
- ->update($data);
|
|
|
- $res = \db()->query($sql);
|
|
|
- if ($res === false){
|
|
|
- $i++;
|
|
|
- }else{
|
|
|
-
|
|
|
- $sqlString = $db3->name('U8_02人事资料')
|
|
|
- ->where('UniqId', $value['UniqId'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
+ unset($row);
|
|
|
|
|
|
- }
|
|
|
- }
|
|
|
+ $this->success('成功', $list ?: []);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 操作过程记录列表
|
|
|
+ * @ApiMethod (GET)
|
|
|
+ * @param work_order_no 工单编号
|
|
|
+ * @param sync_log_id 同步日志ID(可选)
|
|
|
+ */
|
|
|
+ public function getOperationLogList()
|
|
|
+ {
|
|
|
+ if (!$this->request->isGet()) {
|
|
|
+ $this->error('请求方法错误');
|
|
|
+ }
|
|
|
+ $workOrderNo = trim($this->request->param('work_order_no', ''));
|
|
|
+ $syncLogId = $this->request->param('sync_log_id');
|
|
|
+
|
|
|
+ $query = Db::name('mes_erp_operation_log')->order('id desc');
|
|
|
+ if ($workOrderNo !== '') {
|
|
|
+ $query->where('work_order_no', $workOrderNo);
|
|
|
+ }
|
|
|
+ if ($syncLogId !== null && $syncLogId !== '') {
|
|
|
+ $query->where('sync_log_id', intval($syncLogId));
|
|
|
}
|
|
|
- if ($i !== 0){
|
|
|
- $this->error('人事资料同步失败');
|
|
|
- }else{
|
|
|
- $this->success('人事资料同步成功');
|
|
|
+ if ($workOrderNo === '' && ($syncLogId === null || $syncLogId === '')) {
|
|
|
+ $this->error('请传入 work_order_no 或 sync_log_id');
|
|
|
+ }
|
|
|
+
|
|
|
+ $list = $query->select();
|
|
|
+ foreach ($list as &$row) {
|
|
|
+ $row['operate_status_text'] = $this->operateStatusText($row['operate_status']);
|
|
|
}
|
|
|
+ unset($row);
|
|
|
+
|
|
|
+ $this->success('成功', $list ?: []);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 人事组织结构
|
|
|
- * @return void
|
|
|
- * @throws \think\Exception
|
|
|
- * @throws \think\db\exception\BindParamException
|
|
|
- * @throws \think\db\exception\DataNotFoundException
|
|
|
- * @throws \think\db\exception\ModelNotFoundException
|
|
|
- * @throws \think\exception\DbException
|
|
|
- * @throws \think\exception\PDOException
|
|
|
+ * 执行同步核心逻辑
|
|
|
+ * @param string $operateType sync|retry|manual|auto
|
|
|
*/
|
|
|
- public function OrganizationalStructureData()
|
|
|
+ private function executeSync($operateType)
|
|
|
{
|
|
|
- if ($this->request->isGet() === false){
|
|
|
- $this->error('请求错误');
|
|
|
+ if (!$this->request->isPost()) {
|
|
|
+ $this->error('请求方法错误');
|
|
|
}
|
|
|
- $db3 = \db()->connect(config('database.db3'));
|
|
|
- $OrganizationalDataList = $db3->name('U8_01组织结构')
|
|
|
- ->where('MES接收时间',null)
|
|
|
- ->where('MES接收状态','0')
|
|
|
- ->select();
|
|
|
- if (empty($OrganizationalDataList)){
|
|
|
- $this->success('未找到新的组织结构');
|
|
|
+ $params = $this->request->post();
|
|
|
+ $workOrderNo = isset($params['work_order_no']) ? trim($params['work_order_no']) : '';
|
|
|
+ $syncModule = isset($params['sync_module']) ? (string)$params['sync_module'] : '4';
|
|
|
+ $operator = isset($params['operator']) ? trim($params['operator']) : '';
|
|
|
+
|
|
|
+ if ($workOrderNo === '') {
|
|
|
+ $this->error('工单编号不能为空');
|
|
|
+ }
|
|
|
+ if ($operator === '') {
|
|
|
+ $this->error('操作人不能为空');
|
|
|
+ }
|
|
|
+ if (!in_array($syncModule, ['1', '2', '3', '4'], true)) {
|
|
|
+ $this->error('同步模块参数错误');
|
|
|
}
|
|
|
- $i = 0;
|
|
|
- foreach ($OrganizationalDataList as $key=>$value){
|
|
|
- $data = [
|
|
|
- '编号'=>$value['编号'],
|
|
|
- '名称'=>$value['名称'],
|
|
|
- '状态'=>$value['状态'],
|
|
|
- 'Sys_id'=>'[272/超级用户]',
|
|
|
- 'Sys_rq'=>date('Y-m-d H:i:s',time()),
|
|
|
- 'Mod_rq'=>'1900-01-01 00:00:00',
|
|
|
- 'U8UID'=>$value['U8_UID'],
|
|
|
- 'UNIQID'=>$value['UniqId'],
|
|
|
- ];
|
|
|
- $number = \db('人事_组织结构')
|
|
|
- ->where('U8UID',$value['U8_UID'])
|
|
|
- ->count();
|
|
|
- if ($number === 0){
|
|
|
- $sql = \db('人事_组织结构')->fetchSql(true)->insert($data);
|
|
|
- $res = \db()->query($sql);
|
|
|
- if ($res === false){
|
|
|
- $i++;
|
|
|
- }else{
|
|
|
- $sqlString = $db3->name('U8_01组织结构')
|
|
|
- ->where('UniqId', $value['UniqId'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
- }
|
|
|
- }else{
|
|
|
- $sql = \db('人事_组织结构')
|
|
|
- ->fetchSql(true)
|
|
|
- ->where('U8UID',$value['U8_UID'])
|
|
|
- ->update($data);
|
|
|
- $res = \db()->query($sql);
|
|
|
- if ($res === false){
|
|
|
- $i++;
|
|
|
- }else{
|
|
|
-
|
|
|
- $sqlString = $db3->name('U8_01组织结构')
|
|
|
- ->where('UniqId', $value['UniqId'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
|
|
|
- }
|
|
|
- }
|
|
|
+ $workOrder = $this->fetchWorkOrderBasic($workOrderNo);
|
|
|
+ if (empty($workOrder)) {
|
|
|
+ $this->error('工单不存在');
|
|
|
+ }
|
|
|
+ if (empty($workOrder['工单完工日期'])) {
|
|
|
+ $this->error('该工单尚未完工,不能同步');
|
|
|
}
|
|
|
- if ($i !== 0){
|
|
|
- $this->error('人事组织结构同步失败');
|
|
|
- }else{
|
|
|
- $this->success('人事组织结构同步成功');
|
|
|
+
|
|
|
+ $operTime = date('Y-m-d H:i:s');
|
|
|
+ $operateSource = isset($params['operate_source']) ? $params['operate_source'] : 'backend';
|
|
|
+ $requestOperateType = isset($params['operate_type']) ? $params['operate_type'] : 'manual';
|
|
|
+ if ($operateType === 'retry') {
|
|
|
+ $requestOperateType = 'retry';
|
|
|
+ }
|
|
|
+
|
|
|
+ $operateParam = json_encode([
|
|
|
+ 'work_order_no' => $workOrderNo,
|
|
|
+ 'sync_module' => $syncModule,
|
|
|
+ 'operator' => $operator,
|
|
|
+ ], JSON_UNESCAPED_UNICODE);
|
|
|
+
|
|
|
+ $operationLogId = $this->insertOperationLog([
|
|
|
+ 'operate_type' => $requestOperateType,
|
|
|
+ 'operate_user' => $operator,
|
|
|
+ 'operate_user_name' => isset($params['operate_user_name']) ? $params['operate_user_name'] : $operator,
|
|
|
+ 'operate_time' => $operTime,
|
|
|
+ 'sync_log_id' => null,
|
|
|
+ 'work_order_no' => $workOrderNo,
|
|
|
+ 'style_no' => $workOrder['生产款号'],
|
|
|
+ 'operate_content' => $this->buildSyncOperateContent($workOrderNo, $syncModule, $requestOperateType),
|
|
|
+ 'operate_param' => $operateParam,
|
|
|
+ 'operate_status' => self::OPERATE_STATUS_PROCESSING,
|
|
|
+ 'operate_source' => $operateSource,
|
|
|
+ 'operate_ip' => $this->request->ip(),
|
|
|
+ 'server_ip' => isset($_SERVER['SERVER_ADDR']) ? $_SERVER['SERVER_ADDR'] : '',
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $seqRange = $this->fetchReportSeqRange($workOrderNo);
|
|
|
+ $syncLogId = $this->insertSyncLog([
|
|
|
+ 'work_order_no' => $workOrderNo,
|
|
|
+ 'style_no' => $workOrder['生产款号'],
|
|
|
+ 'complete_date' => $this->formatDateValue($workOrder['工单完工日期']),
|
|
|
+ 'operator' => $operator,
|
|
|
+ 'sync_time' => $operTime,
|
|
|
+ 'report_start_seq' => $seqRange['start'],
|
|
|
+ 'report_end_seq' => $seqRange['end'],
|
|
|
+ 'sync_status' => self::SYNC_STATUS_PENDING,
|
|
|
+ 'sync_module' => $syncModule,
|
|
|
+ 'sync_msg' => '同步处理中',
|
|
|
+ 'erp_sync_id' => '',
|
|
|
+ ]);
|
|
|
+
|
|
|
+ Db::name('mes_erp_operation_log')
|
|
|
+ ->where('id', $operationLogId)
|
|
|
+ ->update(['sync_log_id' => $syncLogId]);
|
|
|
+
|
|
|
+ try {
|
|
|
+ $erpSyncId = $this->pushDataToErp($workOrderNo, $syncModule, $workOrder);
|
|
|
+ Db::name('mes_erp_work_order_sync_log')
|
|
|
+ ->where('id', $syncLogId)
|
|
|
+ ->update([
|
|
|
+ 'sync_status' => self::SYNC_STATUS_SUCCESS,
|
|
|
+ 'sync_msg' => '同步成功',
|
|
|
+ 'erp_sync_id' => $erpSyncId,
|
|
|
+ 'update_time' => date('Y-m-d H:i:s'),
|
|
|
+ ]);
|
|
|
+ Db::name('mes_erp_operation_log')
|
|
|
+ ->where('id', $operationLogId)
|
|
|
+ ->update(['operate_status' => self::OPERATE_STATUS_SUCCESS]);
|
|
|
+ } catch (HttpResponseException $e) {
|
|
|
+ throw $e;
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Db::name('mes_erp_work_order_sync_log')
|
|
|
+ ->where('id', $syncLogId)
|
|
|
+ ->update([
|
|
|
+ 'sync_status' => self::SYNC_STATUS_FAILED,
|
|
|
+ 'sync_msg' => $e->getMessage(),
|
|
|
+ 'update_time' => date('Y-m-d H:i:s'),
|
|
|
+ ]);
|
|
|
+ Db::name('mes_erp_operation_log')
|
|
|
+ ->where('id', $operationLogId)
|
|
|
+ ->update([
|
|
|
+ 'operate_status' => self::OPERATE_STATUS_FAILED,
|
|
|
+ 'error_msg' => $e->getMessage(),
|
|
|
+ ]);
|
|
|
+ $this->error('同步失败:' . $e->getMessage());
|
|
|
}
|
|
|
+
|
|
|
+ $this->success('同步成功', [
|
|
|
+ 'sync_log_id' => $syncLogId,
|
|
|
+ 'operation_log_id' => $operationLogId,
|
|
|
+ ]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 物料存货编码数据同步
|
|
|
- * @return void
|
|
|
- * @throws \think\Exception
|
|
|
- * @throws \think\db\exception\BindParamException
|
|
|
- * @throws \think\db\exception\DataNotFoundException
|
|
|
- * @throws \think\db\exception\ModelNotFoundException
|
|
|
- * @throws \think\exception\DbException
|
|
|
- * @throws \think\exception\PDOException
|
|
|
+ * 推送数据到 ERP(db2 / SQL Server)
|
|
|
+ * @param string $workOrderNo
|
|
|
+ * @param string $syncModule
|
|
|
+ * @param array $workOrder
|
|
|
+ * @return string ERP 同步标识
|
|
|
+ * @throws \Exception
|
|
|
*/
|
|
|
- public function InventoryCodeData()
|
|
|
+ private function pushDataToErp($workOrderNo, $syncModule, $workOrder)
|
|
|
{
|
|
|
- if ($this->request->isGet() === false){
|
|
|
- $this->error('请求错误');
|
|
|
- }
|
|
|
- $db3 = \db()->connect(config('database.db3'));
|
|
|
- $OrganizationalDataList = $db3->name('U8_04物料编码')
|
|
|
- ->where('MES接收时间',null)
|
|
|
- ->where('MES接收状态','0')
|
|
|
- ->select();
|
|
|
- if (empty($OrganizationalDataList)){
|
|
|
- $this->success('未找到新的物料编码');
|
|
|
- }
|
|
|
- $i = 0;
|
|
|
- foreach ($OrganizationalDataList as $key=>$value){
|
|
|
- $code = substr($value['物料代码'],0,3);
|
|
|
- if ($code === 'Y10' || $code === 'Y14' || $code === 'Y12'){
|
|
|
- //插入产品资料
|
|
|
- $productData = \db('产品_基本资料')
|
|
|
- ->where('产品编号',$value['物料代码'])
|
|
|
- ->count();
|
|
|
- $clientCode = substr($value['物料代码'],0,5);
|
|
|
- $clientName = \db('物料_存货结构')->where('编号',$clientCode)->value('rtrim(名称)');
|
|
|
- $product = [
|
|
|
- '客户编号' => $clientCode,
|
|
|
- '客户名称' => $clientName,
|
|
|
- '产品编号' => $value['物料代码'],
|
|
|
- '产品名称' => $value['物料名称'],
|
|
|
- '计量单位' => $value['领用单位'],
|
|
|
- '状态' => '',
|
|
|
- 'U8UID' => $value['U8_UID'],
|
|
|
- '产品类别' => $value['规格'],
|
|
|
- 'Sys_id' => '[272/超级用户]',
|
|
|
- 'Sys_rq' => date('Y-m-d H:i:s',time()),
|
|
|
- 'Mod_rq' => date('Y-m-d H:i:s',time()),
|
|
|
- ];
|
|
|
- if ($productData === 0){
|
|
|
- $product['UniqID'] = \db('产品_基本资料')->order('UniqID desc')->value('UniqID')+1;
|
|
|
- $productSql = \db('产品_基本资料')->fetchSql(true)->insert($product);
|
|
|
- }else{
|
|
|
- $productSql = \db('产品_基本资料')->where('产品编号',$value['物料代码'])->fetchSql(true)->update($product);
|
|
|
- }
|
|
|
- $productRes = \db()->query($productSql);
|
|
|
- }
|
|
|
- $data = [
|
|
|
- '物料代码'=>$value['物料代码'],
|
|
|
- '物料名称'=>$value['物料名称'],
|
|
|
- '规格'=>$value['规格'],
|
|
|
- '采购单位'=>$value['采购单位'],
|
|
|
- '领用单位'=>$value['领用单位'],
|
|
|
- '单位换算率'=>$value['单位换算率'],
|
|
|
- '单价'=>$value['单价'],
|
|
|
- '币种'=>$value['币种'],
|
|
|
- '物料备注'=>$value['物料备注'],
|
|
|
- '状态'=>$value['状态'],
|
|
|
- 'Sys_id'=>'[272/超级用户]',
|
|
|
- 'Sys_rq'=>date('Y-m-d H:i:s',time()),
|
|
|
- 'Mod_rq'=>'1900-01-01 00:00:00',
|
|
|
- 'U8UID'=>$value['U8_UID'],
|
|
|
- 'UniqId'=>$value['UniqId'],
|
|
|
- ];
|
|
|
- $number = \db('物料_存货编码')
|
|
|
- ->where('U8UID',$value['U8_UID'])
|
|
|
- ->count();
|
|
|
- if ($number === 0){
|
|
|
- $sql = \db('物料_存货编码')->fetchSql(true)->insert($data);
|
|
|
- $res = \db()->query($sql);
|
|
|
- if ($res === false){
|
|
|
- $i++;
|
|
|
- }else{
|
|
|
- $sqlString = $db3->name('U8_04物料编码')
|
|
|
- ->where('UniqId', $value['UniqId'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
- }
|
|
|
- }else{
|
|
|
- $sql = \db('物料_存货编码')
|
|
|
- ->fetchSql(true)
|
|
|
- ->where('U8UID',$value['U8_UID'])
|
|
|
- ->update($data);
|
|
|
- $res = \db()->query($sql);
|
|
|
- if ($res === false){
|
|
|
- $i++;
|
|
|
- }else{
|
|
|
- $sqlString = $db3->name('U8_04物料编码')
|
|
|
- ->where('UniqId', $value['UniqId'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
+ $erpDb = $this->getErpDb();
|
|
|
+ $modules = $syncModule === '4' ? ['1', '2', '3'] : [$syncModule];
|
|
|
+ $inserted = [];
|
|
|
+ $syncDate = date('Y-m-d');
|
|
|
+ $workOrder['同步日期'] = $syncDate;
|
|
|
+
|
|
|
+ $erpDb->startTrans();
|
|
|
+ try {
|
|
|
+ foreach ($modules as $module) {
|
|
|
+ if ($module === '1') {
|
|
|
+ $rows = [$workOrder];
|
|
|
+ $count = $this->insertErpRows($erpDb, 'work_order', $rows);
|
|
|
+ $inserted['work_order'] = $count;
|
|
|
+ } elseif ($module === '2') {
|
|
|
+ $rows = $this->fetchWorkOrderProcessList($workOrderNo);
|
|
|
+ if (empty($rows)) {
|
|
|
+ throw new \Exception('工单工艺数据为空');
|
|
|
+ }
|
|
|
+ foreach ($rows as &$processRow) {
|
|
|
+ $processRow['生产款号'] = $workOrder['生产款号'];
|
|
|
+ $processRow['订单数量'] = $workOrder['订单数量'];
|
|
|
+ }
|
|
|
+ unset($processRow);
|
|
|
+ $count = $this->insertErpRows($erpDb, 'process', $rows);
|
|
|
+ $inserted['process'] = $count;
|
|
|
+ } elseif ($module === '3') {
|
|
|
+ $rows = $this->fetchProductionCheckRows($workOrderNo, $syncDate);
|
|
|
+ if (empty($rows)) {
|
|
|
+ throw new \Exception('报工数据为空,请先完成报工');
|
|
|
+ }
|
|
|
+ $count = $this->insertErpRows($erpDb, 'report', $rows, $syncDate);
|
|
|
+ $inserted['report'] = $count;
|
|
|
}
|
|
|
}
|
|
|
+ $erpDb->commit();
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ $erpDb->rollback();
|
|
|
+ throw $e;
|
|
|
}
|
|
|
- if ($i !== 0){
|
|
|
- $this->error('物料编码同步失败');
|
|
|
- }else{
|
|
|
- $this->success('物料编码同步成功');
|
|
|
- }
|
|
|
+
|
|
|
+ return $workOrderNo . '_' . $syncModule . '_' . time();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 客户供应商数据同步
|
|
|
- * @return void
|
|
|
- * @throws \think\Exception
|
|
|
- * @throws \think\db\exception\BindParamException
|
|
|
- * @throws \think\db\exception\DataNotFoundException
|
|
|
- * @throws \think\db\exception\ModelNotFoundException
|
|
|
- * @throws \think\exception\DbException
|
|
|
- * @throws \think\exception\PDOException
|
|
|
+ * 写入 ERP 表
|
|
|
*/
|
|
|
- public function CustomerSupplierData()
|
|
|
+ private function insertErpRows($erpDb, $tableKey, array $sourceRows, $syncDate = null)
|
|
|
{
|
|
|
- if ($this->request->isGet() === false){
|
|
|
- $this->error('请求错误');
|
|
|
+ $config = $this->erpTableMap[$tableKey];
|
|
|
+ if (empty($config['table'])) {
|
|
|
+ throw new \Exception('请先在 Synchronization.php 中配置 ERP [' . $tableKey . '] 表名');
|
|
|
}
|
|
|
- $db3 = \db()->connect(config('database.db3'));
|
|
|
- $OrganizationalDataList = $db3->name('U8_03客户供应商')
|
|
|
- ->where('MES接收时间',null)
|
|
|
- ->where('MES接收状态','0')
|
|
|
- ->select();
|
|
|
- if (empty($OrganizationalDataList)){
|
|
|
- $this->success('未找到新的客户供应商');
|
|
|
+
|
|
|
+ $sfbSeq = 0;
|
|
|
+ $sfbPrefix = '';
|
|
|
+ if ($tableKey === 'report') {
|
|
|
+ $syncDate = $syncDate ?: date('Y-m-d');
|
|
|
+ $sfbPrefix = 'K' . date('ymd', strtotime($syncDate));
|
|
|
+ $sfbSeq = $this->fetchMaxSfbSeq($erpDb, $sfbPrefix);
|
|
|
}
|
|
|
- $i = 0;
|
|
|
- foreach ($OrganizationalDataList as $key=>$value){
|
|
|
- $data = [
|
|
|
- '类型'=>$value['类型'],
|
|
|
- '编号'=>$value['编号'],
|
|
|
- '名称'=>$value['名称'],
|
|
|
- '简称'=>$value['简称'],
|
|
|
- '地址'=>$value['地址'],
|
|
|
- '对口部门'=>$value['对口部门'],
|
|
|
- '联系人'=>$value['联系人'],
|
|
|
- '电话'=>$value['电话'],
|
|
|
- '业务员'=>$value['业务员'],
|
|
|
- '币种'=>$value['币种'],
|
|
|
- 'Sys_id'=>'[272/超级用户]',
|
|
|
- 'Sys_rq'=>date('Y-m-d H:i:s',time()),
|
|
|
- 'Mod_rq'=>'1900-01-01 00:00:00',
|
|
|
- 'U8UID'=>$value['U8_UID'],
|
|
|
- 'UniqId'=>$value['UniqId'],
|
|
|
- ];
|
|
|
- $number = \db('erp_客户供应商')
|
|
|
- ->where('U8UID',$value['U8_UID'])
|
|
|
- ->count();
|
|
|
- if ($number === 0){
|
|
|
- $sql = \db('erp_客户供应商')->fetchSql(true)->insert($data);
|
|
|
- $res = \db()->query($sql);
|
|
|
- if ($res === false){
|
|
|
- $i++;
|
|
|
- }else{
|
|
|
- $sqlString = $db3->name('U8_03客户供应商')
|
|
|
- ->where('UniqId', $value['UniqId'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
- }
|
|
|
- }else{
|
|
|
- $sql = \db('erp_客户供应商')
|
|
|
- ->fetchSql(true)
|
|
|
- ->where('U8UID',$value['U8_UID'])
|
|
|
- ->update($data);
|
|
|
- $res = \db()->query($sql);
|
|
|
- if ($res === false){
|
|
|
- $i++;
|
|
|
- }else{
|
|
|
- $sqlString = $db3->name('U8_03客户供应商')
|
|
|
- ->where('UniqId', $value['UniqId'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
- }
|
|
|
+
|
|
|
+ $erpRows = [];
|
|
|
+ foreach ($sourceRows as $sourceRow) {
|
|
|
+ $mapped = $this->mapSourceRowToErp($sourceRow, $config['fields']);
|
|
|
+ if ($tableKey === 'report') {
|
|
|
+ $sfbSeq++;
|
|
|
+ $mapped['sfb_id'] = $sfbPrefix . str_pad((string)$sfbSeq, 4, '0', STR_PAD_LEFT);
|
|
|
+ }
|
|
|
+ if (!empty($mapped)) {
|
|
|
+ $erpRows[] = $mapped;
|
|
|
}
|
|
|
}
|
|
|
- if ($i !== 0){
|
|
|
- $this->error('客户供应商同步失败');
|
|
|
- }else{
|
|
|
- $this->success('客户供应商同步成功');
|
|
|
+ if (empty($erpRows)) {
|
|
|
+ throw new \Exception('ERP [' . $tableKey . '] 字段映射未配置或映射结果为空');
|
|
|
+ }
|
|
|
+
|
|
|
+ $result = $erpDb->name($config['table'])->insertAll($erpRows);
|
|
|
+ if ($result === false || $result === 0) {
|
|
|
+ throw new \Exception('写入 ERP [' . $tableKey . '] 失败');
|
|
|
}
|
|
|
+ return (int)$result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 物料领用记录数据同步
|
|
|
- * @return void
|
|
|
- * @throws \think\Exception
|
|
|
- * @throws \think\db\exception\BindParamException
|
|
|
- * @throws \think\db\exception\DataNotFoundException
|
|
|
- * @throws \think\db\exception\ModelNotFoundException
|
|
|
- * @throws \think\exception\DbException
|
|
|
- * @throws \think\exception\PDOException
|
|
|
+ * 查询 ERP 报工表当日 sfb_id 最大序号(K+年月日+四位自增)
|
|
|
+ * 须对末四位做数值 MAX,字符串 MAX 在序号≥10 时会算错导致主键冲突
|
|
|
*/
|
|
|
- public function ReceiptRecordData()
|
|
|
+ private function fetchMaxSfbSeq($erpDb, $sfbPrefix)
|
|
|
{
|
|
|
- if ($this->request->isGet() === false){
|
|
|
- $this->error('请求错误');
|
|
|
- }
|
|
|
- $db3 = \db()->connect(config('database.db3'));
|
|
|
- $OrganizationalDataList = $db3->name('U8_07物料领用')
|
|
|
- ->where('MES接收时间',null)
|
|
|
- ->where('MES接收状态','0')
|
|
|
- ->select();
|
|
|
- if (empty($OrganizationalDataList)){
|
|
|
- $this->success('未找到新的物料领用记录');
|
|
|
- }
|
|
|
- $i = 0;
|
|
|
- foreach ($OrganizationalDataList as $key=>$value){
|
|
|
- if (preg_match("/[A-Za-z]/",$value['工单编号'])){
|
|
|
- $workcode = $value['工单编号'];
|
|
|
- }else{
|
|
|
- $workcode = 'Y'.$value['工单编号'];
|
|
|
+ $row = $erpDb->query(
|
|
|
+ 'SELECT MAX(CAST(RIGHT(sfb_id, 4) AS INT)) AS max_seq FROM wfc_shift_feedback WHERE sfb_id LIKE ?',
|
|
|
+ [$sfbPrefix . '%']
|
|
|
+ );
|
|
|
+ if (empty($row) || !isset($row[0]['max_seq']) || $row[0]['max_seq'] === null) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return (int)$row[0]['max_seq'];
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 撤回时删除 ERP 数据(需配置表名及工单编号字段)
|
|
|
+ */
|
|
|
+ private function deleteErpDataByWorkOrder($workOrderNo)
|
|
|
+ {
|
|
|
+ $erpDb = $this->getErpDb();
|
|
|
+ foreach (['work_order', 'process', 'report'] as $tableKey) {
|
|
|
+ $config = $this->erpTableMap[$tableKey];
|
|
|
+ if (empty($config['table'])) {
|
|
|
+ continue;
|
|
|
}
|
|
|
- $data = [
|
|
|
- 'st_rq'=>$value['日期'],
|
|
|
- 'st_jylb'=>$value['交易类别'],
|
|
|
- 'st_gdbh'=>$workcode,
|
|
|
- '采购单号'=>$value['采购单号'],
|
|
|
- '供方批次'=>$value['供方批次'],
|
|
|
- 'st_wlbh'=>$value['物料编号'],
|
|
|
- 'st_sl'=>$value['领用数量'],
|
|
|
- 'st_dw'=>$value['领用单位'],
|
|
|
- '领用单价'=>$value['领用单价'],
|
|
|
- 'st_desc'=>$value['备注'],
|
|
|
- '仓库编号'=>$value['仓库编号'],
|
|
|
- 'st_dpt'=>$value['采购单号'],
|
|
|
- 'st_jtbh'=>$value['机台编号'],
|
|
|
- 'sys_id'=>'[272/超级用户]',
|
|
|
- 'sys_rq'=>date('Y-m-d H:i:s',time()),
|
|
|
- 'mod_rq'=>'1900-01-01 00:00:00',
|
|
|
- 'U8UID'=>$value['U8_UID'],
|
|
|
- 'Uniqid'=>$value['UniqId'],
|
|
|
- 'cpdh' => $value['产品编码']
|
|
|
- ];
|
|
|
- $number = \db('物料_收发记录')
|
|
|
- ->where('U8UID',$value['U8_UID'])
|
|
|
- ->count();
|
|
|
- if ($number === 0){
|
|
|
- $sql = \db('物料_收发记录')->fetchSql(true)->insert($data);
|
|
|
- $res = \db()->query($sql);
|
|
|
- if ($res === false){
|
|
|
- $i++;
|
|
|
- }else{
|
|
|
- $sqlString = $db3->name('U8_07物料领用')
|
|
|
- ->where('UniqId', $value['UniqId'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
- }
|
|
|
- }else{
|
|
|
- $sql = \db('物料_收发记录')
|
|
|
- ->fetchSql(true)
|
|
|
- ->where('U8UID',$value['U8_UID'])
|
|
|
- ->update($data);
|
|
|
- $res = \db()->query($sql);
|
|
|
- if ($res === false){
|
|
|
- $i++;
|
|
|
- }else{
|
|
|
- $sqlString = $db3->name('U8_07物料领用')
|
|
|
- ->where('UniqId', $value['UniqId'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
- }
|
|
|
+ $workOrderField = $this->resolveErpWorkOrderField($tableKey, $config['fields']);
|
|
|
+ if ($workOrderField === '') {
|
|
|
+ continue;
|
|
|
}
|
|
|
- }
|
|
|
- if ($i !== 0){
|
|
|
- $this->error('物料领用记录同步失败');
|
|
|
- }else{
|
|
|
- $this->success('物料领用记录同步成功');
|
|
|
+ $erpDb->name($config['table'])->where($workOrderField, $workOrderNo)->delete();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 仓库信息数据同步
|
|
|
- * @return void
|
|
|
- * @throws \think\Exception
|
|
|
- * @throws \think\db\exception\BindParamException
|
|
|
- * @throws \think\db\exception\DataNotFoundException
|
|
|
- * @throws \think\db\exception\ModelNotFoundException
|
|
|
- * @throws \think\exception\DbException
|
|
|
- * @throws \think\exception\PDOException
|
|
|
+ * MES 行映射为 ERP 行
|
|
|
*/
|
|
|
- public function WarehouseInformationData()
|
|
|
+ private function mapSourceRowToErp(array $sourceRow, array $fieldMap)
|
|
|
{
|
|
|
- if ($this->request->isGet() === false){
|
|
|
- $this->error('请求错误');
|
|
|
+ $erpRow = [];
|
|
|
+ foreach ($fieldMap as $mesField => $erpField) {
|
|
|
+ if ($erpField === '' || $erpField === null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if ($mesField !== '' && $mesField[0] === '=') {
|
|
|
+ $erpRow[$erpField] = substr($mesField, 1);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (array_key_exists($mesField, $sourceRow)) {
|
|
|
+ $erpRow[$erpField] = $sourceRow[$mesField];
|
|
|
+ }
|
|
|
}
|
|
|
- $db3 = \db()->connect(config('database.db3'));
|
|
|
- $OrganizationalDataList = $db3->name('U8_12仓库信息')
|
|
|
- ->where('MES接收时间',null)
|
|
|
- ->where('MES接收状态','0')
|
|
|
- ->select();
|
|
|
- if (empty($OrganizationalDataList)){
|
|
|
- $this->success('未找到新的仓库信息');
|
|
|
+ return $erpRow;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function resolveErpWorkOrderField($tableKey, array $fieldMap)
|
|
|
+ {
|
|
|
+ $candidates = ['订单编号', 'work_order', 'work_order_no'];
|
|
|
+ if ($tableKey === 'work_order') {
|
|
|
+ $candidates = ['订单编号', 'work_order_no'];
|
|
|
}
|
|
|
- $i = 0;
|
|
|
- foreach ($OrganizationalDataList as $key=>$value){
|
|
|
- $data = [
|
|
|
- '编号'=>$value['编号'],
|
|
|
- '名称'=>$value['名称'],
|
|
|
- 'Sys_id'=>'[272/超级用户]',
|
|
|
- 'Sys_rq'=>date('Y-m-d H:i:s',time()),
|
|
|
- 'Mod_rq'=>'1900-01-01 00:00:00',
|
|
|
- 'U8UID'=>$value['U8_UID'],
|
|
|
- 'UniqId'=>$value['UniqId'],
|
|
|
- ];
|
|
|
- $number = \db('物料_仓库信息')
|
|
|
- ->where('U8UID',$value['U8_UID'])
|
|
|
- ->count();
|
|
|
- if ($number === 0){
|
|
|
- $sql = \db('物料_仓库信息')->fetchSql(true)->insert($data);
|
|
|
- $res = \db()->query($sql);
|
|
|
- if ($res === false){
|
|
|
- $i++;
|
|
|
- }else{
|
|
|
- $sqlString = $db3->name('U8_12仓库信息')
|
|
|
- ->where('UniqId', $value['UniqId'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
- }
|
|
|
- }else{
|
|
|
- $sql = \db('物料_仓库信息')
|
|
|
- ->fetchSql(true)
|
|
|
- ->where('U8UID',$value['U8_UID'])
|
|
|
- ->update($data);
|
|
|
- $res = \db()->query($sql);
|
|
|
- if ($res === false){
|
|
|
- $i++;
|
|
|
- }else{
|
|
|
- $sqlString = $db3->name('U8_12仓库信息')
|
|
|
- ->where('UniqId', $value['UniqId'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
- }
|
|
|
+ foreach ($candidates as $mesField) {
|
|
|
+ if (isset($fieldMap[$mesField]) && $fieldMap[$mesField] !== '') {
|
|
|
+ return $fieldMap[$mesField];
|
|
|
}
|
|
|
}
|
|
|
- if ($i !== 0){
|
|
|
- $this->error('仓库信息同步失败');
|
|
|
- }else{
|
|
|
- $this->success('仓库信息同步成功');
|
|
|
- }
|
|
|
+ return '';
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 职位编码数据同步
|
|
|
- * @return void
|
|
|
- * @throws \think\Exception
|
|
|
- * @throws \think\db\exception\BindParamException
|
|
|
- * @throws \think\db\exception\DataNotFoundException
|
|
|
- * @throws \think\db\exception\ModelNotFoundException
|
|
|
- * @throws \think\exception\DbException
|
|
|
- * @throws \think\exception\PDOException
|
|
|
+ * 工序产量核查数据(与 WorkOrderProcess::checkProcessProduction 一致,扁平化为报工行)
|
|
|
*/
|
|
|
- public function PositionData()
|
|
|
+ private function fetchProductionCheckRows($workOrderNo, $syncDate = null)
|
|
|
{
|
|
|
- if ($this->request->isGet() === false){
|
|
|
- $this->error('请求错误');
|
|
|
- }
|
|
|
- $db3 = \db()->connect(config('database.db3'));
|
|
|
- $OrganizationalDataList = $db3->name('U8_13职位编码')
|
|
|
- ->where('MES接收时间',null)
|
|
|
- ->where('MES接收状态','0')
|
|
|
+ $syncDate = $syncDate ?: date('Y-m-d');
|
|
|
+ $list = Db::name('设备_工分计酬')->alias('a')
|
|
|
+ ->join('工单_基本资料 b', 'a.work_order = b.订单编号 AND b.Mod_rq IS NULL', 'LEFT')
|
|
|
+ ->where('a.work_order', $workOrderNo)
|
|
|
+ ->whereNull('a.del_rq')
|
|
|
+ ->field('b.订单编号,b.生产款号,b.款式,a.process_code as 工序号,a.process_name as 工序名称,a.staff_no as 员工编号,a.staff_name as 员工姓名,
|
|
|
+ SUM(a.number) as 数量,MIN(a.date) as 开工日期,MAX(a.date) as 完工日期,
|
|
|
+ SUM(a.standard_score) as 工分,SUM(a.production_score) as 工时,SUM(a.salary) as 工资')
|
|
|
+ ->group('b.订单编号,b.生产款号,b.款式,a.process_code,a.process_name,a.staff_no,a.staff_name')
|
|
|
+ ->order('a.process_code asc,a.staff_no asc')
|
|
|
->select();
|
|
|
- if (empty($OrganizationalDataList)){
|
|
|
- $this->success('未找到新的职位编码');
|
|
|
+
|
|
|
+ if (empty($list)) {
|
|
|
+ return [];
|
|
|
}
|
|
|
- $i = 0;
|
|
|
- foreach ($OrganizationalDataList as $key=>$value){
|
|
|
- $data = [
|
|
|
- '职位编码'=>$value['职位编码'],
|
|
|
- '职位名称'=>$value['职位名称'],
|
|
|
- '定编人数'=>0,
|
|
|
- '备注说明'=>'',
|
|
|
- 'sys_id'=>'[272/超级用户]',
|
|
|
- 'sys_rq'=>date('Y-m-d H:i:s',time()),
|
|
|
- 'Mod_rq'=>'1900-01-01 00:00:00',
|
|
|
- 'U8UID'=>$value['U8_UID'],
|
|
|
- 'UniqID'=>$value['UniqID'],
|
|
|
+
|
|
|
+ $rows = [];
|
|
|
+ foreach ($list as $row) {
|
|
|
+ $rows[] = [
|
|
|
+ '订单编号' => $row['订单编号'],
|
|
|
+ '生产款号' => $row['生产款号'],
|
|
|
+ '款式' => $row['款式'],
|
|
|
+ '工序号' => $row['工序号'],
|
|
|
+ '工序名称' => $row['工序名称'],
|
|
|
+ '员工编号' => $row['员工编号'],
|
|
|
+ '员工姓名' => $row['员工姓名'],
|
|
|
+ '数量' => floatval($row['数量']),
|
|
|
+ '开工日期' => !empty($row['开工日期']) ? date('Y-m-d', strtotime($row['开工日期'])) : '',
|
|
|
+ '完工日期' => !empty($row['完工日期']) ? date('Y-m-d', strtotime($row['完工日期'])) : '',
|
|
|
+ '填报日期' => $syncDate,
|
|
|
+ '工分' => round(floatval($row['工分']), 4),
|
|
|
+ '工时' => round(floatval($row['工时']), 4),
|
|
|
+ '工资' => round(floatval($row['工资']), 4),
|
|
|
];
|
|
|
- $number = \db('人事_职位编码')
|
|
|
- ->where('U8UID',$value['U8_UID'])
|
|
|
- ->count();
|
|
|
- if ($number === 0){
|
|
|
- $sql = \db('人事_职位编码')->fetchSql(true)->insert($data);
|
|
|
- $res = \db()->query($sql);
|
|
|
- if ($res === false){
|
|
|
- $i++;
|
|
|
- }else{
|
|
|
- $sqlString = $db3->name('U8_13职位编码')
|
|
|
- ->where('UniqID', $value['UniqID'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
- }
|
|
|
- }else{
|
|
|
- $sql = \db('人事_职位编码')
|
|
|
- ->fetchSql(true)
|
|
|
- ->where('U8UID',$value['U8_UID'])
|
|
|
- ->update($data);
|
|
|
- $res = \db()->query($sql);
|
|
|
- if ($res === false){
|
|
|
- $i++;
|
|
|
- }else{
|
|
|
- $sqlString = $db3->name('U8_13职位编码')
|
|
|
- ->where('UniqID', $value['UniqID'])
|
|
|
- ->fetchSql(true)
|
|
|
- ->update([
|
|
|
- 'MES接收时间' => date('Y-m-d H:i:s', time()),
|
|
|
- 'MES接收状态' => '1'
|
|
|
- ]);
|
|
|
- $db3->execute($sqlString);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if ($i !== 0){
|
|
|
- $this->error('职位编码同步失败');
|
|
|
- }else{
|
|
|
- $this->success('职位编码同步成功');
|
|
|
}
|
|
|
+ return $rows;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 设备产量计酬云中间表数据库同步
|
|
|
- * @return void
|
|
|
- * @throws \think\db\exception\BindParamException
|
|
|
- * @throws \think\db\exception\DataNotFoundException
|
|
|
- * @throws \think\db\exception\ModelNotFoundException
|
|
|
- * @throws \think\exception\DbException
|
|
|
- * @throws \think\exception\PDOException
|
|
|
- */
|
|
|
-// public function ProductionData()
|
|
|
-// {
|
|
|
-// if ($this->request->isGet() === false){
|
|
|
-// $this->error('请求错误');
|
|
|
-// }
|
|
|
-// if(is_dir(ROOT_PATH.'public/'.date('Y-m-d',time())) == null)
|
|
|
-// {
|
|
|
-// mkdir(ROOT_PATH.'public/'.date('Y-m-d',time()),0777,true);
|
|
|
-// }
|
|
|
-// $machineList = \db('设备_基本资料')
|
|
|
-// ->where('mn_设备编号','<>','')
|
|
|
-// ->where('sys_sbID','<>','')
|
|
|
-// ->field('mn_设备编号')
|
|
|
-// ->select();
|
|
|
-// $machine = [];
|
|
|
-// foreach ($machineList as $value){
|
|
|
-// array_push($machine,$value['mn_设备编号']);
|
|
|
-// }
|
|
|
-// $db5 = \db()->connect(config('database.db5'));
|
|
|
-// $where = [
|
|
|
-// 'sczl_rq' => ['>=','2024-05-01 00:00:00']
|
|
|
-// ];
|
|
|
-// $productData = $db5->name('设备_产量计酬')
|
|
|
-// ->where($where)
|
|
|
-// ->where('sczl_jtbh','in',$machine)
|
|
|
-// ->select();
|
|
|
-// //获取机台信息
|
|
|
-// $machineData = \db('设备_基本资料')
|
|
|
-// ->where('mn_设备编号','<>','')
|
|
|
-// ->where('sys_sbID','<>','')
|
|
|
-// ->field('rtrim(设备编号) as 设备编号,rtrim(mn_设备编号) as 美浓设备编号')
|
|
|
-// ->select();
|
|
|
-// //获取员工资料
|
|
|
-// $employeeData = \db('人事_基本资料')
|
|
|
-// ->where('mn_员工编号','<>','')
|
|
|
-// ->field('rtrim(mn_员工编号) as 美浓员工编号')
|
|
|
-// ->select();
|
|
|
-// $employee = array_column($employeeData,'美浓员工编号');
|
|
|
-// //循环判断机台、员工编号
|
|
|
-// $j = 0;
|
|
|
-// $data = [];
|
|
|
-// foreach ($productData as $key=>$value){
|
|
|
-//// 判断机台编号
|
|
|
-// foreach ($machineData as $v){
|
|
|
-// if ($value['sczl_jtbh'] === $v['美浓设备编号']){
|
|
|
-// $productData[$key]['sczl_jtbh'] = $v['美浓设备编号'];
|
|
|
-// array_push($data,$productData[$key]);
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// if (empty($data)){
|
|
|
-// $this->error('未找到新的生产数据');
|
|
|
-// }
|
|
|
-// foreach ($data as $key=>$value){
|
|
|
-// $name = [];
|
|
|
-// //判断员工编号,如果不存在写入日志文件
|
|
|
-// for($i=1;$i<=10;$i++){
|
|
|
-// if (in_array($data[$key]['sczl_bh'.$i],$employee)){
|
|
|
-// $data[$key]['sczl_bh'.$i] = \db('人事_基本资料')
|
|
|
-// ->where('mn_员工编号',$data[$key]['sczl_bh'.$i])
|
|
|
-// ->value('员工编号');
|
|
|
-// }else{
|
|
|
-// array_push($name,$value['sczl_bh'.$i]);
|
|
|
-// $data[$key]['sczl_bh'.$i] = '';
|
|
|
-// }
|
|
|
-//
|
|
|
-// }
|
|
|
-// $name = array_unique($name);
|
|
|
-// $filename = ROOT_PATH.'public/'.date('Y-m-d',time()).'/'.$value['sczl_jtbh'].'日志文件.txt';
|
|
|
-// $handle = fopen($filename, 'w');
|
|
|
-// foreach ($name as $v){
|
|
|
-// fwrite($handle, $v);
|
|
|
-// }
|
|
|
-// fclose($handle);
|
|
|
-// //修改工单编号
|
|
|
-//// if (preg_match("/[A-Za-z]/",$value['sczl_gdbh'])){
|
|
|
-//// $workcode = $value['sczl_gdbh'];
|
|
|
-//// }else{
|
|
|
-//// $workcode = 'Y'.$value['sczl_gdbh'];
|
|
|
-//// }
|
|
|
-//// $data[$key]['sczl_gdbh'] = $workcode;
|
|
|
-// }
|
|
|
-// //插入设备产量计酬数据
|
|
|
-// \db('设备_产量计酬')->delete(true);
|
|
|
-// $sql = \db('设备_产量计酬')->fetchSql(true)->insertAll($data);
|
|
|
-// $res = \db()->query($sql);
|
|
|
-// if ($res !== false){
|
|
|
-// $this->success('同步成功');
|
|
|
-// }else{
|
|
|
-// $this->error('同步失败');
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- //工单核检单同步
|
|
|
- public function copy()
|
|
|
+ private function fetchWorkOrderBasic($workOrderNo)
|
|
|
{
|
|
|
- $param = $this->request->param();
|
|
|
- $db5 = \db()->connect(config('database.db5'));
|
|
|
- $list = $db5->name('db_qczl')
|
|
|
- ->where('qczl_gdbh',$param['order'])
|
|
|
- ->where('qczl_yjno',$param['yjno'])
|
|
|
+ return Db::table('工单_基本资料')
|
|
|
+ ->where('订单编号', $workOrderNo)
|
|
|
+ ->whereNull('Mod_rq')
|
|
|
+ ->find();
|
|
|
+ }
|
|
|
+
|
|
|
+ private function fetchWorkOrderProcessList($workOrderNo)
|
|
|
+ {
|
|
|
+ return Db::table('工单_基础工艺资料')
|
|
|
+ ->where('work_order', $workOrderNo)
|
|
|
+ ->whereNull('del_rq')
|
|
|
+ ->field('work_order,part_code,part_name,process_code,process_name,big_process,
|
|
|
+ standard_hour,standard_minutes,standard_score,money,coefficient,remark')
|
|
|
+ ->order('process_code')
|
|
|
->select();
|
|
|
- foreach ($list as $key=>$value){
|
|
|
- for ($i=1;$i<14;$i++){
|
|
|
- if (!empty($value['fp_bh'.$i])){
|
|
|
- $name = \db('人事_基本资料')
|
|
|
- ->where('mn_员工编号',$value['fp_bh'.$i])
|
|
|
- ->order('Uniqid')
|
|
|
- ->value('员工编号');
|
|
|
- if (empty($name)){
|
|
|
- $name = '0000';
|
|
|
- }
|
|
|
- $list[$key]['fp_bh'.$i] = $name;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function fetchReportSeqRange($workOrderNo)
|
|
|
+ {
|
|
|
+ $range = Db::table('设备_工分计酬')
|
|
|
+ ->where('work_order', $workOrderNo)
|
|
|
+ ->whereNull('del_rq')
|
|
|
+ ->field('MIN(id) as min_id,MAX(id) as max_id')
|
|
|
+ ->find();
|
|
|
+ return [
|
|
|
+ 'start' => !empty($range['min_id']) ? (string)$range['min_id'] : '',
|
|
|
+ 'end' => !empty($range['max_id']) ? (string)$range['max_id'] : '',
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ private function insertSyncLog(array $data)
|
|
|
+ {
|
|
|
+ $data['create_time'] = date('Y-m-d H:i:s');
|
|
|
+ $data['update_time'] = $data['create_time'];
|
|
|
+ return (int)Db::name('mes_erp_work_order_sync_log')->insertGetId($data);
|
|
|
+ }
|
|
|
+
|
|
|
+ private function insertOperationLog(array $data)
|
|
|
+ {
|
|
|
+ $data['create_time'] = date('Y-m-d H:i:s');
|
|
|
+ return (int)Db::name('mes_erp_operation_log')->insertGetId($data);
|
|
|
+ }
|
|
|
+
|
|
|
+ private function getErpDb()
|
|
|
+ {
|
|
|
+ return Db::connect(config('database.db2'));
|
|
|
+ }
|
|
|
+
|
|
|
+ private function batchResolveDisplaySyncStatus(array $orderNos)
|
|
|
+ {
|
|
|
+ $orderNos = array_values(array_unique(array_filter($orderNos)));
|
|
|
+ if (empty($orderNos)) {
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+
|
|
|
+ $defaultStatus = $this->defaultDisplaySyncStatus();
|
|
|
+ $result = [];
|
|
|
+ foreach ($orderNos as $orderNo) {
|
|
|
+ $result[$orderNo] = $defaultStatus;
|
|
|
+ }
|
|
|
+
|
|
|
+ $latestSyncRows = Db::name('mes_erp_work_order_sync_log')
|
|
|
+ ->whereIn('work_order_no', $orderNos)
|
|
|
+ ->order('id desc')
|
|
|
+ ->select();
|
|
|
+ $latestSyncMap = [];
|
|
|
+ foreach ($latestSyncRows as $row) {
|
|
|
+ if (!isset($latestSyncMap[$row['work_order_no']])) {
|
|
|
+ $latestSyncMap[$row['work_order_no']] = $row;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $successSyncRows = Db::name('mes_erp_work_order_sync_log')
|
|
|
+ ->whereIn('work_order_no', $orderNos)
|
|
|
+ ->where('sync_status', self::SYNC_STATUS_SUCCESS)
|
|
|
+ ->order('id desc')
|
|
|
+ ->select();
|
|
|
+ $latestSuccessSyncMap = [];
|
|
|
+ foreach ($successSyncRows as $row) {
|
|
|
+ if (!isset($latestSuccessSyncMap[$row['work_order_no']])) {
|
|
|
+ $latestSuccessSyncMap[$row['work_order_no']] = $row;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $cancelRows = Db::name('mes_erp_operation_log')
|
|
|
+ ->whereIn('work_order_no', $orderNos)
|
|
|
+ ->where('operate_type', 'cancel')
|
|
|
+ ->where('operate_status', self::OPERATE_STATUS_SUCCESS)
|
|
|
+ ->order('id desc')
|
|
|
+ ->select();
|
|
|
+ $latestCancelMap = [];
|
|
|
+ foreach ($cancelRows as $row) {
|
|
|
+ if (!isset($latestCancelMap[$row['work_order_no']])) {
|
|
|
+ $latestCancelMap[$row['work_order_no']] = $row;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($orderNos as $orderNo) {
|
|
|
+ $latestSync = isset($latestSyncMap[$orderNo]) ? $latestSyncMap[$orderNo] : null;
|
|
|
+ if (empty($latestSync)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ $latestSuccessSync = isset($latestSuccessSyncMap[$orderNo]) ? $latestSuccessSyncMap[$orderNo] : null;
|
|
|
+ if (!empty($latestSuccessSync)) {
|
|
|
+ $cancelAfterSync = isset($latestCancelMap[$orderNo]) ? $latestCancelMap[$orderNo] : null;
|
|
|
+ if (!empty($cancelAfterSync) && $cancelAfterSync['operate_time'] >= $latestSuccessSync['sync_time']) {
|
|
|
+ $result[$orderNo] = [
|
|
|
+ 'code' => 'cancelled',
|
|
|
+ 'text' => '已撤回',
|
|
|
+ 'sync_time' => $latestSuccessSync['sync_time'],
|
|
|
+ 'sync_msg' => $latestSync['sync_msg'],
|
|
|
+ 'sync_log_id' => $latestSuccessSync['id'],
|
|
|
+ ];
|
|
|
+ continue;
|
|
|
}
|
|
|
+ $result[$orderNo] = [
|
|
|
+ 'code' => 'synced',
|
|
|
+ 'text' => '已同步',
|
|
|
+ 'sync_time' => $latestSuccessSync['sync_time'],
|
|
|
+ 'sync_msg' => $latestSuccessSync['sync_msg'],
|
|
|
+ 'sync_log_id' => $latestSuccessSync['id'],
|
|
|
+ ];
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ((int)$latestSync['sync_status'] === self::SYNC_STATUS_FAILED) {
|
|
|
+ $result[$orderNo] = [
|
|
|
+ 'code' => 'failed',
|
|
|
+ 'text' => '同步失败',
|
|
|
+ 'sync_time' => $latestSync['sync_time'],
|
|
|
+ 'sync_msg' => $latestSync['sync_msg'],
|
|
|
+ 'sync_log_id' => $latestSync['id'],
|
|
|
+ ];
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ $result[$orderNo] = [
|
|
|
+ 'code' => 'pending',
|
|
|
+ 'text' => '待同步',
|
|
|
+ 'sync_time' => $latestSync['sync_time'],
|
|
|
+ 'sync_msg' => $latestSync['sync_msg'],
|
|
|
+ 'sync_log_id' => $latestSync['id'],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function resolveDisplaySyncStatus($workOrderNo)
|
|
|
+ {
|
|
|
+ $latestSync = Db::name('mes_erp_work_order_sync_log')
|
|
|
+ ->where('work_order_no', $workOrderNo)
|
|
|
+ ->order('id desc')
|
|
|
+ ->find();
|
|
|
+
|
|
|
+ if (empty($latestSync)) {
|
|
|
+ return $this->defaultDisplaySyncStatus();
|
|
|
+ }
|
|
|
+
|
|
|
+ $latestSuccessSync = Db::name('mes_erp_work_order_sync_log')
|
|
|
+ ->where('work_order_no', $workOrderNo)
|
|
|
+ ->where('sync_status', self::SYNC_STATUS_SUCCESS)
|
|
|
+ ->order('id desc')
|
|
|
+ ->find();
|
|
|
+
|
|
|
+ if (!empty($latestSuccessSync)) {
|
|
|
+ $cancelAfterSync = Db::name('mes_erp_operation_log')
|
|
|
+ ->where('work_order_no', $workOrderNo)
|
|
|
+ ->where('operate_type', 'cancel')
|
|
|
+ ->where('operate_status', self::OPERATE_STATUS_SUCCESS)
|
|
|
+ ->where('operate_time', '>=', $latestSuccessSync['sync_time'])
|
|
|
+ ->order('id desc')
|
|
|
+ ->find();
|
|
|
+ if (!empty($cancelAfterSync)) {
|
|
|
+ return [
|
|
|
+ 'code' => 'cancelled',
|
|
|
+ 'text' => '已撤回',
|
|
|
+ 'sync_time' => $latestSuccessSync['sync_time'],
|
|
|
+ 'sync_msg' => $latestSync['sync_msg'],
|
|
|
+ 'sync_log_id' => $latestSuccessSync['id'],
|
|
|
+ ];
|
|
|
}
|
|
|
+ return [
|
|
|
+ 'code' => 'synced',
|
|
|
+ 'text' => '已同步',
|
|
|
+ 'sync_time' => $latestSuccessSync['sync_time'],
|
|
|
+ 'sync_msg' => $latestSuccessSync['sync_msg'],
|
|
|
+ 'sync_log_id' => $latestSuccessSync['id'],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ if ((int)$latestSync['sync_status'] === self::SYNC_STATUS_FAILED) {
|
|
|
+ return [
|
|
|
+ 'code' => 'failed',
|
|
|
+ 'text' => '同步失败',
|
|
|
+ 'sync_time' => $latestSync['sync_time'],
|
|
|
+ 'sync_msg' => $latestSync['sync_msg'],
|
|
|
+ 'sync_log_id' => $latestSync['id'],
|
|
|
+ ];
|
|
|
}
|
|
|
- $sql = \db('db_qczl')->fetchSql(true)->insertAll($list);
|
|
|
- \db()->query($sql);
|
|
|
|
|
|
+ return [
|
|
|
+ 'code' => 'pending',
|
|
|
+ 'text' => '待同步',
|
|
|
+ 'sync_time' => $latestSync['sync_time'],
|
|
|
+ 'sync_msg' => $latestSync['sync_msg'],
|
|
|
+ 'sync_log_id' => $latestSync['id'],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ private function defaultDisplaySyncStatus()
|
|
|
+ {
|
|
|
+ return [
|
|
|
+ 'code' => 'unsynced',
|
|
|
+ 'text' => '未同步',
|
|
|
+ 'sync_time' => '',
|
|
|
+ 'sync_msg' => '',
|
|
|
+ 'sync_log_id' => null,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ private function buildSyncOperateContent($workOrderNo, $syncModule, $operateType)
|
|
|
+ {
|
|
|
+ $moduleText = $this->syncModuleText($syncModule);
|
|
|
+ $typeMap = [
|
|
|
+ 'sync' => '同步',
|
|
|
+ 'retry' => '重试同步',
|
|
|
+ 'manual' => '手动同步',
|
|
|
+ 'auto' => '自动同步',
|
|
|
+ ];
|
|
|
+ $typeText = isset($typeMap[$operateType]) ? $typeMap[$operateType] : '同步';
|
|
|
+ return $typeText . '工单' . $workOrderNo . ',模块:' . $moduleText;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function syncStatusText($status)
|
|
|
+ {
|
|
|
+ $map = [
|
|
|
+ self::SYNC_STATUS_PENDING => '待同步',
|
|
|
+ self::SYNC_STATUS_SUCCESS => '同步成功',
|
|
|
+ self::SYNC_STATUS_FAILED => '同步失败',
|
|
|
+ ];
|
|
|
+ return isset($map[(int)$status]) ? $map[(int)$status] : '未知';
|
|
|
+ }
|
|
|
+
|
|
|
+ private function syncModuleText($module)
|
|
|
+ {
|
|
|
+ $map = [
|
|
|
+ '1' => '工单数据',
|
|
|
+ '2' => '工艺数据',
|
|
|
+ '3' => '报工数据',
|
|
|
+ '4' => '全量同步',
|
|
|
+ ];
|
|
|
+ return isset($map[(string)$module]) ? $map[(string)$module] : (string)$module;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function operateStatusText($status)
|
|
|
+ {
|
|
|
+ $map = [
|
|
|
+ self::OPERATE_STATUS_SUCCESS => '成功',
|
|
|
+ self::OPERATE_STATUS_FAILED => '失败',
|
|
|
+ self::OPERATE_STATUS_PROCESSING => '处理中',
|
|
|
+ ];
|
|
|
+ return isset($map[(int)$status]) ? $map[(int)$status] : '未知';
|
|
|
+ }
|
|
|
+
|
|
|
+ private function formatDateValue($value)
|
|
|
+ {
|
|
|
+ if (empty($value)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ $timestamp = strtotime($value);
|
|
|
+ return $timestamp ? date('Y-m-d', $timestamp) : null;
|
|
|
}
|
|
|
-}
|
|
|
+}
|